use crate::models::base_info::{UserBaseInfo, WorkspaceBaseInfo}; use crate::models::common::{GitService, Status, 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 Repo { pub id: Uuid, pub workspace_id: Uuid, pub owner_id: Uuid, pub name: String, pub description: Option, pub default_branch: String, pub visibility: Visibility, pub status: Status, pub is_fork: bool, pub forked_from_repo_id: Option, pub storage_node_ids: Vec, pub primary_storage_node_id: Uuid, pub storage_path: String, pub git_service: GitService, pub archived_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, #[sqlx(default)] pub topics: Vec, #[sqlx(default)] pub homepage: Option, #[sqlx(default)] pub has_issues: bool, #[sqlx(default)] pub has_wiki: bool, #[sqlx(default)] pub has_pull_requests: bool, #[sqlx(default)] pub allow_forking: bool, #[sqlx(default)] pub allow_merge_commit: bool, #[sqlx(default)] pub allow_squash_merge: bool, #[sqlx(default)] pub allow_rebase_merge: bool, #[sqlx(default)] pub delete_branch_on_merge: bool, } #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct RepoDetail { pub id: Uuid, pub workspace: WorkspaceBaseInfo, pub owner: UserBaseInfo, pub name: String, pub description: Option, pub default_branch: String, pub visibility: Visibility, pub status: Status, pub is_fork: bool, pub forked_from_repo_id: Option, pub storage_node_ids: Vec, pub primary_storage_node_id: Uuid, pub storage_path: String, pub git_service: GitService, pub archived_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, pub topics: Vec, pub homepage: Option, pub has_issues: bool, pub has_wiki: bool, pub has_pull_requests: bool, pub allow_forking: bool, pub allow_merge_commit: bool, pub allow_squash_merge: bool, pub allow_rebase_merge: bool, pub delete_branch_on_merge: bool, } impl Repo { pub fn into_detail(self, owner: UserBaseInfo, workspace: WorkspaceBaseInfo) -> RepoDetail { RepoDetail { id: self.id, workspace, owner, name: self.name, description: self.description, default_branch: self.default_branch, visibility: self.visibility, status: self.status, is_fork: self.is_fork, forked_from_repo_id: self.forked_from_repo_id, storage_node_ids: self.storage_node_ids, primary_storage_node_id: self.primary_storage_node_id, storage_path: self.storage_path, git_service: self.git_service, archived_at: self.archived_at, created_at: self.created_at, updated_at: self.updated_at, deleted_at: self.deleted_at, topics: self.topics, homepage: self.homepage, has_issues: self.has_issues, has_wiki: self.has_wiki, has_pull_requests: self.has_pull_requests, allow_forking: self.allow_forking, allow_merge_commit: self.allow_merge_commit, allow_squash_merge: self.allow_squash_merge, allow_rebase_merge: self.allow_rebase_merge, delete_branch_on_merge: self.delete_branch_on_merge, } } }