koprogo_api/application/ports/
board_decision_repository.rs1use crate::domain::entities::{BoardDecision, DecisionStatus};
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
7pub trait BoardDecisionRepository: Send + Sync {
8 async fn create(&self, decision: &BoardDecision) -> Result<BoardDecision, String>;
10
11 async fn find_by_id(&self, id: Uuid) -> Result<Option<BoardDecision>, String>;
13
14 async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<BoardDecision>, String>;
16
17 async fn find_by_meeting(&self, meeting_id: Uuid) -> Result<Vec<BoardDecision>, String>;
19
20 async fn find_by_status(
22 &self,
23 building_id: Uuid,
24 status: DecisionStatus,
25 ) -> Result<Vec<BoardDecision>, String>;
26
27 async fn find_overdue(&self, building_id: Uuid) -> Result<Vec<BoardDecision>, String>;
29
30 async fn find_deadline_approaching(
32 &self,
33 building_id: Uuid,
34 days_threshold: i32,
35 ) -> Result<Vec<BoardDecision>, String>;
36
37 async fn update(&self, decision: &BoardDecision) -> Result<BoardDecision, String>;
39
40 async fn delete(&self, id: Uuid) -> Result<bool, String>;
42
43 async fn count_by_status(
45 &self,
46 building_id: Uuid,
47 status: DecisionStatus,
48 ) -> Result<i64, String>;
49
50 async fn count_overdue(&self, building_id: Uuid) -> Result<i64, String>;
52}