Step 3:Study / Site / StudyMember + 项目权限

This commit is contained in:
Cheng Zhou
2025-12-16 16:42:42 +08:00
parent 65df698570
commit f3692e1145
66 changed files with 639 additions and 6 deletions
+29
View File
@@ -0,0 +1,29 @@
import uuid
from datetime import datetime
from typing import Literal, Optional
from pydantic import BaseModel, ConfigDict, Field
StudyRole = Literal["PM", "CRA", "PV", "IMP"]
class StudyMemberCreate(BaseModel):
user_id: uuid.UUID
role_in_study: StudyRole
is_active: bool = True
class StudyMemberUpdate(BaseModel):
role_in_study: Optional[StudyRole] = None
is_active: Optional[bool] = None
class StudyMemberRead(BaseModel):
id: uuid.UUID
study_id: uuid.UUID
user_id: uuid.UUID
role_in_study: StudyRole
is_active: bool
added_at: datetime
model_config = ConfigDict(from_attributes=True)
+34
View File
@@ -0,0 +1,34 @@
import uuid
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
class SiteCreate(BaseModel):
name: str = Field(min_length=1)
city: Optional[str] = None
pi_name: Optional[str] = None
contact: Optional[str] = None
is_active: bool = True
class SiteUpdate(BaseModel):
name: Optional[str] = None
city: Optional[str] = None
pi_name: Optional[str] = None
contact: Optional[str] = None
is_active: Optional[bool] = None
class SiteRead(BaseModel):
id: uuid.UUID
study_id: uuid.UUID
name: str
city: Optional[str]
pi_name: Optional[str]
contact: Optional[str]
is_active: bool
created_at: datetime
model_config = ConfigDict(from_attributes=True)
+39
View File
@@ -0,0 +1,39 @@
import uuid
from datetime import datetime
from typing import Literal, Optional
from pydantic import BaseModel, ConfigDict, Field
StudyStatus = Literal["DRAFT", "ACTIVE", "CLOSED"]
class StudyCreate(BaseModel):
code: str = Field(min_length=1)
name: str = Field(min_length=1)
sponsor: Optional[str] = None
protocol_no: Optional[str] = None
phase: Optional[str] = None
status: StudyStatus = "DRAFT"
class StudyUpdate(BaseModel):
code: Optional[str] = None
name: Optional[str] = None
sponsor: Optional[str] = None
protocol_no: Optional[str] = None
phase: Optional[str] = None
status: Optional[StudyStatus] = None
class StudyRead(BaseModel):
id: uuid.UUID
code: str
name: str
sponsor: Optional[str]
protocol_no: Optional[str]
phase: Optional[str]
status: StudyStatus
created_by: Optional[uuid.UUID]
created_at: datetime
model_config = ConfigDict(from_attributes=True)