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 last_login: datetime | None = None date_joined: datetime 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 ProfileUpdateIn(Schema): display_name: str | None = None email: str | None = None class PasswordChangeIn(Schema): current_password: str new_password: str class ProfileActivityOut(Schema): id: int ticket_id: int ticket_no: str ticket_title: str event_type: str created_at: datetime class ProfileStatsOut(Schema): created_total: int active_assigned: int completed_30d: int completion_rate: float recent_activity: list[ProfileActivityOut] = [] 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