修复模型定义

This commit is contained in:
2025-12-26 19:29:29 +08:00
parent d8a229fccd
commit c17511d2e8
9 changed files with 55 additions and 18 deletions

View File

@@ -12,7 +12,7 @@ engine: AsyncEngine = create_async_engine(
echo=appmeta.debug, echo=appmeta.debug,
connect_args={ connect_args={
"check_same_thread": False "check_same_thread": False
} if ASYNC_DATABASE_URL.startswith("sqlite") else None, } if ASYNC_DATABASE_URL.startswith("sqlite") else {},
future=True, future=True,
# pool_size=POOL_SIZE, # pool_size=POOL_SIZE,
# max_overflow=64, # max_overflow=64,

View File

@@ -14,6 +14,8 @@ if TYPE_CHECKING:
class DownloadStatus(StrEnum): class DownloadStatus(StrEnum):
"""下载状态枚举""" """下载状态枚举"""
PREPARING = "preparing"
"""准备中"""
RUNNING = "running" RUNNING = "running"
"""进行中""" """进行中"""
COMPLETED = "completed" COMPLETED = "completed"
@@ -119,25 +121,25 @@ class Download(DownloadBase, UUIDTableBaseMixin):
Index("ix_download_user_status", "user_id", "status"), Index("ix_download_user_status", "user_id", "status"),
) )
status: DownloadStatus = Field(default=DownloadStatus.RUNNING, sa_column_kwargs={"server_default": "'running'"}, index=True) status: DownloadStatus = Field(default=DownloadStatus.PREPARING, index=True)
"""下载状态""" """下载状态"""
type: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) type: int = Field(default=0)
"""任务类型 [TODO] 待定义枚举""" """任务类型 [TODO] 待定义枚举"""
source: str source: str
"""来源URL或标识""" """来源URL或标识"""
total_size: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) total_size: int = Field(default=0)
"""总大小(字节)""" """总大小(字节)"""
downloaded_size: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) downloaded_size: int = Field(default=0)
"""已下载大小(字节)""" """已下载大小(字节)"""
g_id: str | None = Field(default=None, index=True) g_id: str | None = Field(default=None, index=True)
"""Aria2 GID""" """Aria2 GID"""
speed: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) speed: int = Field(default=0)
"""下载速度bytes/s""" """下载速度bytes/s"""
parent: str | None = Field(default=None, max_length=255) parent: str | None = Field(default=None, max_length=255)

View File

@@ -68,7 +68,7 @@ class Node(SQLModelBase, TableBaseMixin):
Index("ix_node_status", "status"), Index("ix_node_status", "status"),
) )
status: NodeStatus = Field(default=NodeStatus.ONLINE, sa_column_kwargs={"server_default": "'online'"}) status: NodeStatus = Field(default=NodeStatus.ONLINE)
"""节点状态""" """节点状态"""
name: str = Field(max_length=255, unique=True) name: str = Field(max_length=255, unique=True)
@@ -86,10 +86,10 @@ class Node(SQLModelBase, TableBaseMixin):
master_key: str | None = Field(default=None, max_length=255) master_key: str | None = Field(default=None, max_length=255)
"""主机通讯密钥""" """主机通讯密钥"""
aria2_enabled: bool = Field(default=False, sa_column_kwargs={"server_default": text("false")}) aria2_enabled: bool = False
"""是否启用Aria2""" """是否启用Aria2"""
rank: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) rank: int = 0
"""节点排序权重""" """节点排序权重"""
# 关系 # 关系

View File

@@ -51,7 +51,7 @@ class Order(SQLModelBase, TableBaseMixin):
price: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) price: int = Field(default=0, sa_column_kwargs={"server_default": "0"})
"""订单价格(分)""" """订单价格(分)"""
status: OrderStatus = Field(default=OrderStatus.PENDING, sa_column_kwargs={"server_default": "'pending'"}) status: OrderStatus = Field(default=OrderStatus.PENDING)
"""订单状态""" """订单状态"""
# 外键 # 外键

View File

@@ -34,7 +34,7 @@ class Tag(SQLModelBase, TableBaseMixin):
color: str | None = Field(default=None, max_length=255) color: str | None = Field(default=None, max_length=255)
"""标签颜色""" """标签颜色"""
type: TagType = Field(default=TagType.MANUAL, sa_column_kwargs={"server_default": "'manual'"}) type: TagType = Field(default=TagType.MANUAL)
"""标签类型""" """标签类型"""
expression: str | None = Field(default=None, description="自动标签的匹配表达式") expression: str | None = Field(default=None, description="自动标签的匹配表达式")

View File

