1pub mod macros;
49pub use macros::log_include_hydration_failure;
50
51pub const STANDARD_ENDPOINT_COUNT: usize = 12;
53
54pub mod config;
55pub mod crud;
56pub mod entity;
57pub mod repository;
58pub mod extractors;
59pub mod http;
60pub mod grpc;
61pub mod builder;
62pub mod utils;
63pub mod persistence;
64pub mod specification;
65pub mod registry;
66
67pub mod module;
69pub mod module_registry;
70
71pub mod domain_service;
73pub mod command;
74pub mod query;
75pub mod value_object;
76pub mod aggregate;
77pub mod error;
78
79pub mod service;
81pub mod violation;
82pub mod write_guard;
83pub mod row_rule;
84pub mod usecase;
85pub mod validation;
86pub mod policy;
87pub mod bulk;
88pub mod integration;
89pub mod cqrs;
90pub mod graphql;
91
92pub mod trigger;
94pub mod flow;
95pub mod projection;
96pub mod state_machine;
97
98#[cfg(feature = "openapi")]
100pub mod openapi;
101
102pub use trigger::{
103 TriggerHandler, TriggerEvent, TriggerContext, TriggerContextMut,
104 ActionExecutor, TriggerRegistry,
105};
106
107pub use entity::*;
109pub use repository::*;
110pub use grpc::*;
111pub use builder::*;
112
113pub use config::{
115 BackboneConfig, ConfigError, ConfigResult, ConfigLoader,
116 AppConfig, Environment,
118 ServerConfig,
120 DatabaseConfig, CacheConfig,
122 ModulesConfig, SapiensConfig, PostmanConfig, BucketConfig,
124 SapiensAuthConfig, PasswordHasherConfig, SapiensLockoutConfig,
125 SmtpConfig, TemplatesConfig, StorageConfig,
126 LoggingConfig, LoggingFileConfig,
128 MonitoringConfig,
130 ContextsConfig, RedisEventBusConfig,
132 FeaturesConfig, RateLimitingConfig,
134 SecurityConfig, CsrfConfig, SecurityHeadersConfig,
136 ConfigurationBus, ConfigValue, ConfigChangeEvent,
138};
139
140pub use http::{
142 CrudService,
144 BackboneCrudHandler,
145 BackboneHttpHandler,
146 AccessScope,
148 ApiResponse,
150 PaginatedResponse,
151 PaginatedApiResponse,
152 PaginationResponse,
153 BulkResponse,
154 BulkCreateRequest,
155 ListQueryParams,
157 ListRequest,
158 UpsertRequest,
159 FilterOptions,
160 SortOrder,
161 BatchIdsRequest,
162 BulkUpdateItem,
163 BulkPatchItem,
164 BulkPatchRequest,
165 PaginationRequest,
167};
168
169#[cfg(feature = "openapi")]
171pub use openapi::BackboneComponents;
172
173pub use utils::{
175 BackboneError, PaginationParams, PaginationMeta as BackbonePaginationMeta,
176 now, days_ago, days_from_now, hours_ago, hours_from_now, minutes_from_now,
177 new_id, new_id_string, parse_id, is_valid_uuid,
178 is_valid_email, is_valid_username, normalize_string,
179};
180
181pub use persistence::{
183 CrudRepository, PersistentEntity, RepositoryError, PartialUpdatable, SearchableRepository, Versioned,
185 InMemoryRepository,
187 CrudServiceAdapter, SimpleCrudServiceAdapter, AdapterError,
189};
190
191pub use specification::{
193 Specification,
195 AndSpecification, OrSpecification, NotSpecification,
197 SpecificationResult, SpecificationEvaluator,
199 AlwaysTrue, AlwaysFalse, PredicateSpecification,
201 predicate,
203};
204
205#[cfg(feature = "postgres")]
207pub use persistence::{PostgresRepository, PostgresRepositoryBuilder, PostgresEntity};
208
209pub use registry::{
211 ModuleService,
213 ServiceRegistry,
215 ServiceHealth, HealthStatus, RegistryHealth, RegistryStatistics,
217 ServiceDescriptor,
219};
220
221pub use module::{
223 BackboneModule,
224 MigrationInfo,
225 SeedInfo,
226};
227
228pub use module_registry::{
229 ModuleRegistry,
230 ModuleRegistryError,
231 ModuleRegistryResult,
232};
233
234pub use domain_service::{DomainService, TransactionalDomainService};
236
237pub use command::{Command, CommandHandler, CommandDispatcher, ValidatableCommand, ValidatingCommandHandler};
238
239pub use query::{
240 Query, QueryHandler, QueryDispatcher,
241 CacheableQuery, PaginatedQuery, PaginatedQueryResult,
242};
243
244pub use value_object::{ValueObject, OptionalValueObject, ValueObjectError};
245
246pub use aggregate::{AggregateRoot, EventSourcedAggregate, InvariantAggregate, AggregateMetadata};
247
248pub use error::{ModuleError, ErrorCategory, ErrorResponse, CommonError};
249
250pub use violation::{code_from_constraint, Violation};
252pub use write_guard::{AllowAll, GuardOutcome, WriteCtx, WriteGuard, WriteKind};
253pub use service::{
254 GenericCrudService, ServiceError, ServiceResult,
255 FromCreateDto, ApplyUpdateDto, ServiceLifecycle, NoOpLifecycle,
256};
257
258pub use usecase::{
259 UseCaseError, UseCaseResult,
260 UseCaseHooks, DefaultHooks,
261 UseCaseService, EntityFactory, EntityUpdater,
262 CreateUseCase, UpdateUseCase, GetUseCase, DeleteUseCase,
263 ListUseCase, ListParams, ListResult, ListService,
264};
265
266pub use validation::{
267 ValidationError, ValidationErrors, FieldRule, EntityValidator,
268 RequiredString, MaxLength, NonNegative, OptionalNotBlank, Regex, RequiredUuid,
269};
270
271pub use policy::{
272 PolicyContext, PolicyOutcome, PolicyDecision, DomainPolicy,
273 PermitAllPolicy, DenyAllPolicy,
274 AllOfPolicy, AnyOfPolicy, NotPolicy,
275};
276
277pub use bulk::{
278 BulkFailureMode, BulkOperationConfig, BulkItemResult, BulkOperationResult,
279 BulkOperationProgress, BulkCapableService, GenericBulkService,
280};
281
282pub use integration::{
283 ModuleAdapter, ProjectionAdapter, IntegrationError,
284 EventBridge, IdentityAdapter, identity_adapter,
285};
286
287pub use cqrs::{
288 GenericCreateCommand, GenericUpdateCommand, GenericDeleteCommand, GenericRestoreCommand,
290 GenericGetQuery, GenericListQuery, GenericListDeletedQuery,
292 GenericCommandHandler, GenericQueryHandler,
294 CqrsService, CqrsReadService,
296};
297
298pub use graphql::{
299 GenericGraphQLResolver, GraphQLCapableService,
300 GraphQLListResult, GraphQLPaginationInput,
301};
302
303pub const VERSION: &str = env!("CARGO_PKG_VERSION");
308
309pub const STANDARD_ENDPOINTS: [&str; 11] = [
322 "GET /api/v1/{collection}",
323 "POST /api/v1/{collection}",
324 "GET /api/v1/{collection}/:id",
325 "PUT /api/v1/{collection}/:id",
326 "PATCH /api/v1/{collection}/:id",
327 "DELETE /api/v1/{collection}/:id",
328 "POST /api/v1/{collection}/bulk",
329 "POST /api/v1/{collection}/upsert",
330 "GET /api/v1/{collection}/trash",
331 "POST /api/v1/{collection}/:id/restore",
332 "DELETE /api/v1/{collection}/empty",
333];