koprogo_api/infrastructure/web/
app_state.rs

1use crate::application::use_cases::{
2    AuthUseCases, BuildingUseCases, DocumentUseCases, ExpenseUseCases, MeetingUseCases,
3    OwnerUseCases, PcnUseCases, UnitUseCases,
4};
5use crate::infrastructure::pool::DbPool;
6use std::sync::Arc;
7
8pub struct AppState {
9    pub auth_use_cases: Arc<AuthUseCases>,
10    pub building_use_cases: Arc<BuildingUseCases>,
11    pub unit_use_cases: Arc<UnitUseCases>,
12    pub owner_use_cases: Arc<OwnerUseCases>,
13    pub expense_use_cases: Arc<ExpenseUseCases>,
14    pub meeting_use_cases: Arc<MeetingUseCases>,
15    pub document_use_cases: Arc<DocumentUseCases>,
16    pub pcn_use_cases: Arc<PcnUseCases>,
17    pub pool: DbPool, // For seeding operations
18}
19
20impl AppState {
21    #[allow(clippy::too_many_arguments)]
22    pub fn new(
23        auth_use_cases: AuthUseCases,
24        building_use_cases: BuildingUseCases,
25        unit_use_cases: UnitUseCases,
26        owner_use_cases: OwnerUseCases,
27        expense_use_cases: ExpenseUseCases,
28        meeting_use_cases: MeetingUseCases,
29        document_use_cases: DocumentUseCases,
30        pcn_use_cases: PcnUseCases,
31        pool: DbPool,
32    ) -> Self {
33        Self {
34            auth_use_cases: Arc::new(auth_use_cases),
35            building_use_cases: Arc::new(building_use_cases),
36            unit_use_cases: Arc::new(unit_use_cases),
37            owner_use_cases: Arc::new(owner_use_cases),
38            expense_use_cases: Arc::new(expense_use_cases),
39            meeting_use_cases: Arc::new(meeting_use_cases),
40            document_use_cases: Arc::new(document_use_cases),
41            pcn_use_cases: Arc::new(pcn_use_cases),
42            pool,
43        }
44    }
45}