use super::priority::Priority;
use super::TodoStatus;
use crate::entity::todo_item::Model as TodoModel;
use chrono::{DateTime, FixedOffset};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Todo {
pub id: String,
pub title: String,
pub note: String,
pub status: TodoStatus,
pub priority: Priority,
pub created_at: DateTime<FixedOffset>,
pub updated_at: DateTime<FixedOffset>,
pub completed_at: Option<DateTime<FixedOffset>>,
pub deleted_at: Option<DateTime<FixedOffset>>,
}
impl From<TodoModel> for Todo {
fn from(model: TodoModel) -> Self {
Todo {
id: model.id,
title: model.title,
note: model.note,
status: TodoStatus::from_status_str(&model.status).unwrap_or(TodoStatus::Pending),
priority: Priority::new(model.priority),
created_at: model.created_at,
updated_at: model.updated_at,
completed_at: model.completed_at,
deleted_at: model.deleted_at,
}
}
}
impl From<Todo> for TodoModel {
fn from(todo: Todo) -> Self {
TodoModel {
id: todo.id,
title: todo.title,
note: todo.note,
status: todo.status.as_str().to_string(),
priority: todo.priority.into(),
created_at: todo.created_at,
updated_at: todo.updated_at,
completed_at: todo.completed_at,
deleted_at: todo.deleted_at,
}
}
}