You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iTi-System/iti_system/schemas.py

432 lines
10 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import Field
from iti.schemas import ItiModel
from iti_system.enums import GenderEnum, LogType, MenuTypeEnum, StatusEnum
class PageQuery(ItiModel):
page: int = 1
size: int = 10
class UserOut(ItiModel):
id: str
username: str
phone: str | None = None
email: str | None = None
realname: str | None = None
desc: str | None = None
avatar: str | None = None
gender: str = GenderEnum.SECURE.value
status: str = StatusEnum.ENABLED.value
roles: list[str] = Field(default_factory=list)
depts: list[str] = Field(default_factory=list)
permissions: list[str] = Field(default_factory=list)
attributes: dict[str, dict[str, Any]] = Field(default_factory=dict)
created_at: datetime | None = None
updated_at: datetime | None = None
class UserQuery(PageQuery):
keyword: str | None = None
username: str | None = None
phone: str | None = None
email: str | None = None
realname: str | None = None
gender: str | None = None
status: str | None = None
class UserCreate(ItiModel):
username: str
password: str | None = None
phone: str | None = None
email: str | None = None
realname: str | None = None
desc: str | None = None
avatar: str | None = None
gender: str = GenderEnum.SECURE.value
status: str = StatusEnum.ENABLED.value
roles: list[str] = Field(default_factory=list)
depts: list[str] = Field(default_factory=list)
class UserUpdate(ItiModel):
username: str | None = None
phone: str | None = None
email: str | None = None
realname: str | None = None
desc: str | None = None
avatar: str | None = None
gender: str | None = None
status: str | None = None
roles: list[str] | None = None
depts: list[str] | None = None
class PasswordLogin(ItiModel):
username: str | None = None
phone: str | None = None
email: str | None = None
password: str
auto_register: bool = False
class CodeLogin(ItiModel):
phone: str | None = None
email: str | None = None
code: str
auto_register: bool = False
class RegisterIn(ItiModel):
username: str | None = None
password: str | None = None
phone: str | None = None
email: str | None = None
code: str | None = None
realname: str | None = None
avatar: str | None = None
gender: str = GenderEnum.SECURE.value
status: str = StatusEnum.ENABLED.value
auto_login: bool = True
class SendVerificationCodeIn(ItiModel):
phone: str | None = None
email: str | None = None
usage: str = "login"
class PasswordUpdate(ItiModel):
old_password: str | None = None
new_password: str
code: str | None = None
type: str = "updateByOldPassword"
class RoleOut(ItiModel):
id: str
name: str
code: str
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
permissions: list[str] = Field(default_factory=list)
created_at: datetime | None = None
updated_at: datetime | None = None
class RoleQuery(PageQuery):
keyword: str | None = None
name: str | None = None
code: str | None = None
status: str | None = None
class RoleCreate(ItiModel):
name: str
code: str
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
permissions: list[str] = Field(default_factory=list)
class RoleUpdate(ItiModel):
name: str | None = None
code: str | None = None
desc: str | None = None
sort: int | None = None
status: str | None = None
permissions: list[str] | None = None
class MenuOut(ItiModel):
id: str
name: str
type: str = MenuTypeEnum.MENU.value
path: str | None = None
component: str | None = None
redirect: str | None = None
sort: int = 0
auth_code: str | None = None
meta: dict[str, Any] | None = None
status: str = StatusEnum.ENABLED.value
parent_id: str | None = None
children: list["MenuOut"] = Field(default_factory=list)
created_at: datetime | None = None
updated_at: datetime | None = None
class MenuCreate(ItiModel):
id: str | None = None
name: str
type: str = MenuTypeEnum.MENU.value
path: str | None = None
component: str | None = None
redirect: str | None = None
sort: int = 0
auth_code: str | None = None
meta: dict[str, Any] | None = None
status: str = StatusEnum.ENABLED.value
parent_id: str | None = None
class MenuUpdate(ItiModel):
name: str | None = None
type: str | None = None
path: str | None = None
component: str | None = None
redirect: str | None = None
sort: int | None = None
auth_code: str | None = None
meta: dict[str, Any] | None = None
status: str | None = None
parent_id: str | None = None
class DeptOut(ItiModel):
id: str
name: str
parent_id: str | None = None
desc: str | None = None
sort: int = 0
leader_id: str | None = None
status: str = StatusEnum.ENABLED.value
children: list["DeptOut"] = Field(default_factory=list)
created_at: datetime | None = None
updated_at: datetime | None = None
class DeptQuery(PageQuery):
keyword: str | None = None
name: str | None = None
status: str | None = None
class DeptCreate(ItiModel):
name: str
parent_id: str | None = None
desc: str | None = None
sort: int = 0
leader_id: str | None = None
status: str = StatusEnum.ENABLED.value
class DeptUpdate(ItiModel):
name: str | None = None
parent_id: str | None = None
desc: str | None = None
sort: int | None = None
leader_id: str | None = None
status: str | None = None
class ConfigOut(ItiModel):
id: str
type: str
name: str
code: str
value: str | None = None
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
created_at: datetime | None = None
updated_at: datetime | None = None
class ConfigQuery(PageQuery):
keyword: str | None = None
type: str | None = None
code: str | None = None
status: str | None = None
class ConfigCreate(ItiModel):
type: str = "SYSTEM"
name: str
code: str
value: str | None = None
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
class ConfigUpdate(ItiModel):
type: str | None = None
name: str | None = None
code: str | None = None
value: str | None = None
desc: str | None = None
sort: int | None = None
status: str | None = None
class DictTypeOut(ItiModel):
id: str
type_name: str
type_code: str
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
data_list: list["DictDataOut"] = Field(default_factory=list)
created_at: datetime | None = None
updated_at: datetime | None = None
class DictDataOut(ItiModel):
id: str
type_code: str
label: str
code: str
value: str | None = None
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
created_at: datetime | None = None
updated_at: datetime | None = None
class DictTypeQuery(PageQuery):
keyword: str | None = None
type_code: str | None = None
status: str | None = None
class DictDataQuery(PageQuery):
keyword: str | None = None
type_code: str | None = None
code: str | None = None
status: str | None = None
class DictTypeCreate(ItiModel):
type_name: str
type_code: str
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
class DictTypeUpdate(ItiModel):
type_name: str | None = None
type_code: str | None = None
desc: str | None = None
sort: int | None = None
status: str | None = None
class DictDataCreate(ItiModel):
type_code: str
label: str
code: str
value: str | None = None
desc: str | None = None
sort: int = 0
status: str = StatusEnum.ENABLED.value
class DictDataUpdate(ItiModel):
type_code: str | None = None
label: str | None = None
code: str | None = None
value: str | None = None
desc: str | None = None
sort: int | None = None
status: str | None = None
class LogOut(ItiModel):
id: str
name: str | None = None
method: str | None = None
user_id: str | None = None
path: str | None = None
ip: str | None = None
user_agent: str | None = None
execution_time: float | None = None
success: bool | None = None
desc: str | None = None
type: str = LogType.OPERATION.value
created_at: datetime | None = None
updated_at: datetime | None = None
class LogQuery(PageQuery):
keyword: str | None = None
user_id: str | None = None
type: str | None = None
success: bool | None = None
class AuditEventIn(ItiModel):
type: str = LogType.OPERATION.value
title: str
success: bool = True
actor_id: str | None = None
actor_type: str | None = None
method: str | None = None
path: str | None = None
ip: str | None = None
user_agent: str | None = None
target_type: str | None = None
target_id: str | None = None
diff: dict[str, Any] | None = None
desc: str | None = None
error: str | None = None
trace_id: str | None = None
occurred_at: datetime | None = None
class AuditEventsIn(ItiModel):
events: list[AuditEventIn] = Field(default_factory=list)
class FileOut(ItiModel):
id: str
filename: str
file_key: str
file_hash: str | None = None
mime_type: str | None = None
file_size: int = 0
extension: str | None = None
storage_type: str = "local"
storage_info: dict[str, Any] | None = None
directory_id: str | None = None
metadata_: dict[str, Any] | None = Field(default=None, serialization_alias="metadata")
is_deleted: bool = False
share_code: str | None = None
share_expire_at: datetime | None = None
share_count: int = 0
status: str = StatusEnum.ENABLED.value
url: str | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
class FileShareIn(ItiModel):
password: str | None = None
expires_seconds: int | None = None
class AttributeSet(ItiModel):
attributes: dict[str, dict[str, Any]]
class AttributeItem(ItiModel):
value: Any = None
attr_type: str = "string"
description: str | None = None
sort: int = 0
class AttributeBatch(ItiModel):
items: dict[str, dict[str, Any]]