개선관리 요구사항과 Google 로그인을 완료

This commit is contained in:
Yun Chan 2026-08-28 16:07:09 +09:00
parent cc0a15b7c6
commit 2a39636163
112 changed files with 10166 additions and 527 deletions

View file

@ -344,6 +344,7 @@ class AdminUserResponse(BaseModel):
display_name: str
role: RoleName
admin_access: bool
learner_feedback_enabled: bool
super_admin: bool = False
account_status: AccountStatus
cohort_ids: list[str]
@ -364,6 +365,7 @@ class AdminUserPatch(BaseModel):
display_name: str | None = Field(default=None, min_length=1, max_length=80)
role: RoleName | None = None
admin_access: bool | None = None
learner_feedback_enabled: bool | None = None
account_status: AccountStatus | None = None
affiliation: str | None = Field(default=None, max_length=120)
cohort_ids: list[str] | None = None
@ -1182,11 +1184,18 @@ def _usage_from_runtime_store(window_days: int) -> AdminUsageResponse:
class AdminUserCreate(BaseModel):
email: str = Field(..., min_length=3, max_length=254)
email: str = Field(
...,
min_length=3,
max_length=254,
pattern=r"^[^@\s]+@[^@\s]+\.[^@\s]+$",
)
display_name: str = Field(..., min_length=1, max_length=80)
role: RoleName = "learner"
admin_access: bool = False
account_status: AccountStatus = "approved"
learner_feedback_enabled: bool = True
# 외부 연구참여자는 exact-email 사전등록 뒤 별도 승인을 거치게 한다.
account_status: Literal["pending"] = "pending"
affiliation: str | None = Field(default=None, max_length=120)
cohort_ids: list[str] = Field(default_factory=list)
@ -1574,6 +1583,7 @@ async def _admin_user_response(user, *, durable: bool) -> AdminUserResponse:
display_name=user.display_name,
role=user.role,
admin_access=effective_admin_access,
learner_feedback_enabled=user.learner_feedback_enabled,
super_admin=is_super_admin_email(user.email),
account_status=user.account_status,
cohort_ids=user.cohort_ids,
@ -2171,6 +2181,7 @@ async def create_user(
display_name=body.display_name,
role=body.role,
admin_access=body.admin_access,
learner_feedback_enabled=body.learner_feedback_enabled,
account_status=body.account_status,
affiliation=body.affiliation,
cohort_ids=body.cohort_ids,
@ -2207,6 +2218,7 @@ async def patch_user(
display_name=body.display_name,
role=body.role,
admin_access=body.admin_access,
learner_feedback_enabled=body.learner_feedback_enabled,
account_status=body.account_status,
affiliation=body.affiliation,
cohort_ids=body.cohort_ids,