koprogo_api/application/dto/
ticket_dto.rs

1use crate::domain::entities::{Ticket, TicketCategory, TicketPriority, TicketStatus};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Debug, Serialize, Deserialize, Clone)]
7pub struct TicketResponse {
8    pub id: Uuid,
9    pub organization_id: Uuid,
10    pub building_id: Uuid,
11    pub unit_id: Option<Uuid>,
12    pub created_by: Uuid,
13    pub assigned_to: Option<Uuid>,
14    pub title: String,
15    pub description: String,
16    pub category: TicketCategory,
17    pub priority: TicketPriority,
18    pub status: TicketStatus,
19    pub resolution_notes: Option<String>,
20    pub created_at: DateTime<Utc>,
21    pub updated_at: DateTime<Utc>,
22    pub resolved_at: Option<DateTime<Utc>>,
23    pub closed_at: Option<DateTime<Utc>>,
24}
25
26impl From<Ticket> for TicketResponse {
27    fn from(ticket: Ticket) -> Self {
28        Self {
29            id: ticket.id,
30            organization_id: ticket.organization_id,
31            building_id: ticket.building_id,
32            unit_id: ticket.unit_id,
33            created_by: ticket.created_by,
34            assigned_to: ticket.assigned_to,
35            title: ticket.title,
36            description: ticket.description,
37            category: ticket.category,
38            priority: ticket.priority,
39            status: ticket.status,
40            resolution_notes: ticket.resolution_notes,
41            created_at: ticket.created_at,
42            updated_at: ticket.updated_at,
43            resolved_at: ticket.resolved_at,
44            closed_at: ticket.closed_at,
45        }
46    }
47}
48
49#[derive(Debug, Deserialize)]
50pub struct CreateTicketRequest {
51    pub building_id: Uuid,
52    pub unit_id: Option<Uuid>,
53    pub title: String,
54    pub description: String,
55    pub category: TicketCategory,
56    pub priority: TicketPriority,
57}
58
59#[derive(Debug, Deserialize)]
60pub struct AssignTicketRequest {
61    pub assigned_to: Uuid,
62}
63
64#[derive(Debug, Deserialize)]
65pub struct ResolveTicketRequest {
66    pub resolution_notes: String,
67}
68
69#[derive(Debug, Deserialize)]
70pub struct CancelTicketRequest {
71    pub reason: String,
72}
73
74#[derive(Debug, Deserialize)]
75pub struct ReopenTicketRequest {
76    pub reason: String,
77}