feat: 初始化项目架构

This commit is contained in:
insistence
2024-01-22 23:46:27 +08:00
parent 10b686ff0f
commit f0c38a87dc
347 changed files with 30398 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Optional, List, Any
class CacheMonitorModel(BaseModel):
"""
缓存监控信息对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel)
command_stats: Optional[List] = []
db_size: Optional[int] = None
info: Optional[dict] = {}
class CacheInfoModel(BaseModel):
"""
缓存监控对象对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel)
cache_key: Optional[str] = None
cache_name: Optional[str] = None
cache_value: Optional[Any] = None
remark: Optional[str] = None

View File

@@ -0,0 +1,9 @@
from pydantic import BaseModel
class CrudResponseModel(BaseModel):
"""
操作响应模型
"""
is_success: bool
message: str

View File

@@ -0,0 +1,50 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class ConfigModel(BaseModel):
"""
参数配置表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
config_id: Optional[int] = None
config_name: Optional[str] = None
config_key: Optional[str] = None
config_value: Optional[str] = None
config_type: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class ConfigQueryModel(ConfigModel):
"""
参数配置管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class ConfigPageQueryModel(ConfigQueryModel):
"""
参数配置管理分页查询模型
"""
page_num: int
page_size: int
class DeleteConfigModel(BaseModel):
"""
删除参数配置模型
"""
model_config = ConfigDict(alias_generator=to_camel)
config_ids: str

View File

@@ -0,0 +1,47 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query
class DeptModel(BaseModel):
"""
部门表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
dept_id: Optional[int] = None
parent_id: Optional[int] = None
ancestors: Optional[str] = None
dept_name: Optional[str] = None
order_num: Optional[int] = None
leader: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
status: Optional[str] = None
del_flag: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
@as_query
class DeptQueryModel(DeptModel):
"""
部门管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
class DeleteDeptModel(BaseModel):
"""
删除部门模型
"""
model_config = ConfigDict(alias_generator=to_camel)
dept_ids: str
update_by: Optional[str] = None
update_time: Optional[str] = None

View File

@@ -0,0 +1,98 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class DictTypeModel(BaseModel):
"""
字典类型表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
dict_id: Optional[int] = None
dict_name: Optional[str] = None
dict_type: Optional[str] = None
status: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class DictDataModel(BaseModel):
"""
字典数据表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
dict_code: Optional[int] = None
dict_sort: Optional[int] = None
dict_label: Optional[str] = None
dict_value: Optional[str] = None
dict_type: Optional[str] = None
css_class: Optional[str] = None
list_class: Optional[str] = None
is_default: Optional[str] = None
status: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class DictTypeQueryModel(DictTypeModel):
"""
字典类型管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class DictTypePageQueryModel(DictTypeQueryModel):
"""
字典类型管理分页查询模型
"""
page_num: int
page_size: int
class DeleteDictTypeModel(BaseModel):
"""
删除字典类型模型
"""
model_config = ConfigDict(alias_generator=to_camel)
dict_ids: str
class DictDataQueryModel(DictTypeModel):
"""
字典数据管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class DictDataPageQueryModel(DictDataQueryModel):
"""
字典数据管理分页查询模型
"""
page_num: int
page_size: int
class DeleteDictDataModel(BaseModel):
"""
删除字典数据模型
"""
model_config = ConfigDict(alias_generator=to_camel)
dict_codes: str

View File

@@ -0,0 +1,110 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class JobModel(BaseModel):
"""
定时任务调度表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
job_id: Optional[int] = None
job_name: Optional[str] = None
job_group: Optional[str] = None
job_executor: Optional[str] = None
invoke_target: Optional[str] = None
job_args: Optional[str] = None
job_kwargs: Optional[str] = None
cron_expression: Optional[str] = None
misfire_policy: Optional[str] = None
concurrent: Optional[str] = None
status: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class JobLogModel(BaseModel):
"""
定时任务调度日志表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
job_log_id: Optional[int] = None
job_name: Optional[str] = None
job_group: Optional[str] = None
job_executor: Optional[str] = None
invoke_target: Optional[str] = None
job_args: Optional[str] = None
job_kwargs: Optional[str] = None
job_trigger: Optional[str] = None
job_message: Optional[str] = None
status: Optional[str] = None
exception_info: Optional[str] = None
create_time: Optional[datetime] = None
class JobQueryModel(JobModel):
"""
定时任务管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class JobPageQueryModel(JobQueryModel):
"""
定时任务管理分页查询模型
"""
page_num: int
page_size: int
class EditJobModel(JobModel):
"""
编辑定时任务模型
"""
type: Optional[str] = None
class DeleteJobModel(BaseModel):
"""
删除定时任务模型
"""
model_config = ConfigDict(alias_generator=to_camel)
job_ids: str
class JobLogQueryModel(JobLogModel):
"""
定时任务日志不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class JobLogPageQueryModel(JobLogQueryModel):
"""
定时任务日志管理分页查询模型
"""
page_num: int
page_size: int
class DeleteJobLogModel(BaseModel):
"""
删除定时任务日志模型
"""
model_config = ConfigDict(alias_generator=to_camel)
job_log_ids: str

