use crate::models::base_info::UserBaseInfo; use crate::models::common::{Priority, State, Visibility}; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, sqlx::FromRow, utoipa::ToSchema)] pub struct Issue { pub id: Uuid, pub workspace_id: Uuid, pub author_id: Uuid, pub number: i64, pub title: String, pub body: Option, pub state: State, pub priority: Priority, pub visibility: Visibility, pub locked: bool, pub milestone_id: Option, pub closed_by: Option, pub closed_at: Option>, pub due_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct IssueDetail { pub id: Uuid, pub workspace_id: Uuid, pub author: UserBaseInfo, pub number: i64, pub title: String, pub body: Option, pub state: State, pub priority: Priority, pub visibility: Visibility, pub locked: bool, pub milestone_id: Option, pub closed_by: Option, pub closed_at: Option>, pub due_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } impl Issue { pub fn into_detail(self, author: UserBaseInfo) -> IssueDetail { IssueDetail { id: self.id, workspace_id: self.workspace_id, author, number: self.number, title: self.title, body: self.body, state: self.state, priority: self.priority, visibility: self.visibility, locked: self.locked, milestone_id: self.milestone_id, closed_by: self.closed_by, closed_at: self.closed_at, due_at: self.due_at, created_at: self.created_at, updated_at: self.updated_at, deleted_at: self.deleted_at, } } }