use crate::models::base_info::UserBaseInfo; use crate::models::common::{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 Workspace { pub id: Uuid, pub owner_id: Uuid, pub name: String, pub description: Option, pub avatar_url: Option, pub visibility: Visibility, pub plan: String, pub status: Status, pub default_role: String, pub is_personal: bool, pub archived_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)] pub struct WorkspaceDetail { pub id: Uuid, pub owner: UserBaseInfo, pub name: String, pub description: Option, pub avatar_url: Option, pub visibility: Visibility, pub plan: String, pub status: Status, pub default_role: String, pub is_personal: bool, pub archived_at: Option>, pub created_at: DateTime, pub updated_at: DateTime, pub deleted_at: Option>, } impl Workspace { pub fn into_detail(self, owner: UserBaseInfo) -> WorkspaceDetail { WorkspaceDetail { id: self.id, owner, name: self.name, description: self.description, avatar_url: self.avatar_url, visibility: self.visibility, plan: self.plan, status: self.status, default_role: self.default_role, is_personal: self.is_personal, archived_at: self.archived_at, created_at: self.created_at, updated_at: self.updated_at, deleted_at: self.deleted_at, } } }