@@ -70,13 +70,13 @@ class Task(SQLModelBase, TableBaseMixin):
Index("ix_task_user_status", "user_id", "status"), Index("ix_task_user_status", "user_id", "status"),
) )
status: TaskStatus = Field(default=TaskStatus.QUEUED, sa_column_kwargs={"server_default": "'queued'"}) status: TaskStatus = Field(default=TaskStatus.QUEUED)
"""任务状态""" """任务状态"""
type: int = Field(default=0, sa_column_kwargs={"server_default": "0"}) type: int = Field(default=0)
"""任务类型 [TODO] 待定义枚举""" """任务类型 [TODO] 待定义枚举"""
progress: int = Field(default=0, sa_column_kwargs={"server_default": "0"}, ge=0, le=100) progress: int = Field(default=0, ge=0, le=100)
"""任务进度0-100""" """任务进度0-100"""
error: str | None = Field(default=None) error: str | None = Field(default=None)

View File

@@ -313,13 +313,13 @@ class User(UserBase, UUIDTableBaseMixin):
"""当前用户组过期时间""" """当前用户组过期时间"""
# Option 相关字段 # Option 相关字段
theme: ThemeType = Field(default=ThemeType.SYSTEM, sa_column_kwargs={"server_default": "system"}) # theme: ThemeType = Field(default=ThemeType.SYSTEM)
"""主题类型: light/dark/system""" # """主题类型: light/dark/system"""
language: str = Field(default="zh-CN", max_length=5, sa_column_kwargs={"server_default": "zh-CN"}) language: str = Field(default="zh-CN", max_length=5)
"""语言偏好""" """语言偏好"""
timezone: int = Field(default=8, ge=-12, le=12, sa_column_kwargs={"server_default": "8"}) timezone: int = Field(default=8, ge=-12, le=12)
"""时区UTC 偏移小时数""" """时区UTC 偏移小时数"""
# 外键 # 外键

View File

