koprogo_api/application/ports/
energy_bill_upload_repository.rs1use async_trait::async_trait;
2use uuid::Uuid;
3
4use crate::domain::entities::EnergyBillUpload;
5
6#[async_trait]
8pub trait EnergyBillUploadRepository: Send + Sync {
9 async fn create(&self, upload: &EnergyBillUpload) -> Result<EnergyBillUpload, String>;
11
12 async fn find_by_id(&self, id: Uuid) -> Result<Option<EnergyBillUpload>, String>;
14
15 async fn find_by_campaign(&self, campaign_id: Uuid) -> Result<Vec<EnergyBillUpload>, String>;
17
18 async fn find_by_unit(&self, unit_id: Uuid) -> Result<Vec<EnergyBillUpload>, String>;
20
21 async fn find_by_campaign_and_unit(
23 &self,
24 campaign_id: Uuid,
25 unit_id: Uuid,
26 ) -> Result<Option<EnergyBillUpload>, String>;
27
28 async fn find_by_uploaded_by(&self, uploaded_by: Uuid)
30 -> Result<Vec<EnergyBillUpload>, String>;
31
32 async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<EnergyBillUpload>, String>;
34
35 async fn update(&self, upload: &EnergyBillUpload) -> Result<EnergyBillUpload, String>;
37
38 async fn delete(&self, id: Uuid) -> Result<(), String>;
40
41 async fn find_expired(&self) -> Result<Vec<EnergyBillUpload>, String>;
43
44 async fn count_verified_by_campaign(&self, campaign_id: Uuid) -> Result<i32, String>;
46
47 async fn find_verified_by_campaign(
49 &self,
50 campaign_id: Uuid,
51 ) -> Result<Vec<EnergyBillUpload>, String>;
52
53 async fn delete_expired(&self) -> Result<i32, String>;
55}