This repository has been archived on 2026-10-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
snowy-yang 37f8d77405 refactor: init_db 四段拆解(142 行 / 圈 15 / 嵌套 4 → 14 行 / 圈 2 / 嵌套 1)
为什么:init_db 是站点库全部结构演进的唯一入口,但 142 行单函数把
「建表 / 列迁移 / 邮箱唯一索引 / 邮箱归一化 / 管理员引导」五件事
揉在一个 with-try 里,任何一段改动都要在 140 行上下文里核对边界。

拆出五个成员(全部接收 conn,调用顺序 = 原执行顺序,单连接单 commit 不变):
- _SCHEMA_SQL 常量 + _create_schema(建表 + 种子行,纯数据上移)
- _apply_column_migrations(ALTER 循环;非 duplicate column 的
  OperationalError 仍然抛出,禁止静默带病初始化)
- _ensure_email_unique_index(重复邮箱仅告警不阻断,原文案保留)
- _migrate_user_emails(撞唯一索引行保留原值,原文案保留)
- _ensure_initial_admin(按 role 判断而非用户名,防改名后误重建)

先写测试后动代码:新增 tests/test_auth_init_db.py 7 例,覆盖此前
零测试的路径——旧库列迁移、二次初始化幂等、改名管理员不重建、
存量重复邮箱告警不阻断、+tag 邮箱归一化迁移、归一化撞行保留原值。
7 例在未改动实现上一次跑绿,重构后即等价性验证。
门禁:ruff 全过 · pyright 0/0 · pytest 319 passed(312→319)。
2026-09-27 09:36:31 +08:00
S
Description
云村小助手 · 网易云音乐解析/下载服务(FastAPI + asyncio + aiohttp)
1.5 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 61%
TypeScript 32.2%
CSS 6.6%
Dockerfile 0.1%