@@ -9,6 +9,7 @@ dependencies = [
"aiohttp>=3.13.2", "aiohttp>=3.13.2",
"aiosqlite==0.22.1", "aiosqlite==0.22.1",
"argon2-cffi>=25.1.0", "argon2-cffi>=25.1.0",
"asyncpg>=0.31.0",
"cachetools>=6.2.4", "cachetools>=6.2.4",
"fastapi[standard]>=0.122.0", "fastapi[standard]>=0.122.0",
"httpx>=0.27.0", "httpx>=0.27.0",

34
uv.lock generated
View File

@@ -195,6 +195,38 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" },
] ]
[[package]]
name = "asyncpg"
version = "0.31.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/fe/cc/d18065ce2380d80b1bcce927c24a2642efd38918e33fd724bc4bca904877/asyncpg-0.31.0.tar.gz", hash = "sha256:c989386c83940bfbd787180f2b1519415e2d3d6277a70d9d0f0145ac73500735", size = 993667, upload-time = "2025-11-24T23:27:00.812Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/95/11/97b5c2af72a5d0b9bc3fa30cd4b9ce22284a9a943a150fdc768763caf035/asyncpg-0.31.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c204fab1b91e08b0f47e90a75d1b3c62174dab21f670ad6c5d0f243a228f015b", size = 661111, upload-time = "2025-11-24T23:26:04.467Z" },
{ url = "https://files.pythonhosted.org/packages/1b/71/157d611c791a5e2d0423f09f027bd499935f0906e0c2a416ce712ba51ef3/asyncpg-0.31.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:54a64f91839ba59008eccf7aad2e93d6e3de688d796f35803235ea1c4898ae1e", size = 636928, upload-time = "2025-11-24T23:26:05.944Z" },
{ url = "https://files.pythonhosted.org/packages/2e/fc/9e3486fb2bbe69d4a867c0b76d68542650a7ff1574ca40e84c3111bb0c6e/asyncpg-0.31.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0e0822b1038dc7253b337b0f3f676cadc4ac31b126c5d42691c39691962e403", size = 3424067, upload-time = "2025-11-24T23:26:07.957Z" },
{ url = "https://files.pythonhosted.org/packages/12/c6/8c9d076f73f07f995013c791e018a1cd5f31823c2a3187fc8581706aa00f/asyncpg-0.31.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bef056aa502ee34204c161c72ca1f3c274917596877f825968368b2c33f585f4", size = 3518156, upload-time = "2025-11-24T23:26:09.591Z" },
{ url = "https://files.pythonhosted.org/packages/ae/3b/60683a0baf50fbc546499cfb53132cb6835b92b529a05f6a81471ab60d0c/asyncpg-0.31.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0bfbcc5b7ffcd9b75ab1558f00db2ae07db9c80637ad1b2469c43df79d7a5ae2", size = 3319636, upload-time = "2025-11-24T23:26:11.168Z" },
{ url = "https://files.pythonhosted.org/packages/50/dc/8487df0f69bd398a61e1792b3cba0e47477f214eff085ba0efa7eac9ce87/asyncpg-0.31.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:22bc525ebbdc24d1261ecbf6f504998244d4e3be1721784b5f64664d61fbe602", size = 3472079, upload-time = "2025-11-24T23:26:13.164Z" },
{ url = "https://files.pythonhosted.org/packages/13/a1/c5bbeeb8531c05c89135cb8b28575ac2fac618bcb60119ee9696c3faf71c/asyncpg-0.31.0-cp313-cp313-win32.whl", hash = "sha256:f890de5e1e4f7e14023619399a471ce4b71f5418cd67a51853b9910fdfa73696", size = 527606, upload-time = "2025-11-24T23:26:14.78Z" },
{ url = "https://files.pythonhosted.org/packages/91/66/b25ccb84a246b470eb943b0107c07edcae51804912b824054b3413995a10/asyncpg-0.31.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc5f2fa9916f292e5c5c8b2ac2813763bcd7f58e130055b4ad8a0531314201ab", size = 596569, upload-time = "2025-11-24T23:26:16.189Z" },
{ url = "https://files.pythonhosted.org/packages/3c/36/e9450d62e84a13aea6580c83a47a437f26c7ca6fa0f0fd40b6670793ea30/asyncpg-0.31.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f6b56b91bb0ffc328c4e3ed113136cddd9deefdf5f79ab448598b9772831df44", size = 660867, upload-time = "2025-11-24T23:26:17.631Z" },
{ url = "https://files.pythonhosted.org/packages/82/4b/1d0a2b33b3102d210439338e1beea616a6122267c0df459ff0265cd5807a/asyncpg-0.31.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:334dec28cf20d7f5bb9e45b39546ddf247f8042a690bff9b9573d00086e69cb5", size = 638349, upload-time = "2025-11-24T23:26:19.689Z" },
{ url = "https://files.pythonhosted.org/packages/41/aa/e7f7ac9a7974f08eff9183e392b2d62516f90412686532d27e196c0f0eeb/asyncpg-0.31.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98cc158c53f46de7bb677fd20c417e264fc02b36d901cc2a43bd6cb0dc6dbfd2", size = 3410428, upload-time = "2025-11-24T23:26:21.275Z" },
{ url = "https://files.pythonhosted.org/packages/6f/de/bf1b60de3dede5c2731e6788617a512bc0ebd9693eac297ee74086f101d7/asyncpg-0.31.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9322b563e2661a52e3cdbc93eed3be7748b289f792e0011cb2720d278b366ce2", size = 3471678, upload-time = "2025-11-24T23:26:23.627Z" },
{ url = "https://files.pythonhosted.org/packages/46/78/fc3ade003e22d8bd53aaf8f75f4be48f0b460fa73738f0391b9c856a9147/asyncpg-0.31.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19857a358fc811d82227449b7ca40afb46e75b33eb8897240c3839dd8b744218", size = 3313505, upload-time = "2025-11-24T23:26:25.235Z" },
{ url = "https://files.pythonhosted.org/packages/bf/e9/73eb8a6789e927816f4705291be21f2225687bfa97321e40cd23055e903a/asyncpg-0.31.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ba5f8886e850882ff2c2ace5732300e99193823e8107e2c53ef01c1ebfa1e85d", size = 3434744, upload-time = "2025-11-24T23:26:26.944Z" },
{ url = "https://files.pythonhosted.org/packages/08/4b/f10b880534413c65c5b5862f79b8e81553a8f364e5238832ad4c0af71b7f/asyncpg-0.31.0-cp314-cp314-win32.whl", hash = "sha256:cea3a0b2a14f95834cee29432e4ddc399b95700eb1d51bbc5bfee8f31fa07b2b", size = 532251, upload-time = "2025-11-24T23:26:28.404Z" },
{ url = "https://files.pythonhosted.org/packages/d3/2d/7aa40750b7a19efa5d66e67fc06008ca0f27ba1bd082e457ad82f59aba49/asyncpg-0.31.0-cp314-cp314-win_amd64.whl", hash = "sha256:04d19392716af6b029411a0264d92093b6e5e8285ae97a39957b9a9c14ea72be", size = 604901, upload-time = "2025-11-24T23:26:30.34Z" },
{ url = "https://files.pythonhosted.org/packages/ce/fe/b9dfe349b83b9dee28cc42360d2c86b2cdce4cb551a2c2d27e156bcac84d/asyncpg-0.31.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bdb957706da132e982cc6856bb2f7b740603472b54c3ebc77fe60ea3e57e1bd2", size = 702280, upload-time = "2025-11-24T23:26:32Z" },
{ url = "https://files.pythonhosted.org/packages/6a/81/e6be6e37e560bd91e6c23ea8a6138a04fd057b08cf63d3c5055c98e81c1d/asyncpg-0.31.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6d11b198111a72f47154fa03b85799f9be63701e068b43f84ac25da0bda9cb31", size = 682931, upload-time = "2025-11-24T23:26:33.572Z" },
{ url = "https://files.pythonhosted.org/packages/a6/45/6009040da85a1648dd5bc75b3b0a062081c483e75a1a29041ae63a0bf0dc/asyncpg-0.31.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18c83b03bc0d1b23e6230f5bf8d4f217dc9bc08644ce0502a9d91dc9e634a9c7", size = 3581608, upload-time = "2025-11-24T23:26:35.638Z" },
{ url = "https://files.pythonhosted.org/packages/7e/06/2e3d4d7608b0b2b3adbee0d0bd6a2d29ca0fc4d8a78f8277df04e2d1fd7b/asyncpg-0.31.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e009abc333464ff18b8f6fd146addffd9aaf63e79aa3bb40ab7a4c332d0c5e9e", size = 3498738, upload-time = "2025-11-24T23:26:37.275Z" },
{ url = "https://files.pythonhosted.org/packages/7d/aa/7d75ede780033141c51d83577ea23236ba7d3a23593929b32b49db8ed36e/asyncpg-0.31.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3b1fbcb0e396a5ca435a8826a87e5c2c2cc0c8c68eb6fadf82168056b0e53a8c", size = 3401026, upload-time = "2025-11-24T23:26:39.423Z" },
{ url = "https://files.pythonhosted.org/packages/ba/7a/15e37d45e7f7c94facc1e9148c0e455e8f33c08f0b8a0b1deb2c5171771b/asyncpg-0.31.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8df714dba348efcc162d2adf02d213e5fab1bd9f557e1305633e851a61814a7a", size = 3429426, upload-time = "2025-11-24T23:26:41.032Z" },
{ url = "https://files.pythonhosted.org/packages/13/d5/71437c5f6ae5f307828710efbe62163974e71237d5d46ebd2869ea052d10/asyncpg-0.31.0-cp314-cp314t-win32.whl", hash = "sha256:1b41f1afb1033f2b44f3234993b15096ddc9cd71b21a42dbd87fc6a57b43d65d", size = 614495, upload-time = "2025-11-24T23:26:42.659Z" },
{ url = "https://files.pythonhosted.org/packages/3c/d7/8fb3044eaef08a310acfe23dae9a8e2e07d305edc29a53497e52bc76eca7/asyncpg-0.31.0-cp314-cp314t-win_amd64.whl", hash = "sha256:bd4107bb7cdd0e9e65fae66a62afd3a249663b844fa34d479f6d5b3bef9c04c3", size = 706062, upload-time = "2025-11-24T23:26:44.086Z" },
]
[[package]] [[package]]
name = "attrs" name = "attrs"
version = "25.4.0" version = "25.4.0"
@@ -439,6 +471,7 @@ dependencies = [
{ name = "aiohttp" }, { name = "aiohttp" },
{ name = "aiosqlite" }, { name = "aiosqlite" },
{ name = "argon2-cffi" }, { name = "argon2-cffi" },
{ name = "asyncpg" },
{ name = "cachetools" }, { name = "cachetools" },
{ name = "fastapi", extra = ["standard"] }, { name = "fastapi", extra = ["standard"] },
{ name = "httpx" }, { name = "httpx" },
@@ -465,6 +498,7 @@ requires-dist = [
{ name = "aiohttp", specifier = ">=3.13.2" }, { name = "aiohttp", specifier = ">=3.13.2" },
{ name = "aiosqlite", specifier = "==0.22.1" }, { name = "aiosqlite", specifier = "==0.22.1" },
{ name = "argon2-cffi", specifier = ">=25.1.0" }, { name = "argon2-cffi", specifier = ">=25.1.0" },
{ name = "asyncpg", specifier = ">=0.31.0" },
{ name = "cachetools", specifier = ">=6.2.4" }, { name = "cachetools", specifier = ">=6.2.4" },
{ name = "fastapi", extras = ["standard"], specifier = ">=0.122.0" }, { name = "fastapi", extras = ["standard"], specifier = ">=0.122.0" },
{ name = "httpx", specifier = ">=0.27.0" }, { name = "httpx", specifier = ">=0.27.0" },