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 permission;
61pub mod grpc;
62pub mod builder;
63pub mod utils;
64pub mod persistence;
65pub mod specification;
66pub mod registry;
67
68pub mod module;
70pub mod module_registry;
71
72pub mod domain_service;
74pub mod command;
75pub mod query;
76pub mod value_object;
77pub mod aggregate;
78pub mod error;
79
80pub mod service;
82pub mod violation;
83pub mod write_guard;
84pub mod write_hooks;
85pub mod row_rule;
86pub mod actor_roles;
87pub mod usecase;
88pub mod validation;
89pub mod policy;
90pub mod bulk;
91pub mod integration;
92pub mod cqrs;
93pub mod graphql;
94
95pub mod trigger;
97pub mod flow;
98pub mod projection;
99pub mod state_machine;
100
101#[cfg(feature = "openapi")]
103pub mod openapi;
104
105pub use trigger::{
106 TriggerHandler, TriggerEvent, TriggerContext, TriggerContextMut,
107 ActionExecutor, TriggerRegistry,
108};
109
110pub use entity::*;
112pub use repository::*;
113pub use grpc::*;
114pub use builder::*;
115
116pub use config::{
118 BackboneConfig, ConfigError, ConfigResult, ConfigLoader,
119 AppConfig, Environment,
121 ServerConfig,
123 DatabaseConfig, CacheConfig,
125 ModulesConfig, SapiensConfig, PostmanConfig, BucketConfig,
127 SapiensAuthConfig, PasswordHasherConfig, SapiensLockoutConfig,
128 SmtpConfig, TemplatesConfig, StorageConfig,
129 LoggingConfig, LoggingFileConfig,
131 MonitoringConfig,
133 ContextsConfig, RedisEventBusConfig,
135 FeaturesConfig, RateLimitingConfig,
137 SecurityConfig, CsrfConfig, SecurityHeadersConfig,
139 ConfigurationBus, ConfigValue, ConfigChangeEvent,
141};
142
143pub use http::{
145 CrudService,
147 BackboneCrudHandler,
148 BackboneHttpHandler,
149 AccessScope,
151 ApiResponse,
153 PaginatedResponse,
154 PaginatedApiResponse,
155 PaginationResponse,
156 BulkResponse,
157 BulkCreateRequest,
158 ListQueryParams,
160 ListRequest,
161 UpsertRequest,
162 FilterOptions,
163 SortOrder,
164 BatchIdsRequest,
165 BulkUpdateItem,
166 BulkPatchItem,
167 BulkPatchRequest,
168 PaginationRequest,
170};
171
172#[cfg(feature = "openapi")]
174pub use openapi::BackboneComponents;
175
176pub use utils::{
178 BackboneError, PaginationParams, PaginationMeta as BackbonePaginationMeta,
179 now, days_ago, days_from_now, hours_ago, hours_from_now, minutes_from_now,
180 new_id, new_id_string, parse_id, is_valid_uuid,
181 is_valid_email, is_valid_username, normalize_string,
182};
183
184pub use persistence::{
186 CrudRepository, PersistentEntity, Reference, RepositoryError, PartialUpdatable, SearchableRepository, Versioned,
188 InMemoryRepository,
190 CrudServiceAdapter, SimpleCrudServiceAdapter, AdapterError,
192};
193
194pub use specification::{
196 Specification,
198 AndSpecification, OrSpecification, NotSpecification,
200 SpecificationResult, SpecificationEvaluator,
202 AlwaysTrue, AlwaysFalse, PredicateSpecification,
204 predicate,
206};
207
208#[cfg(feature = "postgres")]
210pub use persistence::{PostgresRepository, PostgresRepositoryBuilder, PostgresEntity};
211
212pub use registry::{
214 ModuleService,
216 ServiceRegistry,
218 ServiceHealth, HealthStatus, RegistryHealth, RegistryStatistics,
220 ServiceDescriptor,
222};
223
224pub use module::{
226 BackboneModule,
227 MigrationInfo,
228 SeedInfo,
229};
230
231pub use module_registry::{
232 ModuleRegistry,
233 ModuleRegistryError,
234 ModuleRegistryResult,
235};
236
237pub use domain_service::{DomainService, TransactionalDomainService};
239
240pub use command::{Command, CommandHandler, CommandDispatcher, ValidatableCommand, ValidatingCommandHandler};
241
242pub use query::{
243 Query, QueryHandler, QueryDispatcher,
244 CacheableQuery, PaginatedQuery, PaginatedQueryResult,
245};
246
247pub use value_object::{ValueObject, OptionalValueObject, ValueObjectError};
248
249pub use aggregate::{AggregateRoot, EventSourcedAggregate, InvariantAggregate, AggregateMetadata};
250
251pub use error::{ModuleError, ErrorCategory, ErrorResponse, CommonError};
252
253pub use violation::{code_from_constraint, Violation};
255pub use write_guard::{AllowAll, GuardOutcome, WriteCtx, WriteGuard, WriteKind};
256pub use write_hooks::{Change, ChangeKind, DeclaredEvent, NoWriteHooks, WriteHooks};
259pub use service::{
260 GenericCrudService, ServiceError, ServiceResult,
261 FromCreateDto, ApplyUpdateDto, ServiceLifecycle, NoOpLifecycle,
262};
263
264pub use usecase::{
265 UseCaseError, UseCaseResult,
266 UseCaseHooks, DefaultHooks,
267 UseCaseService, EntityFactory, EntityUpdater,
268 CreateUseCase, UpdateUseCase, GetUseCase, DeleteUseCase,
269 ListUseCase, ListParams, ListResult, ListService,
270};
271
272pub use validation::{
273 ValidationError, ValidationErrors, FieldRule, EntityValidator,
274 RequiredString, MaxLength, NonNegative, OptionalNotBlank, Regex, RequiredUuid,
275};
276
277pub use policy::{
278 PolicyContext, PolicyOutcome, PolicyDecision, DomainPolicy,
279 PermitAllPolicy, DenyAllPolicy,
280 AllOfPolicy, AnyOfPolicy, NotPolicy,
281};
282
283pub use bulk::{
284 BulkFailureMode, BulkOperationConfig, BulkItemResult, BulkOperationResult,
285 BulkOperationProgress, BulkCapableService, GenericBulkService,
286};
287
288pub use integration::{
289 ModuleAdapter, ProjectionAdapter, IntegrationError,
290 EventBridge, IdentityAdapter, identity_adapter,
291};
292
293pub use cqrs::{
294 GenericCreateCommand, GenericUpdateCommand, GenericDeleteCommand, GenericRestoreCommand,
296 GenericGetQuery, GenericListQuery, GenericListDeletedQuery,
298 GenericCommandHandler, GenericQueryHandler,
300 CqrsService, CqrsReadService,
302};
303
304pub use graphql::{
305 GenericGraphQLResolver, GraphQLCapableService,
306 GraphQLListResult, GraphQLPaginationInput,
307};
308
309pub const VERSION: &str = env!("CARGO_PKG_VERSION");
314
315pub const STANDARD_ENDPOINTS: [&str; 11] = [
328 "GET /api/v1/{collection}",
329 "POST /api/v1/{collection}",
330 "GET /api/v1/{collection}/:id",
331 "PUT /api/v1/{collection}/:id",
332 "PATCH /api/v1/{collection}/:id",
333 "DELETE /api/v1/{collection}/:id",
334 "POST /api/v1/{collection}/bulk",
335 "POST /api/v1/{collection}/upsert",
336 "GET /api/v1/{collection}/trash",
337 "POST /api/v1/{collection}/:id/restore",
338 "DELETE /api/v1/{collection}/empty",
339];