hku-class-hub/backend/app/schemas/user.py
2026-04-11 12:52:23 +08:00

85 lines
1.8 KiB
Python

import json
from datetime import datetime
from pydantic import BaseModel, EmailStr, field_validator
class UserOut(BaseModel):
id: int
email: str
name: str
student_id: str | None
role: str
status: str
class_id: int | None
industry: str | None
company: str | None
position: str | None
skills_tags: list[str] | None
wechat_id: str | None
avatar_url: str | None
bio: str | None
created_at: datetime
model_config = {"from_attributes": True}
@field_validator("skills_tags", mode="before")
@classmethod
def parse_skills_tags(cls, v):
if isinstance(v, str):
try:
return json.loads(v)
except (json.JSONDecodeError, TypeError):
return []
return v
class UserPublic(BaseModel):
"""Shown to same-class approved members (includes contact info)."""
id: int
name: str
student_id: str | None
industry: str | None
company: str | None
position: str | None
skills_tags: list[str] | None
wechat_id: str | None
avatar_url: str | None
bio: str | None
class UserListItem(BaseModel):
"""For admin user management list."""
id: int
email: str
name: str
student_id: str | None
role: str
status: str
class_id: int | None
industry: str | None
company: str | None
created_at: datetime
model_config = {"from_attributes": True}
class UserUpdate(BaseModel):
name: str | None = None
industry: str | None = None
company: str | None = None
position: str | None = None
skills_tags: list[str] | None = None
wechat_id: str | None = None
bio: str | None = None
class UserStatusUpdate(BaseModel):
status: str # approved | rejected | disabled
role: str | None = None
class TokenResponse(BaseModel):
token: str
user: UserOut