koprogo_api/application/dto/
vote_dto.rs1use crate::domain::entities::{Vote, VoteAuthMethod, VoteChoice};
2use chrono::{DateTime, Utc};
3use rust_decimal::Decimal;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Debug, Serialize, Deserialize, Clone, utoipa::ToSchema)]
9pub struct VoteResponse {
10 pub id: Uuid,
11 pub resolution_id: Uuid,
12 pub owner_id: Uuid,
13 pub unit_id: Uuid,
14 pub vote_choice: VoteChoice,
15 pub voting_power: Decimal,
17 pub proxy_owner_id: Option<Uuid>,
18 pub voted_at: DateTime<Utc>,
19 pub is_proxy_vote: bool,
20 pub auth_method: VoteAuthMethod,
22}
23
24impl From<Vote> for VoteResponse {
25 fn from(vote: Vote) -> Self {
26 Self {
27 id: vote.id,
28 resolution_id: vote.resolution_id,
29 owner_id: vote.owner_id,
30 unit_id: vote.unit_id,
31 vote_choice: vote.vote_choice.clone(),
32 voting_power: vote.voting_power,
33 proxy_owner_id: vote.proxy_owner_id,
34 voted_at: vote.voted_at,
35 is_proxy_vote: vote.is_proxy_vote(),
36 auth_method: vote.auth_method,
37 }
38 }
39}
40
41#[derive(Debug, Deserialize, utoipa::ToSchema)]
43pub struct CastVoteRequest {
44 pub owner_id: Uuid,
45 pub unit_id: Uuid,
46 pub vote_choice: VoteChoice,
47 #[serde(default)]
57 pub voting_power: Option<Decimal>,
58 pub proxy_owner_id: Option<Uuid>,
59 #[serde(default)]
65 pub auth_method: Option<VoteAuthMethod>,
66}
67
68#[derive(Debug, Deserialize, utoipa::ToSchema)]
70pub struct ChangeVoteRequest {
71 pub vote_choice: VoteChoice,
72}