# api/models.py from __future__ import annotations from typing import List, Optional, Literal from pydantic import BaseModel, Field class PersonContact(BaseModel): name: str = "N/A" email: str = "" class CourseDirectoryItem(BaseModel): id: str name: str instructor: PersonContact = Field(default_factory=PersonContact) teachingAssistant: PersonContact = Field(default_factory=PersonContact) class WorkspaceMember(BaseModel): id: str name: str email: Optional[str] = "" role: Optional[Literal["owner", "member"]] = "member" class WorkspaceCourseRef(BaseModel): id: Optional[str] = None name: Optional[str] = None instructor: Optional[PersonContact] = None teachingAssistant: Optional[PersonContact] = None class Workspace(BaseModel): id: str type: Literal["individual", "group"] category: Optional[Literal["course", "personal"]] = None # ✅ Group Name:前端要编辑的 groupName 就用 name name: Optional[str] = None # ✅ Group # groupNo: Optional[int] = None # ✅ Members members: List[WorkspaceMember] = Field(default_factory=list) # ✅ Course binding courseId: Optional[str] = None courseInfo: Optional[WorkspaceCourseRef] = None