koprogo_api/application/dto/
filters.rs1use crate::domain::entities::ApprovalStatus;
2use chrono::{DateTime, Utc};
3use serde::Deserialize;
4use uuid::Uuid;
5
6#[derive(Debug, Deserialize, Default, Clone)]
8pub struct BuildingFilters {
9 pub organization_id: Option<Uuid>,
10 pub city: Option<String>,
11 pub construction_year: Option<i32>,
12 pub min_units: Option<i32>,
13 pub max_units: Option<i32>,
14}
15
16#[derive(Debug, Deserialize, Default, Clone)]
18pub struct ExpenseFilters {
19 pub organization_id: Option<Uuid>,
20 pub building_id: Option<Uuid>,
21 pub category: Option<String>,
22 pub status: Option<String>,
23 pub paid: Option<bool>,
24 pub approval_status: Option<ApprovalStatus>, pub date_from: Option<DateTime<Utc>>,
26 pub date_to: Option<DateTime<Utc>>,
27 pub min_amount: Option<f64>,
28 pub max_amount: Option<f64>,
29}
30
31#[derive(Debug, Deserialize, Default, Clone)]
33pub struct UnitFilters {
34 pub organization_id: Option<Uuid>,
35 pub building_id: Option<Uuid>,
36 pub unit_type: Option<String>,
37 pub has_owner: Option<bool>,
38 pub floor: Option<i32>,
39 pub min_area: Option<f64>,
40 pub max_area: Option<f64>,
41}
42
43#[derive(Debug, Deserialize, Default, Clone)]
45pub struct OwnerFilters {
46 pub organization_id: Option<Uuid>,
47 pub email: Option<String>,
48 pub phone: Option<String>,
49 pub last_name: Option<String>,
50 pub first_name: Option<String>,
51}
52
53#[derive(Debug, Deserialize, Default, Clone)]
55pub struct WorkReportFilters {
56 pub organization_id: Option<Uuid>,
57 pub building_id: Option<Uuid>,
58 pub work_type: Option<String>,
59 pub warranty_type: Option<String>,
60 pub contractor_name: Option<String>,
61 pub work_date_from: Option<DateTime<Utc>>,
62 pub work_date_to: Option<DateTime<Utc>>,
63 pub min_cost: Option<f64>,
64 pub max_cost: Option<f64>,
65 pub warranty_active: Option<bool>,
66}
67
68#[derive(Debug, Deserialize, Default, Clone)]
70pub struct TechnicalInspectionFilters {
71 pub organization_id: Option<Uuid>,
72 pub building_id: Option<Uuid>,
73 pub inspection_type: Option<String>,
74 pub status: Option<String>,
75 pub inspector_name: Option<String>,
76 pub inspector_company: Option<String>,
77 pub inspection_date_from: Option<DateTime<Utc>>,
78 pub inspection_date_to: Option<DateTime<Utc>>,
79 pub overdue: Option<bool>,
80 pub compliant: Option<bool>,
81}
82
83#[cfg(test)]
84mod tests {
85 use super::*;
86
87 #[test]
88 fn test_building_filters_default() {
89 let filters = BuildingFilters::default();
90 assert!(filters.city.is_none());
91 assert!(filters.construction_year.is_none());
92 assert!(filters.min_units.is_none());
93 assert!(filters.max_units.is_none());
94 }
95
96 #[test]
97 fn test_expense_filters_default() {
98 let filters = ExpenseFilters::default();
99 assert!(filters.building_id.is_none());
100 assert!(filters.category.is_none());
101 assert!(filters.paid.is_none());
102 }
103
104 #[test]
105 fn test_unit_filters_default() {
106 let filters = UnitFilters::default();
107 assert!(filters.building_id.is_none());
108 assert!(filters.has_owner.is_none());
109 }
110
111 #[test]
112 fn test_owner_filters_default() {
113 let filters = OwnerFilters::default();
114 assert!(filters.email.is_none());
115 assert!(filters.last_name.is_none());
116 }
117}