View File

@@ -0,0 +1,111 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class OperLogModel(BaseModel):
"""
操作日志表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
oper_id: Optional[int] = None
title: Optional[str] = None
business_type: Optional[int] = None
method: Optional[str] = None
request_method: Optional[str] = None
operator_type: Optional[int] = None
oper_name: Optional[str] = None
dept_name: Optional[str] = None
oper_url: Optional[str] = None
oper_ip: Optional[str] = None
oper_location: Optional[str] = None
oper_param: Optional[str] = None
json_result: Optional[str] = None
status: Optional[int] = None
error_msg: Optional[str] = None
oper_time: Optional[datetime] = None
cost_time: Optional[int] = None
class LogininforModel(BaseModel):
"""
登录日志表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
info_id: Optional[int] = None
user_name: Optional[str] = None
ipaddr: Optional[str] = None
login_location: Optional[str] = None
browser: Optional[str] = None
os: Optional[str] = None
status: Optional[str] = None
msg: Optional[str] = None
login_time: Optional[datetime] = None
class OperLogQueryModel(OperLogModel):
"""
操作日志管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class OperLogPageQueryModel(OperLogQueryModel):
"""
操作日志管理分页查询模型
"""
page_num: int
page_size: int
class DeleteOperLogModel(BaseModel):
"""
删除操作日志模型
"""
model_config = ConfigDict(alias_generator=to_camel)
oper_ids: str
class LoginLogQueryModel(LogininforModel):
"""
登录日志管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class LoginLogPageQueryModel(LoginLogQueryModel):
"""
登录日志管理分页查询模型
"""
page_num: int
page_size: int
class DeleteLoginLogModel(BaseModel):
"""
删除登录日志模型
"""
model_config = ConfigDict(alias_generator=to_camel)
info_ids: str
class UnlockUser(BaseModel):
"""
解锁用户模型
"""
model_config = ConfigDict(alias_generator=to_camel)
user_name: str

View File

