koprogo_api/application/dto/
filters.rs1use chrono::{DateTime, Utc};
2use serde::Deserialize;
3use uuid::Uuid;
4
5#[derive(Debug, Deserialize, Default, Clone)]
7pub struct BuildingFilters {
8 pub organization_id: Option<Uuid>,
9 pub city: Option<String>,
10 pub construction_year: Option<i32>,
11 pub min_units: Option<i32>,
12 pub max_units: Option<i32>,
13}
14
15#[derive(Debug, Deserialize, Default, Clone)]
17pub struct ExpenseFilters {
18 pub organization_id: Option<Uuid>,
19 pub building_id: Option<Uuid>,
20 pub category: Option<String>,
21 pub status: Option<String>,
22 pub paid: Option<bool>,
23 pub date_from: Option<DateTime<Utc>>,
24 pub date_to: Option<DateTime<Utc>>,
25 pub min_amount: Option<f64>,
26 pub max_amount: Option<f64>,
27}
28
29#[derive(Debug, Deserialize, Default, Clone)]
31pub struct UnitFilters {
32 pub organization_id: Option<Uuid>,
33 pub building_id: Option<Uuid>,
34 pub unit_type: Option<String>,
35 pub has_owner: Option<bool>,
36 pub floor: Option<i32>,
37 pub min_area: Option<f64>,
38 pub max_area: Option<f64>,
39}
40
41#[derive(Debug, Deserialize, Default, Clone)]
43pub struct OwnerFilters {
44 pub organization_id: Option<Uuid>,
45 pub email: Option<String>,
46 pub phone: Option<String>,
47 pub last_name: Option<String>,
48 pub first_name: Option<String>,
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn test_building_filters_default() {
57 let filters = BuildingFilters::default();
58 assert!(filters.city.is_none());
59 assert!(filters.construction_year.is_none());
60 assert!(filters.min_units.is_none());
61 assert!(filters.max_units.is_none());
62 }
63
64 #[test]
65 fn test_expense_filters_default() {
66 let filters = ExpenseFilters::default();
67 assert!(filters.building_id.is_none());
68 assert!(filters.category.is_none());
69 assert!(filters.paid.is_none());
70 }
71
72 #[test]
73 fn test_unit_filters_default() {
74 let filters = UnitFilters::default();
75 assert!(filters.building_id.is_none());
76 assert!(filters.has_owner.is_none());
77 }
78
79 #[test]
80 fn test_owner_filters_default() {
81 let filters = OwnerFilters::default();
82 assert!(filters.email.is_none());
83 assert!(filters.last_name.is_none());
84 }
85}