koprogo_api/application/ports/
service_provider_repository.rs

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