feat: add models for physical files, policies, and user management

- Implement PhysicalFile model to manage physical file references and reference counting.
- Create Policy model with associated options and group links for storage policies.
- Introduce Redeem and Report models for handling redeem codes and reports.
- Add Settings model for site configuration and user settings management.
- Develop Share model for sharing objects with unique codes and associated metadata.
- Implement SourceLink model for managing download links associated with objects.
- Create StoragePack model for managing user storage packages.
- Add Tag model for user-defined tags with manual and automatic types.
- Implement Task model for managing background tasks with status tracking.
- Develop User model with comprehensive user management features including authentication.
- Introduce UserAuthn model for managing WebAuthn credentials.
- Create WebDAV model for managing WebDAV accounts associated with users.
This commit is contained in:
2026-02-10 16:25:49 +08:00
parent 62c671e07b
commit 209cb24ab4
92 changed files with 3640 additions and 1444 deletions

136
sqlmodels/setting.py Normal file
View File

@@ -0,0 +1,136 @@
from enum import StrEnum
from sqlmodel import UniqueConstraint
from .base import SQLModelBase
from .mixin import TableBaseMixin
from .user import UserResponse
class CaptchaType(StrEnum):
"""验证码类型枚举"""
DEFAULT = "default"
GCAPTCHA = "gcaptcha"
CLOUD_FLARE_TURNSTILE = "cloudflare turnstile"
# ==================== DTO 模型 ====================
class SiteConfigResponse(SQLModelBase):
"""站点配置响应 DTO"""
title: str = "DiskNext"
"""网站标题"""
site_notice: str | None = None
"""网站公告"""
user: UserResponse | None = None
"""用户信息"""
logo_light: str | None = None
"""网站Logo URL"""
logo_dark: str | None = None
"""网站Logo URL深色模式"""
register_enabled: bool = True
"""是否允许注册"""
login_captcha: bool = False
"""登录是否需要验证码"""
reg_captcha: bool = False
"""注册是否需要验证码"""
forget_captcha: bool = False
"""找回密码是否需要验证码"""
captcha_type: CaptchaType = CaptchaType.DEFAULT
"""验证码类型"""
captcha_key: str | None = None
"""验证码 public keyDEFAULT 类型时为 None"""
# ==================== 管理员设置 DTO ====================
class SettingItem(SQLModelBase):
"""单个设置项 DTO"""
type: str
"""设置类型"""
name: str
"""设置项名称"""
value: str | None = None
"""设置值"""
class SettingsListResponse(SQLModelBase):
"""获取设置列表响应 DTO"""
settings: list[SettingItem]
"""设置项列表"""
total: int
"""总数"""
class SettingsUpdateRequest(SQLModelBase):
"""更新设置请求 DTO"""
settings: list[SettingItem]
"""要更新的设置项列表"""
class SettingsUpdateResponse(SQLModelBase):
"""更新设置响应 DTO"""
updated: int
"""更新的设置项数量"""
created: int
"""新建的设置项数量"""
# ==================== 数据库模型 ====================
class SettingsType(StrEnum):
"""设置类型枚举"""
ARIA2 = "aria2"
AUTH = "auth"
AUTHN = "authn"
AVATAR = "avatar"
BASIC = "basic"
CAPTCHA = "captcha"
CRON = "cron"
FILE_EDIT = "file_edit"
LOGIN = "login"
MAIL = "mail"
MAIL_TEMPLATE = "mail_template"
MOBILE = "mobile"
OAUTH = "oauth"
PATH = "path"
PREVIEW = "preview"
PWA = "pwa"
REGISTER = "register"
RETRY = "retry"
SHARE = "share"
SLAVE = "slave"
TASK = "task"
THUMB = "thumb"
TIMEOUT = "timeout"
UPLOAD = "upload"
VERSION = "version"
VIEW = "view"
WOPI = "wopi"
# 数据库模型
class Setting(SettingItem, TableBaseMixin):
"""设置模型,继承 SettingItem 中的 name 和 value 字段"""
__table_args__ = (UniqueConstraint("type", "name", name="uq_setting_type_name"),)
type: SettingsType
"""设置类型/分组(覆盖基类的 str 类型为枚举类型)"""