koprogo_api/application/ports/
ticket_repository.rs

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