2026-04-12 00:03:30 +08:00
|
|
|
from datetime import datetime
|
|
|
|
|
from typing import Literal
|
|
|
|
|
|
2026-04-24 15:50:52 +08:00
|
|
|
from pydantic import BaseModel, Field, field_validator
|
2026-04-12 00:03:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserPublic(BaseModel):
|
|
|
|
|
id: str
|
2026-04-24 15:50:52 +08:00
|
|
|
email: str
|
2026-04-12 00:03:30 +08:00
|
|
|
username: str
|
|
|
|
|
status: str
|
|
|
|
|
role_codes: list[str]
|
|
|
|
|
permission_codes: list[str]
|
|
|
|
|
created_at: datetime
|
|
|
|
|
last_login_at: datetime | None = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserListResponse(BaseModel):
|
|
|
|
|
items: list[UserPublic]
|
|
|
|
|
total: int
|
|
|
|
|
|
|
|
|
|
|
2026-06-19 11:04:28 +08:00
|
|
|
class UserIdCheckResponse(BaseModel):
|
|
|
|
|
available: bool
|
|
|
|
|
message: str
|
|
|
|
|
|
|
|
|
|
|
2026-04-12 00:03:30 +08:00
|
|
|
class UserUpdateRequest(BaseModel):
|
2026-05-01 14:15:17 +08:00
|
|
|
email: str | None = None
|
2026-04-12 00:03:30 +08:00
|
|
|
username: str | None = Field(default=None, min_length=3, max_length=64)
|
2026-04-24 15:50:52 +08:00
|
|
|
status: Literal["active", "disabled", "enabled"] | None = None
|
2026-04-12 00:03:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserRoleUpdateRequest(BaseModel):
|
|
|
|
|
role_codes: list[str] = Field(min_length=1)
|
2026-04-17 21:55:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserPasswordResetRequest(BaseModel):
|
|
|
|
|
new_password: str = Field(min_length=8, max_length=128)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserCreateRequest(BaseModel):
|
|
|
|
|
user_id: str = Field(min_length=3, max_length=64)
|
2026-06-18 00:34:03 +08:00
|
|
|
email: str | None = None
|
2026-04-17 21:55:27 +08:00
|
|
|
username: str = Field(min_length=3, max_length=64)
|
|
|
|
|
password: str = Field(min_length=8, max_length=128)
|
|
|
|
|
|
|
|
|
|
@field_validator("user_id")
|
|
|
|
|
@classmethod
|
|
|
|
|
def validate_user_id(cls, value: str) -> str:
|
|
|
|
|
normalized = value.strip()
|
|
|
|
|
if not normalized:
|
|
|
|
|
raise ValueError("user_id cannot be empty")
|
|
|
|
|
return normalized
|