koprogo_api/application/dto/
ticket_dto.rs1use 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, utoipa::ToSchema)]
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 work_order_sent_at: Option<DateTime<Utc>>,
21 pub created_at: DateTime<Utc>,
22 pub updated_at: DateTime<Utc>,
23 pub resolved_at: Option<DateTime<Utc>>,
24 pub closed_at: Option<DateTime<Utc>>,
25}
26
27impl From<Ticket> for TicketResponse {
28 fn from(ticket: Ticket) -> Self {
29 Self {
30 id: ticket.id,
31 organization_id: ticket.organization_id,
32 building_id: ticket.building_id,
33 unit_id: ticket.unit_id,
34 created_by: ticket.created_by,
35 assigned_to: ticket.assigned_to,
36 title: ticket.title,
37 description: ticket.description,
38 category: ticket.category,
39 priority: ticket.priority,
40 status: ticket.status,
41 resolution_notes: ticket.resolution_notes,
42 work_order_sent_at: ticket.work_order_sent_at,
43 created_at: ticket.created_at,
44 updated_at: ticket.updated_at,
45 resolved_at: ticket.resolved_at,
46 closed_at: ticket.closed_at,
47 }
48 }
49}
50
51#[derive(Debug, Deserialize, utoipa::ToSchema)]
52pub struct CreateTicketRequest {
53 pub building_id: Uuid,
54 pub unit_id: Option<Uuid>,
55 pub title: String,
56 pub description: String,
57 pub category: TicketCategory,
58 pub priority: TicketPriority,
59}
60
61#[derive(Debug, Deserialize, utoipa::ToSchema)]
62pub struct AssignTicketRequest {
63 pub assigned_to: Uuid,
64}
65
66#[derive(Debug, Deserialize, utoipa::ToSchema)]
67pub struct ResolveTicketRequest {
68 pub resolution_notes: String,
69}
70
71#[derive(Debug, Deserialize, utoipa::ToSchema)]
72pub struct CancelTicketRequest {
73 pub reason: String,
74}
75
76#[derive(Debug, Deserialize, utoipa::ToSchema)]
77pub struct ReopenTicketRequest {
78 pub reason: String,
79}