koprogo_api/application/ports/
individual_member_repository.rs1use crate::domain::entities::individual_member::IndividualMember;
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
6pub trait IndividualMemberRepository: Send + Sync {
7 async fn create(&self, member: &IndividualMember) -> Result<IndividualMember, String>;
8 async fn find_by_id(&self, id: Uuid) -> Result<Option<IndividualMember>, String>;
9 async fn find_by_campaign(
10 &self,
11 campaign_id: Uuid,
12 page: i64,
13 per_page: i64,
14 ) -> Result<Vec<IndividualMember>, String>;
15 async fn find_by_email(&self, email: &str) -> Result<Option<IndividualMember>, String>;
16 async fn find_by_email_and_campaign(
17 &self,
18 email: &str,
19 campaign_id: Uuid,
20 ) -> Result<Option<IndividualMember>, String>;
21 async fn find_active_by_campaign(
22 &self,
23 campaign_id: Uuid,
24 page: i64,
25 per_page: i64,
26 ) -> Result<Vec<IndividualMember>, String>;
27 async fn find_with_consent_by_campaign(
28 &self,
29 campaign_id: Uuid,
30 page: i64,
31 per_page: i64,
32 ) -> Result<Vec<IndividualMember>, String>;
33 async fn update(&self, member: &IndividualMember) -> Result<IndividualMember, String>;
34 async fn delete(&self, id: Uuid) -> Result<(), String>;
35 async fn withdraw_consent(&self, id: Uuid) -> Result<(), String>;
36 async fn count_by_campaign(&self, campaign_id: Uuid) -> Result<i64, String>;
37 async fn count_active_by_campaign(&self, campaign_id: Uuid) -> Result<i64, String>;
38 async fn count_with_consent_by_campaign(&self, campaign_id: Uuid) -> Result<i64, String>;
39}