koprogo_api/application/dto/
resolution_dto.rs1use crate::domain::entities::{MajorityType, Resolution, ResolutionStatus, ResolutionType};
2use chrono::{DateTime, Utc};
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Debug, Serialize, Deserialize, Clone)]
8pub struct ResolutionResponse {
9 pub id: Uuid,
10 pub meeting_id: Uuid,
11 pub title: String,
12 pub description: String,
13 pub resolution_type: ResolutionType,
14 pub majority_required: MajorityType,
15 pub vote_count_pour: i32,
16 pub vote_count_contre: i32,
17 pub vote_count_abstention: i32,
18 pub total_voting_power_pour: f64,
19 pub total_voting_power_contre: f64,
20 pub total_voting_power_abstention: f64,
21 pub status: ResolutionStatus,
22 pub created_at: DateTime<Utc>,
23 pub voted_at: Option<DateTime<Utc>>,
24 pub total_votes: i32,
26 pub pour_percentage: f64,
27 pub contre_percentage: f64,
28 pub abstention_percentage: f64,
29}
30
31impl From<Resolution> for ResolutionResponse {
32 fn from(resolution: Resolution) -> Self {
33 Self {
34 id: resolution.id,
35 meeting_id: resolution.meeting_id,
36 title: resolution.title.clone(),
37 description: resolution.description.clone(),
38 resolution_type: resolution.resolution_type.clone(),
39 majority_required: resolution.majority_required.clone(),
40 vote_count_pour: resolution.vote_count_pour,
41 vote_count_contre: resolution.vote_count_contre,
42 vote_count_abstention: resolution.vote_count_abstention,
43 total_voting_power_pour: resolution.total_voting_power_pour,
44 total_voting_power_contre: resolution.total_voting_power_contre,
45 total_voting_power_abstention: resolution.total_voting_power_abstention,
46 status: resolution.status.clone(),
47 created_at: resolution.created_at,
48 voted_at: resolution.voted_at,
49 total_votes: resolution.total_votes(),
51 pour_percentage: resolution.pour_percentage(),
52 contre_percentage: resolution.contre_percentage(),
53 abstention_percentage: resolution.abstention_percentage(),
54 }
55 }
56}
57
58#[derive(Debug, Deserialize)]
60pub struct CreateResolutionRequest {
61 pub meeting_id: Uuid,
62 pub title: String,
63 pub description: String,
64 pub resolution_type: ResolutionType,
65 pub majority_required: MajorityType,
66}
67
68#[derive(Debug, Deserialize)]
70pub struct UpdateResolutionRequest {
71 pub title: Option<String>,
72 pub description: Option<String>,
73 pub resolution_type: Option<ResolutionType>,
74 pub majority_required: Option<MajorityType>,
75}
76
77#[derive(Debug, Deserialize)]
79pub struct CloseVotingRequest {
80 pub total_voting_power: f64,
81}