添加Github登录,优化数据库模型
This commit is contained in:
@@ -213,7 +213,7 @@ async def init_default_user() -> None:
|
||||
admin_user = User(
|
||||
email="admin@yxqi.cn",
|
||||
nick="admin",
|
||||
status=0, # 正常状态
|
||||
status=True, # 正常状态
|
||||
group_id=admin_group.id,
|
||||
password=hashed_admin_password,
|
||||
)
|
||||
|
||||
@@ -29,4 +29,11 @@ class Policy(BaseModel, table=True):
|
||||
|
||||
# 关系
|
||||
files: List["File"] = Relationship(back_populates="policy")
|
||||
folders: List["Folder"] = Relationship(back_populates="policy")
|
||||
folders: List["Folder"] = Relationship(back_populates="policy")
|
||||
|
||||
@staticmethod
|
||||
async def create(
|
||||
policy: Optional["Policy"] = None,
|
||||
**kwargs
|
||||
):
|
||||
pass
|
||||
17
models/request.py
Normal file
17
models/request.py
Normal file
@@ -0,0 +1,17 @@
|
||||
"""
|
||||
请求模型定义
|
||||
"""
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Literal, Union, Optional
|
||||
from datetime import datetime, timezone
|
||||
from uuid import uuid4
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
"""
|
||||
登录请求模型
|
||||
"""
|
||||
username: str = Field(..., description="用户名或邮箱")
|
||||
password: str = Field(..., description="用户密码")
|
||||
captcha: Optional[str] = Field(None, description="验证码")
|
||||
twoFaCode: Optional[str] = Field(None, description="两步验证代码")
|
||||
@@ -1,3 +1,7 @@
|
||||
"""
|
||||
响应模型定义
|
||||
"""
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Literal, Union, Optional
|
||||
from datetime import datetime, timezone
|
||||
@@ -101,4 +105,33 @@ class UserSettingModel(BaseModel):
|
||||
qq: str | bool = Field(default=False, description="QQ号")
|
||||
themes: dict = Field(default_factory=dict, description="用户主题配置")
|
||||
two_factor: bool = Field(default=False, description="是否启用两步验证")
|
||||
uid: int = Field(default=0, description="用户UID")
|
||||
uid: int = Field(default=0, description="用户UID")
|
||||
|
||||
class FoldObjectModel(BaseModel):
|
||||
id: str = Field(default=..., description="对象ID")
|
||||
name: str = Field(default=..., description="对象名称")
|
||||
path: str = Field(default=..., description="对象路径")
|
||||
thumb: bool = Field(default=False, description="是否有缩略图")
|
||||
size: int = Field(default=None, description="对象大小,单位字节")
|
||||
type: Literal['file', 'folder'] = Field(default=..., description="对象类型,file表示文件,folder表示文件夹")
|
||||
date: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="对象创建或修改时间")
|
||||
create_date: datetime = Field(default_factory=lambda: datetime.now(timezone.utc), description="对象创建时间")
|
||||
source_enabled: bool = Field(default=False, description="是否启用离线下载源")
|
||||
|
||||
class PolicyModel(BaseModel):
|
||||
'''
|
||||
存储策略模型
|
||||
'''
|
||||
id: str = Field(default=..., description="策略ID")
|
||||
name: str = Field(default=..., description="策略名称")
|
||||
type: Literal['local', 'qiniu', 'tencent', 'aliyun', 'onedrive', 'google_drive', 'dropbox', 'webdav', 'remote'] = Field(default=..., description="存储类型")
|
||||
max_size: int = Field(default=0, description="单文件最大限制,单位字节,0表示不限制")
|
||||
file_type: list = Field(default_factory=list, description="允许的文件类型列表,空列表表示不限制")
|
||||
|
||||
class DirectoryModel(BaseModel):
|
||||
'''
|
||||
目录模型
|
||||
'''
|
||||
parent: str = Field(default=..., description="父目录ID")
|
||||
objects: list[FoldObjectModel] = Field(default_factory=list, description="目录下的对象列表")
|
||||
policy: PolicyModel = Field(default_factory=PolicyModel, description="存储策略")
|
||||
@@ -26,7 +26,7 @@ class User(BaseModel, table=True):
|
||||
email: str = Field(max_length=100, unique=True, index=True, description="用户邮箱,唯一")
|
||||
nick: Optional[str] = Field(default=None, max_length=50, description="用户昵称")
|
||||
password: str = Field(max_length=255, description="用户密码(加密后)")
|
||||
status: int = Field(default=0, sa_column_kwargs={"server_default": "0"}, description="用户状态: 0=正常, 1=未激活, 2=封禁")
|
||||
status: Optional[bool] = Field(default=None, sa_column_kwargs={"server_default": "0"}, description="用户状态: True=正常, None=未激活, False=封禁")
|
||||
storage: int = Field(default=0, sa_column_kwargs={"server_default": "0"}, description="已用存储空间(字节)")
|
||||
two_factor: Optional[str] = Field(default=None, max_length=255, description="两步验证密钥")
|
||||
avatar: Optional[str] = Field(default=None, max_length=255, description="头像地址")
|
||||
@@ -64,17 +64,7 @@ class User(BaseModel, table=True):
|
||||
@staticmethod
|
||||
async def create(
|
||||
user: Optional["User"] = None,
|
||||
email: str = None,
|
||||
nick: Optional[str] = None,
|
||||
password: str = None,
|
||||
status: int = 0,
|
||||
two_factor: Optional[str] = None,
|
||||
avatar: Optional[str] = None,
|
||||
options: Optional[str] = None,
|
||||
authn: Optional[str] = None,
|
||||
open_id: Optional[str] = None,
|
||||
score: int = 0,
|
||||
phone: Optional[str] = None
|
||||
**kwargs
|
||||
):
|
||||
"""
|
||||
向数据库内添加用户。
|
||||
@@ -83,19 +73,7 @@ class User(BaseModel, table=True):
|
||||
:type user: User
|
||||
"""
|
||||
if not user:
|
||||
user = User(
|
||||
email=email,
|
||||
nick=nick,
|
||||
password=password,
|
||||
status=status,
|
||||
two_factor=two_factor,
|
||||
avatar=avatar,
|
||||
options=options,
|
||||
authn=authn,
|
||||
open_id=open_id,
|
||||
score=score,
|
||||
phone=phone
|
||||
)
|
||||
user = User(**kwargs)
|
||||
|
||||
from .database import get_session
|
||||
|
||||
|
||||
Reference in New Issue
Block a user