Expand description
Backbone Framework Core
Foundation for generic CRUD system with 11 standard endpoints. This is the core package that can be published and reused across projects.
§Key Components
CrudServicetrait: Core async trait for entity CRUD operationsBackboneCrudHandler: Generic Axum router builder for all 11 endpointsextractors::JsonOrForm: Body extractor that accepts JSON or url-encoded form payloads;BackboneCrudHandleruses it so every generated endpoint accepts both content types.- Response types:
ApiResponse,PaginatedResponse,BulkResponse - Utilities: Timestamp, ID generation, pagination, validation
- Persistence: Generic repositories for PostgreSQL and in-memory storage
§Quick Start
§Option 1: Using BackboneCrudHandler (recommended)
ⓘ
use backbone_core::{CrudService, BackboneCrudHandler, ApiResponse};
// 1. Implement CrudService for your entity
impl CrudService<User, CreateUserDto, UpdateUserDto> for UserCrudService {
// ... implement all 11 methods
}
// 2. Create router with all 11 endpoints
let routes = BackboneCrudHandler::<_, User, CreateUserDto, UpdateUserDto, UserResponse>
::routes(Arc::new(user_crud), "/api/v1/users");§Option 2: Using Generic Repositories
ⓘ
use backbone_core::persistence::{InMemoryRepository, PostgresRepository, CrudRepository};
// For testing/prototyping
let repo = InMemoryRepository::<User>::new();
// For production (requires "postgres" feature)
let repo = PostgresRepository::<User>::new(pool);Re-exports§
pub use macros::log_include_hydration_failure;pub use trigger::TriggerHandler;pub use trigger::TriggerEvent;pub use trigger::TriggerContext;pub use trigger::TriggerContextMut;pub use trigger::ActionExecutor;pub use trigger::TriggerRegistry;pub use config::BackboneConfig;pub use config::ConfigError;pub use config::ConfigResult;pub use config::ConfigLoader;pub use config::AppConfig;pub use config::Environment;pub use config::ServerConfig;pub use config::DatabaseConfig;pub use config::CacheConfig;pub use config::ModulesConfig;pub use config::SapiensConfig;pub use config::PostmanConfig;pub use config::BucketConfig;pub use config::SapiensAuthConfig;pub use config::PasswordHasherConfig;pub use config::SapiensLockoutConfig;pub use config::SmtpConfig;pub use config::TemplatesConfig;pub use config::StorageConfig;pub use config::LoggingConfig;pub use config::LoggingFileConfig;pub use config::MonitoringConfig;pub use config::ContextsConfig;pub use config::RedisEventBusConfig;pub use config::FeaturesConfig;pub use config::RateLimitingConfig;pub use config::SecurityConfig;pub use config::CsrfConfig;pub use config::SecurityHeadersConfig;pub use config::ConfigurationBus;pub use config::ConfigValue;pub use config::ConfigChangeEvent;pub use http::CrudService;pub use http::BackboneCrudHandler;pub use http::BackboneHttpHandler;pub use http::AccessScope;pub use http::ApiResponse;pub use http::PaginatedResponse;pub use http::PaginatedApiResponse;pub use http::PaginationResponse;pub use http::BulkResponse;pub use http::BulkCreateRequest;pub use http::ListQueryParams;pub use http::ListRequest;pub use http::UpsertRequest;pub use http::FilterOptions;pub use http::SortOrder;pub use http::BatchIdsRequest;pub use http::BulkUpdateItem;pub use http::BulkPatchItem;pub use http::BulkPatchRequest;pub use http::PaginationRequest;pub use utils::BackboneError;pub use utils::PaginationParams;pub use utils::PaginationMeta as BackbonePaginationMeta;pub use utils::now;pub use utils::days_ago;pub use utils::days_from_now;pub use utils::hours_ago;pub use utils::hours_from_now;pub use utils::minutes_from_now;pub use utils::new_id;pub use utils::new_id_string;pub use utils::parse_id;pub use utils::is_valid_uuid;pub use utils::is_valid_email;pub use utils::is_valid_username;pub use utils::normalize_string;pub use persistence::CrudRepository;pub use persistence::PersistentEntity;pub use persistence::RepositoryError;pub use persistence::PartialUpdatable;pub use persistence::SearchableRepository;pub use persistence::Versioned;pub use persistence::InMemoryRepository;pub use persistence::CrudServiceAdapter;pub use persistence::SimpleCrudServiceAdapter;pub use persistence::AdapterError;pub use specification::Specification;pub use specification::AndSpecification;pub use specification::OrSpecification;pub use specification::NotSpecification;pub use specification::SpecificationResult;pub use specification::SpecificationEvaluator;pub use specification::AlwaysTrue;pub use specification::AlwaysFalse;pub use specification::PredicateSpecification;pub use specification::predicate;pub use registry::ModuleService;pub use registry::ServiceRegistry;pub use registry::ServiceHealth;pub use registry::HealthStatus;pub use registry::RegistryHealth;pub use registry::RegistryStatistics;pub use registry::ServiceDescriptor;pub use module::BackboneModule;pub use module::MigrationInfo;pub use module::SeedInfo;pub use module_registry::ModuleRegistry;pub use module_registry::ModuleRegistryError;pub use module_registry::ModuleRegistryResult;pub use domain_service::DomainService;pub use domain_service::TransactionalDomainService;pub use command::Command;pub use command::CommandHandler;pub use command::CommandDispatcher;pub use command::ValidatableCommand;pub use command::ValidatingCommandHandler;pub use query::Query;pub use query::QueryHandler;pub use query::QueryDispatcher;pub use query::CacheableQuery;pub use query::PaginatedQuery;pub use query::PaginatedQueryResult;pub use value_object::ValueObject;pub use value_object::OptionalValueObject;pub use value_object::ValueObjectError;pub use aggregate::AggregateRoot;pub use aggregate::EventSourcedAggregate;pub use aggregate::InvariantAggregate;pub use aggregate::AggregateMetadata;pub use error::ModuleError;pub use error::ErrorCategory;pub use error::ErrorResponse;pub use error::CommonError;pub use service::GenericCrudService;pub use service::ServiceError;pub use service::ServiceResult;pub use service::FromCreateDto;pub use service::ApplyUpdateDto;pub use service::ServiceLifecycle;pub use service::NoOpLifecycle;pub use usecase::UseCaseError;pub use usecase::UseCaseResult;pub use usecase::UseCaseHooks;pub use usecase::DefaultHooks;pub use usecase::UseCaseService;pub use usecase::EntityFactory;pub use usecase::EntityUpdater;pub use usecase::CreateUseCase;pub use usecase::UpdateUseCase;pub use usecase::GetUseCase;pub use usecase::DeleteUseCase;pub use usecase::ListUseCase;pub use usecase::ListParams;pub use usecase::ListResult;pub use usecase::ListService;pub use validation::ValidationError;pub use validation::ValidationErrors;pub use validation::FieldRule;pub use validation::EntityValidator;pub use validation::RequiredString;pub use validation::MaxLength;pub use validation::NonNegative;pub use validation::OptionalNotBlank;pub use validation::Regex;pub use validation::RequiredUuid;pub use policy::PolicyContext;pub use policy::PolicyOutcome;pub use policy::PolicyDecision;pub use policy::DomainPolicy;pub use policy::PermitAllPolicy;pub use policy::DenyAllPolicy;pub use policy::AllOfPolicy;pub use policy::AnyOfPolicy;pub use policy::NotPolicy;pub use bulk::BulkFailureMode;pub use bulk::BulkOperationConfig;pub use bulk::BulkItemResult;pub use bulk::BulkOperationResult;pub use bulk::BulkOperationProgress;pub use bulk::BulkCapableService;pub use bulk::GenericBulkService;pub use integration::ModuleAdapter;pub use integration::ProjectionAdapter;pub use integration::IntegrationError;pub use integration::EventBridge;pub use integration::IdentityAdapter;pub use integration::identity_adapter;pub use cqrs::GenericCreateCommand;pub use cqrs::GenericUpdateCommand;pub use cqrs::GenericDeleteCommand;pub use cqrs::GenericRestoreCommand;pub use cqrs::GenericGetQuery;pub use cqrs::GenericListQuery;pub use cqrs::GenericListDeletedQuery;pub use cqrs::GenericCommandHandler;pub use cqrs::GenericQueryHandler;pub use cqrs::CqrsService;pub use cqrs::CqrsReadService;pub use graphql::GenericGraphQLResolver;pub use graphql::GraphQLCapableService;pub use graphql::GraphQLListResult;pub use graphql::GraphQLPaginationInput;pub use entity::*;pub use repository::*;pub use grpc::*;pub use builder::*;
Modules§
- aggregate
- DDD Aggregate Root Pattern
- builder
- Builder Pattern Dependency Injection
- bulk
- Generic bulk operations — create, update, delete multiple entities in one call.
- command
- CQRS Command Pattern
- config
- Configuration management system for Backbone Framework
- cqrs
- Generic CQRS commands, queries, and their handlers.
- crud
- CRUD operations and generic implementations
- domain_
service - Domain Service Trait
- entity
- Entity traits and common entity implementations
- error
- Module Error Trait
- extractors
- Request body extractors.
- flow
- Workflow step and context traits for saga-pattern workflows.
- graphql
- Generic GraphQL resolver — mirrors
BackboneCrudHandlerfor the GraphQL transport. - grpc
- gRPC layer and service implementations
- http
- HTTP layer and REST endpoint implementations
- integration
- Cross-module integration — adapters, anti-corruption layer, and event bridges.
- macros
- Code-generation macros for backbone-schema generated repositories.
- module
- Backbone Module System
- module_
registry - Module Registry - Discovery and management of Backbone modules
- persistence
- Persistence Layer - Reusable Repository Implementations
- policy
- Domain policy — enforces pure business rules that govern whether CRUD operations are valid for a given entity state.
- projection
- Projector base trait for CQRS read models.
- query
- CQRS Query Pattern
- registry
- Module Service Registry - Discovery and access to module services
- repository
- Repository traits and common implementations
- service
- Generic CRUD service — one implementation used by all entities.
- specification
- Specification Pattern - Business Rules as Objects
- state_
machine - Generic state machine infrastructure for domain state machines.
- trigger
- Generic trigger handler trait and types for entity lifecycle events.
- usecase
- Generic use cases — one per CRUD operation, composable via hooks.
- utils
- Backbone Framework Utilities
- validation
- Generic entity validation — composable field rules with typed errors.
- value_
object - DDD Value Object Pattern
Macros§
- define_
string_ value_ object - Helper macro for implementing simple string-based value objects.
- impl_
crud_ repository - Implement
backbone_core::CrudRepository<E>for a generated repository struct.
Constants§
- STANDARD_
ENDPOINTS - The 11 standard Backbone endpoints that are auto-generated for each entity:
- STANDARD_
ENDPOINT_ COUNT - Number of standard CRUD endpoints generated per entity
- VERSION
- Core version