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