koprogo_api/application/ports/
age_request_repository.rs

1use crate::domain::entities::age_request::{AgeRequest, AgeRequestCosignatory};
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
6pub trait AgeRequestRepository: Send + Sync {
7    /// Crée une nouvelle demande d'AGE
8    async fn create(&self, age_request: &AgeRequest) -> Result<AgeRequest, String>;
9
10    /// Récupère une demande par son ID (avec cosignataires chargés)
11    async fn find_by_id(&self, id: Uuid) -> Result<Option<AgeRequest>, String>;
12
13    /// Liste toutes les demandes d'un bâtiment
14    async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<AgeRequest>, String>;
15
16    /// Liste toutes les demandes d'une organisation
17    async fn find_by_organization(&self, organization_id: Uuid) -> Result<Vec<AgeRequest>, String>;
18
19    /// Met à jour une demande (status, timestamps, etc.)
20    async fn update(&self, age_request: &AgeRequest) -> Result<AgeRequest, String>;
21
22    /// Supprime une demande (Draft/Withdrawn seulement)
23    async fn delete(&self, id: Uuid) -> Result<bool, String>;
24
25    /// Ajoute un cosignataire
26    async fn add_cosignatory(&self, cosignatory: &AgeRequestCosignatory) -> Result<(), String>;
27
28    /// Retire un cosignataire
29    async fn remove_cosignatory(
30        &self,
31        age_request_id: Uuid,
32        owner_id: Uuid,
33    ) -> Result<bool, String>;
34
35    /// Récupère les cosignataires d'une demande
36    async fn find_cosignatories(
37        &self,
38        age_request_id: Uuid,
39    ) -> Result<Vec<AgeRequestCosignatory>, String>;
40
41    /// Trouve les demandes Submitted dont le délai syndic est dépassé (job de fond)
42    async fn find_expired_deadlines(&self) -> Result<Vec<AgeRequest>, String>;
43}