koprogo_api/application/ports/
individual_member_repository.rs

1use 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}