koprogo_api/application/ports/
service_provider_repository.rs1use crate::domain::entities::service_provider::{ServiceProvider, TradeCategory};
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
6pub trait ServiceProviderRepository: Send + Sync {
7 async fn create(&self, provider: &ServiceProvider) -> Result<ServiceProvider, String>;
8 async fn find_by_id(&self, id: Uuid) -> Result<Option<ServiceProvider>, String>;
9 async fn find_by_slug(&self, slug: &str) -> Result<Option<ServiceProvider>, String>;
10 async fn find_all(
11 &self,
12 organization_id: Option<Uuid>,
13 page: i64,
14 per_page: i64,
15 ) -> Result<Vec<ServiceProvider>, String>;
16 async fn find_by_trade_category(
17 &self,
18 category: TradeCategory,
19 page: i64,
20 per_page: i64,
21 ) -> Result<Vec<ServiceProvider>, String>;
22 async fn search(
23 &self,
24 query: &str,
25 postal_code: Option<&str>,
26 page: i64,
27 per_page: i64,
28 ) -> Result<Vec<ServiceProvider>, String>;
29 async fn update(&self, provider: &ServiceProvider) -> Result<ServiceProvider, String>;
30 async fn delete(&self, id: Uuid) -> Result<(), String>;
31 async fn update_rating(
32 &self,
33 id: Uuid,
34 rating_avg: f64,
35 reviews_count: i32,
36 ) -> Result<(), String>;
37 async fn count_by_organization(&self, organization_id: Uuid) -> Result<i64, String>;
38}