pub struct PayrollModule { /* private fields */ }Expand description
Payroll module configuration
Use the builder pattern to configure and register this module:
let payroll = PayrollModule::builder()
.with_database(pool.clone())
.build()?;
// Unguarded full CRUD (trusted/admin); compose a guarded router for production.
let router = payroll.all_crud_routes();Implementations§
Source§impl PayrollModule
impl PayrollModule
Sourcepub fn builder() -> PayrollModuleBuilder
pub fn builder() -> PayrollModuleBuilder
Create a new module builder
Sourcepub fn all_crud_routes(&self) -> Router
pub fn all_crud_routes(&self) -> Router
Mount ALL generated CRUD endpoints (12 per entity) with NO domain validation — the fully unguarded surface. A well-formed request can create invalid rows or soft-delete a referenced master out from under its dependents. Prefer a guarded composition (read + validated writes) for any real deployment; use this only in trusted/admin/seeding contexts.
Sourcepub fn routes(&self) -> Router
👎Deprecated: mounts unvalidated generic CRUD; prefer readonly_routes() + validated writes, or all_crud_routes() for the full/unguarded surface
pub fn routes(&self) -> Router
mounts unvalidated generic CRUD; prefer readonly_routes() + validated writes, or all_crud_routes() for the full/unguarded surface
Deprecated alias for Self::all_crud_routes. routes() reads like
“the routes” but mounts UNVALIDATED generic CRUD on every entity — a naive
mount exposes unguarded writes. Compose a guarded router (read + validated
writes) for production, or call all_crud_routes() to opt into the full
unguarded surface explicitly.
Sourcepub fn readonly_routes(&self) -> Router
pub fn readonly_routes(&self) -> Router
Read-only routes for every entity (GET endpoints only) — the safe base.
Generic mutation can’t reach here, so this surface cannot bypass a validated write service’s invariants. Use this as the production base and merge validated write routes (or a write service’s HTTP layer) onto it.
Sourcepub fn payroll_write_service(&self) -> Arc<PayrollWriteService> ⓘ
pub fn payroll_write_service(&self) -> Arc<PayrollWriteService> ⓘ
The module-held validated write service (run verbs, computed slips, seams).
Sourcepub fn with_payroll_write_service(self, svc: Arc<PayrollWriteService>) -> Self
pub fn with_payroll_write_service(self, svc: Arc<PayrollWriteService>) -> Self
Replace the write service at the composition root — the way a host wires real adapters over
the fail-closed seams (e.g. staging domain events into an outbox) or swaps the pool-default
input ports for adapters over the attendance/employee exports. Consuming self keeps the
builder chain reading naturally:
let payroll = PayrollModule::builder()
.with_database(pool.clone())
.build()?
.with_payroll_write_service(Arc::new(
PayrollWriteService::new(pool.clone()).with_event_sink(my_outbox_sink),
));Call before mounting routes; the module is consumed once at startup.
Auto Trait Implementations§
impl !RefUnwindSafe for PayrollModule
impl !UnwindSafe for PayrollModule
impl Freeze for PayrollModule
impl Send for PayrollModule
impl Sync for PayrollModule
impl Unpin for PayrollModule
impl UnsafeUnpin for PayrollModule
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more