koprogo_api/application/ports/
contract_evaluation_repository.rs

1use crate::domain::entities::contract_evaluation::ContractEvaluation;
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
6pub trait ContractEvaluationRepository: Send + Sync {
7    async fn create(&self, evaluation: &ContractEvaluation) -> Result<ContractEvaluation, String>;
8    async fn find_by_id(&self, id: Uuid) -> Result<Option<ContractEvaluation>, String>;
9    async fn find_by_service_provider(
10        &self,
11        provider_id: Uuid,
12        page: i64,
13        per_page: i64,
14    ) -> Result<Vec<ContractEvaluation>, String>;
15    async fn find_by_quote(&self, quote_id: Uuid) -> Result<Vec<ContractEvaluation>, String>;
16    async fn find_by_ticket(&self, ticket_id: Uuid) -> Result<Vec<ContractEvaluation>, String>;
17    async fn find_by_building(
18        &self,
19        building_id: Uuid,
20        page: i64,
21        per_page: i64,
22    ) -> Result<Vec<ContractEvaluation>, String>;
23    async fn find_legal_evaluations(
24        &self,
25        building_id: Uuid,
26        page: i64,
27        per_page: i64,
28    ) -> Result<Vec<ContractEvaluation>, String>;
29    async fn update(&self, evaluation: &ContractEvaluation) -> Result<ContractEvaluation, String>;
30    async fn delete(&self, id: Uuid) -> Result<(), String>;
31    async fn count_by_service_provider(&self, provider_id: Uuid) -> Result<i64, String>;
32    async fn average_score_by_provider(&self, provider_id: Uuid) -> Result<Option<f64>, String>;
33}