use crate::models::base_info::UserBaseInfo; use crate::models::common::State; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, sqlx::FromRow, utoipa::ToSchema)] pub struct PullRequest { pub id: Uuid, pub repo_id: Uuid, pub author_id: Uuid, pub number: i64, pub title: String, pub body: Option, pub state: State, pub source_repo_id: Uuid, pub source_branch: String, pub target_repo_id: Uuid, pub target_branch: String, pub base_commit_sha: Option, pub head_commit_sha: String, pub merge_commit_sha: Option, pub draft: bool, pub locked: bool, pub merged_by: Option, pub merged_at: Option>, pub closed_by: Option, pub closed_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct PullRequestDetail { pub id: Uuid, pub repo_id: Uuid, pub author: UserBaseInfo, pub number: i64, pub title: String, pub body: Option, pub state: State, pub source_repo_id: Uuid, pub source_branch: String, pub target_repo_id: Uuid, pub target_branch: String, pub base_commit_sha: Option, pub head_commit_sha: String, pub merge_commit_sha: Option, pub draft: bool, pub locked: bool, pub merged_by: Option, pub merged_at: Option>, pub closed_by: Option, pub closed_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } impl PullRequest { pub fn into_detail(self, author: UserBaseInfo) -> PullRequestDetail { PullRequestDetail { id: self.id, repo_id: self.repo_id, author, number: self.number, title: self.title, body: self.body, state: self.state, source_repo_id: self.source_repo_id, source_branch: self.source_branch, target_repo_id: self.target_repo_id, target_branch: self.target_branch, base_commit_sha: self.base_commit_sha, head_commit_sha: self.head_commit_sha, merge_commit_sha: self.merge_commit_sha, draft: self.draft, locked: self.locked, merged_by: self.merged_by, merged_at: self.merged_at, closed_by: self.closed_by, closed_at: self.closed_at, created_at: self.created_at, updated_at: self.updated_at, deleted_at: self.deleted_at, } } }