koprogo_api/infrastructure/web/
app_state.rs

1use crate::application::use_cases::{
2    AccountUseCases, AchievementUseCases, AuthUseCases, BoardDashboardUseCases,
3    BoardDecisionUseCases, BoardMemberUseCases, BudgetUseCases, BuildingUseCases,
4    CallForFundsUseCases, ChallengeUseCases, ChargeDistributionUseCases, ConvocationUseCases,
5    DashboardUseCases, DocumentUseCases, EnergyBillUploadUseCases, EnergyCampaignUseCases,
6    EtatDateUseCases, ExpenseUseCases, FinancialReportUseCases, GamificationStatsUseCases,
7    GdprUseCases, IoTUseCases, JournalEntryUseCases, LinkyUseCases, LocalExchangeUseCases,
8    MeetingUseCases, NoticeUseCases, NotificationUseCases, OwnerContributionUseCases,
9    OwnerUseCases, PaymentMethodUseCases, PaymentReminderUseCases, PaymentUseCases, PcnUseCases,
10    PollUseCases, QuoteUseCases, ResolutionUseCases, ResourceBookingUseCases, SharedObjectUseCases,
11    SkillUseCases, TechnicalInspectionUseCases, TicketUseCases, TwoFactorUseCases,
12    UnitOwnerUseCases, UnitUseCases, WorkReportUseCases,
13};
14use crate::infrastructure::audit_logger::AuditLogger;
15use crate::infrastructure::email::EmailService;
16use crate::infrastructure::pool::DbPool;
17use std::sync::Arc;
18
19pub struct AppState {
20    pub account_use_cases: Arc<AccountUseCases>,
21    pub auth_use_cases: Arc<AuthUseCases>,
22    pub building_use_cases: Arc<BuildingUseCases>,
23    pub budget_use_cases: Arc<BudgetUseCases>,
24    pub unit_use_cases: Arc<UnitUseCases>,
25    pub owner_use_cases: Arc<OwnerUseCases>,
26    pub unit_owner_use_cases: Arc<UnitOwnerUseCases>,
27    pub expense_use_cases: Arc<ExpenseUseCases>,
28    pub charge_distribution_use_cases: Arc<ChargeDistributionUseCases>,
29    pub meeting_use_cases: Arc<MeetingUseCases>,
30    pub convocation_use_cases: Arc<ConvocationUseCases>,
31    pub resolution_use_cases: Arc<ResolutionUseCases>,
32    pub ticket_use_cases: Arc<TicketUseCases>,
33    pub two_factor_use_cases: Arc<TwoFactorUseCases>,
34    pub notification_use_cases: Arc<NotificationUseCases>,
35    pub payment_use_cases: Arc<PaymentUseCases>,
36    pub payment_method_use_cases: Arc<PaymentMethodUseCases>,
37    pub poll_use_cases: Arc<PollUseCases>,
38    pub quote_use_cases: Arc<QuoteUseCases>,
39    pub local_exchange_use_cases: Arc<LocalExchangeUseCases>,
40    pub notice_use_cases: Arc<NoticeUseCases>,
41    pub resource_booking_use_cases: Arc<ResourceBookingUseCases>,
42    pub shared_object_use_cases: Arc<SharedObjectUseCases>,
43    pub skill_use_cases: Arc<SkillUseCases>,
44    pub technical_inspection_use_cases: Arc<TechnicalInspectionUseCases>,
45    pub work_report_use_cases: Arc<WorkReportUseCases>,
46    pub document_use_cases: Arc<DocumentUseCases>,
47    pub energy_campaign_use_cases: Arc<EnergyCampaignUseCases>,
48    pub energy_bill_upload_use_cases: Arc<EnergyBillUploadUseCases>,
49    pub etat_date_use_cases: Arc<EtatDateUseCases>,
50    pub pcn_use_cases: Arc<PcnUseCases>,
51    pub payment_reminder_use_cases: Arc<PaymentReminderUseCases>,
52    pub gdpr_use_cases: Arc<GdprUseCases>,
53    pub iot_use_cases: Arc<IoTUseCases>,
54    pub linky_use_cases: Arc<LinkyUseCases>,
55    pub board_member_use_cases: Arc<BoardMemberUseCases>,
56    pub board_decision_use_cases: Arc<BoardDecisionUseCases>,
57    pub board_dashboard_use_cases: Arc<BoardDashboardUseCases>,
58    pub dashboard_use_cases: Arc<DashboardUseCases>,
59    pub financial_report_use_cases: Arc<FinancialReportUseCases>,
60    pub owner_contribution_use_cases: Arc<OwnerContributionUseCases>,
61    pub call_for_funds_use_cases: Arc<CallForFundsUseCases>,
62    pub journal_entry_use_cases: Arc<JournalEntryUseCases>,
63    pub achievement_use_cases: Arc<AchievementUseCases>,
64    pub challenge_use_cases: Arc<ChallengeUseCases>,
65    pub gamification_stats_use_cases: Arc<GamificationStatsUseCases>,
66    pub audit_logger: Arc<AuditLogger>,
67    pub email_service: Arc<EmailService>,
68    pub pool: DbPool, // For seeding operations
69}
70
71impl AppState {
72    #[allow(clippy::too_many_arguments)]
73    pub fn new(
74        account_use_cases: AccountUseCases,
75        auth_use_cases: AuthUseCases,
76        building_use_cases: BuildingUseCases,
77        budget_use_cases: BudgetUseCases,
78        unit_use_cases: UnitUseCases,
79        owner_use_cases: OwnerUseCases,
80        unit_owner_use_cases: UnitOwnerUseCases,
81        expense_use_cases: ExpenseUseCases,
82        charge_distribution_use_cases: ChargeDistributionUseCases,
83        meeting_use_cases: MeetingUseCases,
84        convocation_use_cases: ConvocationUseCases,
85        resolution_use_cases: ResolutionUseCases,
86        ticket_use_cases: TicketUseCases,
87        two_factor_use_cases: TwoFactorUseCases,
88        notification_use_cases: NotificationUseCases,
89        payment_use_cases: PaymentUseCases,
90        payment_method_use_cases: PaymentMethodUseCases,
91        poll_use_cases: PollUseCases,
92        quote_use_cases: QuoteUseCases,
93        local_exchange_use_cases: LocalExchangeUseCases,
94        notice_use_cases: NoticeUseCases,
95        resource_booking_use_cases: ResourceBookingUseCases,
96        shared_object_use_cases: SharedObjectUseCases,
97        skill_use_cases: SkillUseCases,
98        technical_inspection_use_cases: TechnicalInspectionUseCases,
99        work_report_use_cases: WorkReportUseCases,
100        document_use_cases: DocumentUseCases,
101        energy_campaign_use_cases: EnergyCampaignUseCases,
102        energy_bill_upload_use_cases: EnergyBillUploadUseCases,
103        etat_date_use_cases: EtatDateUseCases,
104        pcn_use_cases: PcnUseCases,
105        payment_reminder_use_cases: PaymentReminderUseCases,
106        gdpr_use_cases: GdprUseCases,
107        iot_use_cases: IoTUseCases,
108        linky_use_cases: LinkyUseCases,
109        board_member_use_cases: BoardMemberUseCases,
110        board_decision_use_cases: BoardDecisionUseCases,
111        board_dashboard_use_cases: BoardDashboardUseCases,
112        dashboard_use_cases: DashboardUseCases,
113        financial_report_use_cases: FinancialReportUseCases,
114        owner_contribution_use_cases: OwnerContributionUseCases,
115        call_for_funds_use_cases: CallForFundsUseCases,
116        journal_entry_use_cases: JournalEntryUseCases,
117        achievement_use_cases: AchievementUseCases,
118        challenge_use_cases: ChallengeUseCases,
119        gamification_stats_use_cases: GamificationStatsUseCases,
120        audit_logger: AuditLogger,
121        email_service: EmailService,
122        pool: DbPool,
123    ) -> Self {
124        Self {
125            account_use_cases: Arc::new(account_use_cases),
126            auth_use_cases: Arc::new(auth_use_cases),
127            building_use_cases: Arc::new(building_use_cases),
128            budget_use_cases: Arc::new(budget_use_cases),
129            unit_use_cases: Arc::new(unit_use_cases),
130            owner_use_cases: Arc::new(owner_use_cases),
131            unit_owner_use_cases: Arc::new(unit_owner_use_cases),
132            expense_use_cases: Arc::new(expense_use_cases),
133            charge_distribution_use_cases: Arc::new(charge_distribution_use_cases),
134            meeting_use_cases: Arc::new(meeting_use_cases),
135            convocation_use_cases: Arc::new(convocation_use_cases),
136            resolution_use_cases: Arc::new(resolution_use_cases),
137            ticket_use_cases: Arc::new(ticket_use_cases),
138            two_factor_use_cases: Arc::new(two_factor_use_cases),
139            notification_use_cases: Arc::new(notification_use_cases),
140            payment_use_cases: Arc::new(payment_use_cases),
141            payment_method_use_cases: Arc::new(payment_method_use_cases),
142            poll_use_cases: Arc::new(poll_use_cases),
143            quote_use_cases: Arc::new(quote_use_cases),
144            local_exchange_use_cases: Arc::new(local_exchange_use_cases),
145            notice_use_cases: Arc::new(notice_use_cases),
146            resource_booking_use_cases: Arc::new(resource_booking_use_cases),
147            shared_object_use_cases: Arc::new(shared_object_use_cases),
148            skill_use_cases: Arc::new(skill_use_cases),
149            technical_inspection_use_cases: Arc::new(technical_inspection_use_cases),
150            work_report_use_cases: Arc::new(work_report_use_cases),
151            document_use_cases: Arc::new(document_use_cases),
152            energy_campaign_use_cases: Arc::new(energy_campaign_use_cases),
153            energy_bill_upload_use_cases: Arc::new(energy_bill_upload_use_cases),
154            etat_date_use_cases: Arc::new(etat_date_use_cases),
155            pcn_use_cases: Arc::new(pcn_use_cases),
156            payment_reminder_use_cases: Arc::new(payment_reminder_use_cases),
157            gdpr_use_cases: Arc::new(gdpr_use_cases),
158            iot_use_cases: Arc::new(iot_use_cases),
159            linky_use_cases: Arc::new(linky_use_cases),
160            board_member_use_cases: Arc::new(board_member_use_cases),
161            board_decision_use_cases: Arc::new(board_decision_use_cases),
162            board_dashboard_use_cases: Arc::new(board_dashboard_use_cases),
163            dashboard_use_cases: Arc::new(dashboard_use_cases),
164            financial_report_use_cases: Arc::new(financial_report_use_cases),
165            owner_contribution_use_cases: Arc::new(owner_contribution_use_cases),
166            call_for_funds_use_cases: Arc::new(call_for_funds_use_cases),
167            journal_entry_use_cases: Arc::new(journal_entry_use_cases),
168            achievement_use_cases: Arc::new(achievement_use_cases),
169            challenge_use_cases: Arc::new(challenge_use_cases),
170            gamification_stats_use_cases: Arc::new(gamification_stats_use_cases),
171            audit_logger: Arc::new(audit_logger),
172            email_service: Arc::new(email_service),
173            pool,
174        }
175    }
176}