from datetime import datetime from ninja import Schema class LoginIn(Schema): username: str password: str class RoleOut(Schema): id: int name: str class UserGroupOut(Schema): id: int name: str code: str description: str = "" is_active: bool = True created_at: datetime | None = None updated_at: datetime | None = None class MenuOut(Schema): id: int code: str title: str path: str icon: str permission_code: str is_visible: bool is_enabled: bool children: list["MenuOut"] = [] class CurrentUserOut(Schema): id: int username: str display_name: str email: str is_superuser: bool roles: list[RoleOut] user_groups: list[UserGroupOut] permissions: list[str] menus: list[MenuOut] class BasicUserOut(Schema): id: int username: str display_name: str email: str is_active: bool is_staff: bool is_superuser: bool roles: list[RoleOut] = [] user_groups: list[UserGroupOut] = [] class UserCreateIn(Schema): username: str display_name: str = "" email: str = "" password: str is_active: bool = True class UserUpdateIn(Schema): display_name: str | None = None email: str | None = None is_active: bool | None = None class PasswordResetIn(Schema): password: str class IdsIn(Schema): user_ids: list[int] = [] role_ids: list[int] = [] class UserGroupCreateIn(Schema): name: str code: str description: str = "" is_active: bool = True class UserGroupUpdateIn(Schema): name: str | None = None description: str | None = None is_active: bool | None = None class PermissionOut(Schema): codename: str name: str module: str class RoleDetailOut(Schema): id: int name: str permission_codes: list[str] class RoleCreateIn(Schema): name: str permission_codes: list[str] = [] class RoleUpdateIn(Schema): name: str | None = None class PermissionCodesIn(Schema): permission_codes: list[str] class MenuUpdateIn(Schema): title: str | None = None path: str | None = None icon: str | None = None permission_code: str | None = None is_visible: bool | None = None is_enabled: bool | None = None sort_order: int | None = None