projectlib/jsonb/
milestone.rsuse chrono::{NaiveDateTime};
use common::utils::serialize_option_naive_date;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::dto::milestone_request::MilestoneRequest;
use crate::dto::milestone_response::MilestoneResponse;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct Milestone {
pub id: Uuid,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "serialize_option_naive_date")]
pub datestart: Option<NaiveDateTime>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "serialize_option_naive_date")]
pub dateend: Option<NaiveDateTime>,
pub status: Option<String>,
pub name: Option<String>,
}
impl Milestone {
pub fn from_request(milestone: &MilestoneRequest) -> Milestone {
Milestone {
id: if milestone.id.is_none() {
Uuid::new_v4()
} else {
milestone.id.unwrap()
},
datestart: milestone.datestart.clone(),
dateend: milestone.dateend.clone(),
status: milestone.status.clone(),
name: milestone.name.clone(),
}
}
pub fn to_response(&self) -> MilestoneResponse {
MilestoneResponse {
id: self.id,
datestart: self.datestart,
dateend: self.dateend,
status: self.status.clone(),
name: self.name.clone(),
}
}
pub fn to_response_list(milestones: Vec<Milestone>) -> Vec<MilestoneResponse> {
let mut res: Vec<MilestoneResponse> = vec![];
if milestones.is_empty() {
return res;
}
for milestone in milestones.iter() {
res.push(Milestone::to_response(&milestone.clone()));
}
res
}
}