160 lines
2.8 KiB
Python
160 lines
2.8 KiB
Python
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
|