1#![allow(clippy::module_name_repetitions)] use chrono::{NaiveDate, NaiveDateTime};
5use postgis_diesel::types::{Point, Polygon};
6use serde::{Deserialize, Serialize};
7use typeshare::typeshare;
8use utoipa::{IntoParams, ToSchema};
9use uuid::Uuid;
10
11use self::layers::LayerDto;
12
13use super::r#enum::{
14 herbaceous_or_woody::HerbaceousOrWoody, include_archived_seeds::IncludeArchivedSeeds,
15 life_cycle::LifeCycle, privacy_access_control::PrivacyAccessControl, quality::Quality,
16 quantity::Quantity, spatial_relation_type::SpatialRelationType,
17};
18
19pub mod actions;
20pub mod application_settings_impl;
21pub mod areas;
22pub mod areas_impl;
23pub mod base_layer_images;
24pub mod base_layer_images_impl;
25pub mod coordinates_impl;
26pub mod core;
27pub mod drawing_variant_impl;
28pub mod drawings;
29pub mod drawings_impl;
30pub mod guided_tour_impl;
31pub mod layer_impl;
32pub mod layers;
33pub mod map_collaborator_impl;
34pub mod map_impl;
35pub mod new_map_collaborator_impl;
36pub mod new_map_impl;
37pub mod new_seed_impl;
38pub mod page_impl;
39pub mod plantings;
40pub mod plantings_impl;
41pub mod plants_impl;
42pub mod seed_impl;
43pub mod timeline;
44pub mod update_map_geometry_impl;
45pub mod update_map_impl;
46
47#[typeshare]
49#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
50pub struct ConfigDto {
51 pub issuer_uri: String,
53 pub client_id: String,
55 pub version: String,
57}
58
59#[typeshare]
61#[derive(Serialize, Deserialize, ToSchema)]
62pub struct SeedDto {
63 pub id: i32,
65 pub name: String,
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub plant_id: Option<i32>,
70 pub harvest_year: i16,
72 pub quantity: Quantity,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub use_by: Option<NaiveDate>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub origin: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub taste: Option<String>,
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub yield_: Option<String>,
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub generation: Option<i16>,
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub quality: Option<Quality>,
92 #[serde(skip_serializing_if = "Option::is_none")]
94 pub price: Option<i16>,
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub notes: Option<String>,
98 pub created_by: Uuid,
100 #[serde(skip_serializing_if = "Option::is_none")]
103 pub archived_at: Option<String>,
104}
105
106#[allow(clippy::missing_docs_in_private_items)] #[typeshare]
108#[derive(Serialize, Deserialize, ToSchema)]
109pub struct NewSeedDto {
110 pub name: String,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub plant_id: Option<i32>,
113 pub harvest_year: i16,
114 pub quantity: Quantity,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub use_by: Option<NaiveDate>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub origin: Option<String>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub taste: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub yield_: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub generation: Option<i16>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub quality: Option<Quality>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub price: Option<i16>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub notes: Option<String>,
131}
132
133#[typeshare]
135#[derive(Serialize, Deserialize, ToSchema)]
136pub struct ArchiveSeedDto {
137 pub archived: bool,
139}
140
141#[typeshare]
143#[derive(Debug, Serialize, PartialEq, Eq, Deserialize, ToSchema)]
144pub struct PlantsSummaryDto {
145 pub id: i32,
147 pub unique_name: String,
149 #[serde(skip_serializing_if = "Option::is_none")]
151 pub common_name_en: Option<Vec<Option<String>>>,
152 #[serde(skip_serializing_if = "Option::is_none")]
154 pub common_name_de: Option<Vec<Option<String>>>,
155 #[serde(skip_serializing_if = "Option::is_none")]
157 pub spread: Option<i32>,
158 pub life_cycle: Vec<LifeCycle>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub herbaceous_or_woody: Option<HerbaceousOrWoody>,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub has_drought_tolerance: Option<bool>,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub hardiness_zone: Option<String>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub functions: Option<String>,
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub edible: Option<bool>,
171 pub edible_parts: Vec<Option<String>>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub warning: Option<String>,
174 pub sowing_outdoors: Vec<Option<i16>>,
175 pub harvest_time: Vec<Option<i16>>,
176 pub icon_path: Option<String>,
177}
178
179#[typeshare]
181#[derive(Debug, Deserialize, IntoParams)]
182pub struct PlantsSearchParameters {
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub name: Option<String>,
186}
187
188#[typeshare]
190#[derive(Debug, Deserialize, IntoParams)]
191pub struct RelationSearchParameters {
192 pub plant_id: i32,
194}
195
196#[typeshare]
198#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
199pub struct RelationsDto {
200 pub id: i32,
202 pub relations: Vec<RelationDto>,
204}
205
206#[typeshare]
208#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
209pub struct RelationDto {
210 pub id: i32,
212 pub relation: SpatialRelationType,
214}
215
216#[typeshare]
218#[derive(Debug, Deserialize, IntoParams)]
219pub struct SeedSearchParameters {
220 #[serde(skip_serializing_if = "Option::is_none")]
222 pub name: Option<String>,
223 #[serde(skip_serializing_if = "Option::is_none")]
225 pub harvest_year: Option<i16>,
226 #[serde(skip_serializing_if = "Option::is_none")]
229 pub archived: Option<IncludeArchivedSeeds>,
230}
231
232#[typeshare]
234#[derive(Debug, Deserialize, IntoParams)]
235pub struct PageParameters {
236 #[serde(skip_serializing_if = "Option::is_none")]
238 pub per_page: Option<i32>,
239 #[serde(skip_serializing_if = "Option::is_none")]
242 pub page: Option<i32>,
243}
244
245#[typeshare]
247#[derive(Debug, Serialize, PartialEq, Eq, Deserialize, ToSchema)]
248#[aliases(
249 PagePlantsSummaryDto = Page<PlantsSummaryDto>,
250 PageSeedDto = Page<SeedDto>,
251 PageMapDto = Page<MapDto>,
252 PageLayerDto = Page<LayerDto>
253)]
254pub struct Page<T> {
255 pub results: Vec<T>,
257 pub page: i32,
259 pub per_page: i32,
261 pub total_pages: i32,
263}
264
265#[typeshare]
267#[derive(Serialize, Deserialize, ToSchema)]
268pub struct MapDto {
269 pub id: i32,
271 pub name: String,
273 pub created_at: NaiveDateTime,
275 pub modified_at: NaiveDateTime,
277 pub created_by: Uuid,
279 pub modified_by: Uuid,
281 #[serde(skip_serializing_if = "Option::is_none")]
283 pub deletion_date: Option<NaiveDate>,
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub last_visit: Option<NaiveDate>,
287 pub is_inactive: bool,
289 pub zoom_factor: i16,
291 pub privacy: PrivacyAccessControl,
293 #[serde(skip_serializing_if = "Option::is_none")]
295 pub description: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub location: Option<Coordinates>,
299 #[typeshare(serialized_as = "object")]
303 #[schema(value_type = Object)]
304 pub geometry: Polygon<Point>,
305}
306
307#[typeshare]
309#[derive(Serialize, Deserialize, ToSchema)]
310pub struct NewMapDto {
311 pub name: String,
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub deletion_date: Option<NaiveDate>,
316 #[serde(skip_serializing_if = "Option::is_none")]
318 pub last_visit: Option<NaiveDate>,
319 pub is_inactive: bool,
321 pub zoom_factor: i16,
323 pub privacy: PrivacyAccessControl,
325 #[serde(skip_serializing_if = "Option::is_none")]
327 pub description: Option<String>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub location: Option<Coordinates>,
331 #[typeshare(serialized_as = "object")]
335 #[schema(value_type = Object)]
336 pub geometry: Polygon<Point>,
337}
338
339#[typeshare]
341#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
342pub struct UpdateMapDto {
343 #[serde(skip_serializing_if = "Option::is_none")]
345 pub name: Option<String>,
346 #[serde(skip_serializing_if = "Option::is_none")]
348 pub privacy: Option<PrivacyAccessControl>,
349 #[serde(skip_serializing_if = "Option::is_none")]
351 pub description: Option<String>,
352 #[serde(skip_serializing_if = "Option::is_none")]
354 pub location: Option<Coordinates>,
355}
356
357#[typeshare]
359#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
360pub struct UpdateMapGeometryDto {
361 #[typeshare(serialized_as = "object")]
365 #[schema(value_type = Object)]
366 pub geometry: Polygon<Point>,
367}
368
369#[typeshare]
371#[derive(Debug, Deserialize, IntoParams)]
372pub struct MapSearchParameters {
373 #[serde(skip_serializing_if = "Option::is_none")]
375 pub name: Option<String>,
376}
377
378#[typeshare]
380#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
381pub struct Coordinates {
382 pub latitude: f64,
384 pub longitude: f64,
386}
387
388#[typeshare]
390#[derive(Debug, Deserialize, IntoParams)]
391pub struct ConnectToMapQueryParams {
392 pub map_id: i32,
394 pub user_id: String,
396}
397
398#[typeshare]
400#[derive(Debug, Deserialize, IntoParams)]
401pub struct HeatMapQueryParams {
402 pub plant_layer_id: Uuid,
404 pub shade_layer_id: Uuid,
406 pub hydrology_layer_id: Uuid,
408 pub soil_layer_id: Uuid,
410 pub plant_id: i32,
412 #[serde(skip_serializing_if = "Option::is_none")]
415 pub date: Option<NaiveDate>,
416}
417
418#[typeshare]
419#[derive(Serialize, Deserialize, ToSchema)]
420pub struct GuidedTourDto {
422 pub completed_steps: Vec<String>,
424 pub paused: bool,
426}
427
428#[typeshare]
429#[derive(Serialize, Deserialize, ToSchema)]
430pub struct CompleteGuidedTourStepDto {
432 pub step_key: String,
434}
435
436#[typeshare]
437#[derive(Serialize, Deserialize, ToSchema)]
438pub struct CompleteGuidedTourStepsDto {
440 pub step_keys: Vec<String>,
442}
443
444#[typeshare]
446#[derive(Serialize, Deserialize, ToSchema)]
447pub struct ApplicationSettingDto {
448 pub id: i32,
450 pub key: String,
452 pub value: String,
454}
455
456#[typeshare]
457#[derive(Debug, Serialize, ToSchema)]
458#[serde(rename_all = "camelCase")]
459pub struct MapCollaboratorDto {
461 pub map_id: i32,
463 pub user_id: Uuid,
465 pub username: String,
467}
468
469#[typeshare]
470#[derive(Debug, Deserialize, ToSchema)]
471#[serde(rename_all = "camelCase")]
472pub struct NewMapCollaboratorDto {
474 pub user_id: Uuid,
476}
477
478#[typeshare]
479#[derive(Debug, Serialize, Deserialize, ToSchema)]
480#[serde(rename_all = "camelCase")]
481pub struct DeleteMapCollaboratorDto {
482 pub user_id: Uuid,
484}
485
486#[typeshare]
487#[derive(Debug, Deserialize, IntoParams)]
488#[serde(rename_all = "camelCase")]
489pub struct MapCollaboratorSearchParameters {
491 pub map_id: i32,
493}
494
495#[typeshare]
496#[derive(Debug, Deserialize, IntoParams)]
497#[serde(rename_all = "camelCase")]
498pub struct UserSearchParameters {
500 pub username: String,
502}