koprogo_api/infrastructure/web/
app_state.rs

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