koprogo_api/application/dto/
technical_inspection_dto.rs

1use 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, // ISO 8601 format
26
27    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>, // ISO 8601 format
37
38    #[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}