koprogo_api/application/dto/
technical_inspection_dto.rs1use crate::domain::entities::{InspectionStatus, InspectionType};
2use serde::{Deserialize, Serialize};
3use validator::Validate;
4
5#[derive(Debug, Deserialize, Validate, Clone)]
6pub struct CreateTechnicalInspectionDto {
7 pub organization_id: String,
8 pub building_id: String,
9
10 #[validate(length(min = 1, max = 255))]
11 pub title: String,
12
13 pub description: Option<String>,
14 pub inspection_type: InspectionType,
15
16 #[validate(length(min = 1, max = 255))]
17 pub inspector_name: String,
18
19 #[validate(length(max = 255))]
20 pub inspector_company: Option<String>,
21
22 #[validate(length(max = 100))]
23 pub inspector_certification: Option<String>,
24
25 pub inspection_date: String, pub result_summary: Option<String>,
28 pub defects_found: Option<String>,
29 pub recommendations: Option<String>,
30
31 pub compliant: Option<bool>,
32
33 #[validate(length(max = 100))]
34 pub compliance_certificate_number: Option<String>,
35
36 pub compliance_valid_until: Option<String>, #[validate(range(min = 0.0))]
39 pub cost: Option<f64>,
40
41 #[validate(length(max = 100))]
42 pub invoice_number: Option<String>,
43
44 pub notes: Option<String>,
45}
46
47#[derive(Debug, Deserialize, Validate, Clone)]
48pub struct UpdateTechnicalInspectionDto {
49 #[validate(length(min = 1, max = 255))]
50 pub title: Option<String>,
51
52 pub description: Option<String>,
53 pub inspection_type: Option<InspectionType>,
54
55 #[validate(length(min = 1, max = 255))]
56 pub inspector_name: Option<String>,
57
58 #[validate(length(max = 255))]
59 pub inspector_company: Option<String>,
60
61 #[validate(length(max = 100))]
62 pub inspector_certification: Option<String>,
63
64 pub inspection_date: Option<String>,
65 pub status: Option<InspectionStatus>,
66
67 pub result_summary: Option<String>,
68 pub defects_found: Option<String>,
69 pub recommendations: Option<String>,
70
71 pub compliant: Option<bool>,
72
73 #[validate(length(max = 100))]
74 pub compliance_certificate_number: Option<String>,
75
76 pub compliance_valid_until: Option<String>,
77
78 #[validate(range(min = 0.0))]
79 pub cost: Option<f64>,
80
81 #[validate(length(max = 100))]
82 pub invoice_number: Option<String>,
83
84 pub notes: Option<String>,
85}
86
87#[derive(Debug, Serialize)]
88pub struct TechnicalInspectionResponseDto {
89 pub id: String,
90 pub organization_id: String,
91 pub building_id: String,
92 pub title: String,
93 pub description: Option<String>,
94 pub inspection_type: InspectionType,
95 pub inspector_name: String,
96 pub inspector_company: Option<String>,
97 pub inspector_certification: Option<String>,
98 pub inspection_date: String,
99 pub next_due_date: String,
100 pub status: InspectionStatus,
101 pub result_summary: Option<String>,
102 pub defects_found: Option<String>,
103 pub recommendations: Option<String>,
104 pub compliant: Option<bool>,
105 pub compliance_certificate_number: Option<String>,
106 pub compliance_valid_until: Option<String>,
107 pub cost: Option<f64>,
108 pub invoice_number: Option<String>,
109 pub reports: Vec<String>,
110 pub photos: Vec<String>,
111 pub certificates: Vec<String>,
112 pub notes: Option<String>,
113 pub is_overdue: bool,
114 pub days_until_due: i64,
115 pub created_at: String,
116 pub updated_at: String,
117}
118
119#[derive(Debug, Deserialize, Validate)]
120pub struct AddReportDto {
121 #[validate(length(min = 1))]
122 pub report_path: String,
123}
124
125#[derive(Debug, Deserialize, Validate)]
126pub struct AddInspectionPhotoDto {
127 #[validate(length(min = 1))]
128 pub photo_path: String,
129}
130
131#[derive(Debug, Deserialize, Validate)]
132pub struct AddCertificateDto {
133 #[validate(length(min = 1))]
134 pub certificate_path: String,
135}
136
137#[derive(Debug, Serialize)]
138pub struct TechnicalInspectionListResponseDto {
139 pub inspections: Vec<TechnicalInspectionResponseDto>,
140 pub total: i64,
141 pub page: i64,
142 pub page_size: i64,
143}
144
145#[derive(Debug, Serialize)]
146pub struct InspectionStatusDto {
147 pub inspection_id: String,
148 pub title: String,
149 pub inspection_type: InspectionType,
150 pub next_due_date: String,
151 pub status: InspectionStatus,
152 pub is_overdue: bool,
153 pub days_until_due: i64,
154}