koprogo_api/application/ports/
ticket_repository.rs1use crate::domain::entities::{Ticket, TicketStatus};
2use async_trait::async_trait;
3use uuid::Uuid;
4
5#[async_trait]
6pub trait TicketRepository: Send + Sync {
7 async fn create(&self, ticket: &Ticket) -> Result<Ticket, String>;
8 async fn find_by_id(&self, id: Uuid) -> Result<Option<Ticket>, String>;
9 async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<Ticket>, String>;
10 async fn find_by_organization(&self, organization_id: Uuid) -> Result<Vec<Ticket>, String>;
11 async fn find_by_created_by(&self, created_by: Uuid) -> Result<Vec<Ticket>, String>;
12 async fn find_by_assigned_to(&self, assigned_to: Uuid) -> Result<Vec<Ticket>, String>;
13 async fn find_by_status(
14 &self,
15 building_id: Uuid,
16 status: TicketStatus,
17 ) -> Result<Vec<Ticket>, String>;
18 async fn update(&self, ticket: &Ticket) -> Result<Ticket, String>;
19 async fn delete(&self, id: Uuid) -> Result<bool, String>;
20 async fn count_by_building(&self, building_id: Uuid) -> Result<i64, String>;
21 async fn count_by_status(&self, building_id: Uuid, status: TicketStatus)
22 -> Result<i64, String>;
23}