koprogo_api/application/dto/
meeting_dto.rs1use crate::domain::entities::{Meeting, MeetingStatus, MeetingType};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Debug, Serialize, Deserialize)]
8pub struct MeetingResponse {
9 pub id: Uuid,
10 pub building_id: Uuid,
11 pub meeting_type: MeetingType,
12 pub title: String,
13 pub description: Option<String>,
14 pub scheduled_date: DateTime<Utc>,
15 pub location: String,
16 pub status: MeetingStatus,
17 pub agenda: Vec<String>,
18 pub attendees_count: Option<i32>,
19 pub quorum_validated: bool,
21 pub quorum_percentage: Option<f64>,
22 pub total_quotas: Option<f64>,
23 pub present_quotas: Option<f64>,
24 pub is_second_convocation: bool,
25 pub minutes_document_id: Option<Uuid>,
26 pub minutes_sent_at: Option<DateTime<Utc>>,
27 pub created_at: DateTime<Utc>,
28 pub updated_at: DateTime<Utc>,
29}
30
31impl From<Meeting> for MeetingResponse {
32 fn from(meeting: Meeting) -> Self {
33 Self {
34 id: meeting.id,
35 building_id: meeting.building_id,
36 meeting_type: meeting.meeting_type,
37 title: meeting.title,
38 description: meeting.description,
39 scheduled_date: meeting.scheduled_date,
40 location: meeting.location,
41 status: meeting.status,
42 agenda: meeting.agenda,
43 attendees_count: meeting.attendees_count,
44 quorum_validated: meeting.quorum_validated,
45 quorum_percentage: meeting.quorum_percentage,
46 total_quotas: meeting.total_quotas,
47 present_quotas: meeting.present_quotas,
48 is_second_convocation: meeting.is_second_convocation,
49 minutes_document_id: meeting.minutes_document_id,
50 minutes_sent_at: meeting.minutes_sent_at,
51 created_at: meeting.created_at,
52 updated_at: meeting.updated_at,
53 }
54 }
55}
56
57#[derive(Debug, Deserialize)]
59pub struct ValidateQuorumRequest {
60 pub present_quotas: f64,
62 pub total_quotas: f64,
64}
65
66#[derive(Debug, Deserialize)]
68pub struct CreateMeetingRequest {
69 #[serde(default)]
70 pub organization_id: Uuid, pub building_id: Uuid,
72 pub meeting_type: MeetingType,
73 pub title: String,
74 pub description: Option<String>,
75 pub scheduled_date: DateTime<Utc>,
76 pub location: String,
77}
78
79#[derive(Debug, Deserialize)]
81pub struct UpdateMeetingRequest {
82 pub title: Option<String>,
83 pub description: Option<String>,
84 pub scheduled_date: Option<DateTime<Utc>>,
85 pub location: Option<String>,
86}
87
88#[derive(Debug, Deserialize)]
90pub struct AddAgendaItemRequest {
91 pub item: String,
92}
93
94#[derive(Debug, Deserialize)]
96pub struct CompleteMeetingRequest {
97 pub attendees_count: i32,
98}
99
100#[derive(Debug, Deserialize)]
102pub struct RescheduleMeetingRequest {
103 pub scheduled_date: DateTime<Utc>,
104}
105
106#[derive(Debug, Deserialize)]
108pub struct AttachMinutesRequest {
109 pub document_id: Uuid,
110}
111
112#[derive(Debug, Deserialize)]
114pub struct ScheduleSecondConvocationRequest {
115 pub building_id: Uuid,
116 pub first_meeting_id: Uuid,
117 pub new_meeting_date: DateTime<Utc>,
118 pub language: String,
119}