@@ -0,0 +1,34 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Optional
class UserLogin(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
user_name: str
password: str
code: Optional[str] = None
uuid: Optional[str] = None
login_info: Optional[dict] = None
captcha_enabled: Optional[bool] = None
class Token(BaseModel):
access_token: str
token_type: str
class CaptchaCode(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
captcha_enabled: bool
img: str
uuid: str
class SmsCode(BaseModel):
is_success: Optional[bool] = None
sms_code: str
session_id: str
message: Optional[str] = None

View File

@@ -0,0 +1,50 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from datetime import datetime
from typing import Union, Optional, List
from module_admin.annotation.pydantic_annotation import as_query
class MenuModel(BaseModel):
"""
菜单表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
menu_id: Optional[int] = None
menu_name: Optional[str] = None
parent_id: Optional[int] = None
order_num: Optional[int] = None
path: Optional[str] = None
component: Optional[str] = None
query: Optional[str] = None
is_frame: Optional[int] = None
is_cache: Optional[int] = None
menu_type: Optional[str] = None
visible: Optional[str] = None
status: Optional[str] = None
perms: Optional[str] = None
icon: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
@as_query
class MenuQueryModel(MenuModel):
"""
菜单管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
class DeleteMenuModel(BaseModel):
"""
删除菜单模型
"""
model_config = ConfigDict(alias_generator=to_camel)
menu_ids: str

View File

@@ -0,0 +1,50 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class NoticeModel(BaseModel):
"""
通知公告表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
notice_id: Optional[int] = None
notice_title: Optional[str] = None
notice_type: Optional[str] = None
notice_content: Optional[bytes] = None
status: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class NoticeQueryModel(NoticeModel):
"""
通知公告管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class NoticePageQueryModel(NoticeQueryModel):
"""
通知公告管理分页查询模型
"""
page_num: int
page_size: int
class DeleteNoticeModel(BaseModel):
"""
删除通知公告模型
"""
model_config = ConfigDict(alias_generator=to_camel)
notice_ids: str

View File

@@ -0,0 +1,39 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query
class OnlineModel(BaseModel):
"""
在线用户对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel)
token_id: Optional[str] = None
user_name: Optional[str] = None
dept_name: Optional[str] = None
ipaddr: Optional[str] = None
login_location: Optional[str] = None
browser: Optional[str] = None
os: Optional[str] = None
login_time: Optional[datetime] = None
@as_query
class OnlineQueryModel(OnlineModel):
"""
岗位管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
class DeleteOnlineModel(BaseModel):
"""
强退在线用户模型
"""
model_config = ConfigDict(alias_generator=to_camel)
token_ids: str

View File

@@ -0,0 +1,50 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class PostModel(BaseModel):
"""
岗位信息表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
post_id: Optional[int] = None
post_code: Optional[str] = None
post_name: Optional[str] = None
post_sort: Optional[int] = None
status: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
class PostQueryModel(PostModel):
"""
岗位管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class PostPageQueryModel(PostQueryModel):
"""
岗位管理分页查询模型
"""
page_num: int
page_size: int
class DeletePostModel(BaseModel):
"""
删除岗位模型
"""
model_config = ConfigDict(alias_generator=to_camel)
post_ids: str

View File

@@ -0,0 +1,127 @@
from pydantic import BaseModel, ConfigDict, field_validator, model_validator
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
class RoleModel(BaseModel):
"""
角色表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
role_id: Optional[int] = None
role_name: Optional[str] = None
role_key: Optional[str] = None
role_sort: Optional[int] = None
data_scope: Optional[str] = None
menu_check_strictly: Optional[Union[int, bool]] = None
dept_check_strictly: Optional[Union[int, bool]] = None
status: Optional[str] = None
del_flag: Optional[str] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
admin: Optional[bool] = False
@field_validator('menu_check_strictly', 'dept_check_strictly')
@classmethod
def check_filed_mapping(cls, v: Union[int, bool]) -> Union[int, bool]:
if v == 1:
v = True
elif v == 0:
v = False
elif v is True:
v = 1
elif v is False:
v = 0
return v
@model_validator(mode='after')
def check_admin(self) -> 'RoleModel':
if self.role_id == 1:
self.admin = True
else:
self.admin = False
return self
class RoleMenuModel(BaseModel):
"""
角色和菜单关联表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
role_id: Optional[int] = None
menu_id: Optional[int] = None
class RoleDeptModel(BaseModel):
"""
角色和部门关联表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
role_id: Optional[int] = None
dept_id: Optional[int] = None
class RoleQueryModel(RoleModel):
"""
角色管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class RolePageQueryModel(RoleQueryModel):
"""
角色管理分页查询模型
"""
page_num: int
page_size: int
class RoleMenuQueryModel(BaseModel):
"""
角色菜单查询模型
"""
model_config = ConfigDict(alias_generator=to_camel)
menus: List = []
checked_keys: List[int] = []
class RoleDeptQueryModel(BaseModel):
"""
角色部门查询模型
"""
model_config = ConfigDict(alias_generator=to_camel)
depts: List = []
checked_keys: List[int] = []
class AddRoleModel(RoleModel):
"""
新增角色模型
"""
dept_ids: List = []
menu_ids: List = []
type: Optional[str] = None
class DeleteRoleModel(BaseModel):
"""
删除角色模型
"""
model_config = ConfigDict(alias_generator=to_camel)
role_ids: str
update_by: Optional[str] = None
update_time: Optional[datetime] = None

View File

@@ -0,0 +1,66 @@
from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel
from typing import Optional, List
class CpuInfo(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
cpu_num: Optional[int] = None
used: Optional[float] = None
sys: Optional[float] = None
free: Optional[float] = None
class MemoryInfo(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
total: Optional[str] = None
used: Optional[str] = None
free: Optional[str] = None
usage: Optional[float] = None
class SysInfo(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
computer_ip: Optional[str] = None
computer_name: Optional[str] = None
os_arch: Optional[str] = None
os_name: Optional[str] = None
user_dir: Optional[str] = None
class PyInfo(MemoryInfo):
model_config = ConfigDict(alias_generator=to_camel)
name: Optional[str] = None
version: Optional[str] = None
start_time: Optional[str] = None
run_time: Optional[str] = None
home: Optional[str] = None
class SysFiles(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
dir_name: Optional[str] = None
sys_type_name: Optional[str] = None
type_name: Optional[str] = None
total: Optional[str] = None
used: Optional[str] = None
free: Optional[str] = None
usage: Optional[str] = None
class ServerMonitorModel(BaseModel):
"""
服务监控对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel)
cpu: Optional[CpuInfo]
py: Optional[PyInfo]
mem: Optional[MemoryInfo]
sys: Optional[SysInfo]
sys_files: Optional[List[SysFiles]]

View File

@@ -0,0 +1,210 @@
from pydantic import BaseModel, ConfigDict, model_validator
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List
from datetime import datetime
from module_admin.entity.vo.role_vo import RoleModel
from module_admin.entity.vo.dept_vo import DeptModel
from module_admin.entity.vo.post_vo import PostModel
from module_admin.annotation.pydantic_annotation import as_query, as_form
class TokenData(BaseModel):
"""
token解析结果
"""
user_id: Union[int, None] = None
class UserModel(BaseModel):
"""
用户表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
user_id: Optional[int] = None
dept_id: Optional[int] = None
user_name: Optional[str] = None
nick_name: Optional[str] = None
user_type: Optional[str] = None
email: Optional[str] = None
phonenumber: Optional[str] = None
sex: Optional[str] = None
avatar: Optional[str] = None
password: Optional[str] = None
status: Optional[str] = None
del_flag: Optional[str] = None
login_ip: Optional[str] = None
login_date: Optional[datetime] = None
create_by: Optional[str] = None
create_time: Optional[datetime] = None
update_by: Optional[str] = None
update_time: Optional[datetime] = None
remark: Optional[str] = None
admin: Optional[bool] = False
@model_validator(mode='after')
def check_admin(self) -> 'UserModel':
if self.user_id == 1:
self.admin = True
else:
self.admin = False
return self
class UserRoleModel(BaseModel):
"""
用户和角色关联表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
user_id: Optional[int] = None
role_id: Optional[int] = None
class UserPostModel(BaseModel):
"""
用户与岗位关联表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
user_id: Optional[int] = None
post_id: Optional[int] = None
class UserInfoModel(UserModel):
post_ids: Optional[Union[str, None]] = None
role_ids: Optional[Union[str, None]] = None
dept: Optional[Union[DeptModel, None]] = None
role: Optional[List[Union[RoleModel, None]]] = []
class CurrentUserModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel)
permissions: List
roles: List
user: Union[UserInfoModel, None]
class UserDetailModel(BaseModel):
"""
获取用户详情信息响应模型
"""
model_config = ConfigDict(alias_generator=to_camel)
data: Optional[Union[UserInfoModel, None]] = None
post_ids: Optional[List] = None
posts: List[Union[PostModel, None]]
role_ids: Optional[List] = None
roles: List[Union[RoleModel, None]]
class UserProfileModel(BaseModel):
"""
获取个人信息响应模型
"""
model_config = ConfigDict(alias_generator=to_camel)
data: Union[UserInfoModel, None]
post_group: Union[str, None]
role_group: Union[str, None]
class UserQueryModel(UserModel):
"""
用户管理不分页查询模型
"""
begin_time: Optional[str] = None
end_time: Optional[str] = None
@as_query
@as_form
class UserPageQueryModel(UserQueryModel):
"""
用户管理分页查询模型
"""
page_num: int
page_size: int
class AddUserModel(UserModel):
"""
新增用户模型
"""
role_ids: Optional[List] = []
post_ids: Optional[List] = []
type: Optional[str] = None
class EditUserModel(AddUserModel):
"""
编辑用户模型
"""
role: Optional[List] = []
class ResetUserModel(UserModel):
"""
重置用户密码模型
"""
old_password: Optional[str] = None
sms_code: Optional[str] = None
session_id: Optional[str] = None
class DeleteUserModel(BaseModel):
"""
删除用户模型
"""
model_config = ConfigDict(alias_generator=to_camel)
user_ids: str
update_by: Optional[str] = None
update_time: Optional[datetime] = None
class UserRoleQueryModel(UserModel):
"""
用户角色关联管理不分页查询模型
"""
role_id: Optional[int] = None
@as_query
class UserRolePageQueryModel(UserRoleQueryModel):
"""
用户角色关联管理分页查询模型
"""
page_num: int
page_size: int
class SelectedRoleModel(RoleModel):
"""
是否选择角色模型
"""
flag: Optional[bool] = False
class UserRoleResponseModel(BaseModel):
"""
用户角色关联管理列表返回模型
"""
model_config = ConfigDict(alias_generator=to_camel)
roles: List[Union[SelectedRoleModel, None]] = []
user: UserInfoModel
@as_query
class CrudUserRoleModel(BaseModel):
"""
新增、删除用户关联角色及角色关联用户模型
"""
model_config = ConfigDict(alias_generator=to_camel)
user_id: Optional[int] = None
user_ids: Optional[str] = None
role_id: Optional[int] = None
role_ids: Optional[str] = None