koprogo_api/application/ports/
board_member_repository.rs1use crate::domain::entities::BoardMember;
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
7pub trait BoardMemberRepository: Send + Sync {
8 async fn create(&self, board_member: &BoardMember) -> Result<BoardMember, String>;
10
11 async fn find_by_id(&self, id: Uuid) -> Result<Option<BoardMember>, String>;
13
14 async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<BoardMember>, String>;
16
17 async fn find_active_by_building(&self, building_id: Uuid) -> Result<Vec<BoardMember>, String>;
20
21 async fn find_expiring_soon(
23 &self,
24 building_id: Uuid,
25 days_threshold: i32,
26 ) -> Result<Vec<BoardMember>, String>;
27
28 async fn find_by_owner(&self, owner_id: Uuid) -> Result<Vec<BoardMember>, String>;
30
31 async fn find_by_owner_and_building(
33 &self,
34 owner_id: Uuid,
35 building_id: Uuid,
36 ) -> Result<Option<BoardMember>, String>;
37
38 async fn has_active_mandate(&self, owner_id: Uuid, building_id: Uuid) -> Result<bool, String>;
40
41 async fn update(&self, board_member: &BoardMember) -> Result<BoardMember, String>;
43
44 async fn delete(&self, id: Uuid) -> Result<bool, String>;
46
47 async fn count_active_by_building(&self, building_id: Uuid) -> Result<i64, String>;
49}