from pydantic import BaseModel, Field class RoleCreate(BaseModel): code: str = Field(min_length=1, max_length=60) name: str = Field(min_length=1, max_length=80) description: str | None = None permission_codes: list[str] = [] class RoleUpdate(BaseModel): name: str | None = None description: str | None = None permission_codes: list[str] | None = None class RoleResponse(BaseModel): id: int code: str name: str description: str | None user_count: int permission_codes: list[str] class PermissionCreate(BaseModel): code: str = Field(min_length=1, max_length=120) name: str = Field(min_length=1, max_length=120) module: str = Field(min_length=1, max_length=60) class PermissionUpdate(BaseModel): name: str | None = None module: str | None = None class PermissionResponse(BaseModel): id: int code: str name: str module: str class PermissionGroup(BaseModel): module: str items: list[PermissionResponse]