from datetime import datetime from pydantic import BaseModel, ConfigDict class LoginIn(BaseModel): username: str password: str class TokenOut(BaseModel): access_token: str token_type: str = "bearer" class UserBase(BaseModel): email: str username: str nickname: str = "" status: str = "enabled" is_superuser: bool = False class UserCreate(UserBase): password: str = "123456" class UserUpdate(BaseModel): email: str | None = None username: str | None = None nickname: str | None = None status: str | None = None is_superuser: bool | None = None password: str | None = None class UserOut(UserBase): id: str created_at: datetime model_config = ConfigDict(from_attributes=True) class RoleBase(BaseModel): name: str code: str description: str = "" status: str = "enabled" class RoleOut(RoleBase): id: str created_at: datetime model_config = ConfigDict(from_attributes=True) class PermissionBase(BaseModel): name: str code: str resource: str = "" action: str = "" class PermissionOut(PermissionBase): id: str created_at: datetime model_config = ConfigDict(from_attributes=True) class MenuBase(BaseModel): parent_id: str | None = None title: str path: str = "" icon: str = "" permission_code: str = "" visible: bool = True class MenuOut(MenuBase): id: str created_at: datetime model_config = ConfigDict(from_attributes=True) class AnnouncementBase(BaseModel): title: str content: str = "" status: str = "draft" class AnnouncementOut(AnnouncementBase): id: str created_at: datetime model_config = ConfigDict(from_attributes=True)