koprogo_api/application/ports/
energy_campaign_repository.rs1use async_trait::async_trait;
2use uuid::Uuid;
3
4use crate::domain::entities::{EnergyCampaign, ProviderOffer};
5
6#[async_trait]
8pub trait EnergyCampaignRepository: Send + Sync {
9 async fn create(&self, campaign: &EnergyCampaign) -> Result<EnergyCampaign, String>;
11
12 async fn find_by_id(&self, id: Uuid) -> Result<Option<EnergyCampaign>, String>;
14
15 async fn find_by_organization(
17 &self,
18 organization_id: Uuid,
19 ) -> Result<Vec<EnergyCampaign>, String>;
20
21 async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<EnergyCampaign>, String>;
23
24 async fn update(&self, campaign: &EnergyCampaign) -> Result<EnergyCampaign, String>;
26
27 async fn delete(&self, id: Uuid) -> Result<(), String>;
29
30 async fn add_offer(
32 &self,
33 campaign_id: Uuid,
34 offer: &ProviderOffer,
35 ) -> Result<ProviderOffer, String>;
36
37 async fn get_offers(&self, campaign_id: Uuid) -> Result<Vec<ProviderOffer>, String>;
39
40 async fn update_offer(&self, offer: &ProviderOffer) -> Result<ProviderOffer, String>;
42
43 async fn delete_offer(&self, offer_id: Uuid) -> Result<(), String>;
45
46 async fn find_offer_by_id(&self, offer_id: Uuid) -> Result<Option<ProviderOffer>, String>;
48
49 async fn update_aggregation(
51 &self,
52 campaign_id: Uuid,
53 total_kwh_electricity: Option<f64>,
54 total_kwh_gas: Option<f64>,
55 avg_kwh_per_unit: Option<f64>,
56 ) -> Result<(), String>;
57}