• Data Governance Dev's avatar
    feat(backend): /api/dict/{tables,fields,all-table-names} 分页端点 + cache 复用 · 6cb0ffa7
    Data Governance Dev authored
    DataDictCache 之前只在 connect/test 写入;这次新增 3 个 GET 端点让前端按需切片:
    - GET /api/dict/tables?db_type=&host=&port=&user=&database=&page=&page_size=&q=
      → 分页返回 table_summary,每项附加 field_count(前端不再算)
    - GET /api/dict/fields?...&tables=t1,t2&page=&page_size=&q=
      → 分页返回 data_dictionary(按 tables 参数过滤),每项附加 table_comment
    - GET /api/dict/all-table-names?...&q=
      → 仅返名字列表,供前端「全选 / 反选」按钮使用(不分页)
    
    实现要点:
    - 全部走 DataDictCache.get_instance().get(cfg),命中即 list[a:b] 切片(微秒级)
    - cache miss 时现场抽一次(缺 password 抛 warning 让前端提示重连)
    - 多连接并存按 5 元组 (db_type, host, port, database, user) 区分 key
    - 排序:tables 按 table_name 字典序;fields 按 (table_name, ordinal_position)
      与旧前端 filteredFields 排序保持一致
    
    踩坑:
    - port=3306 默认参数必须放最末位(Python SyntaxError)
    - list_dict_fields 重复定义 host 别名导致 FastAPI 参数解析歧义 → 简化为单一 host 参数
    - list_columns SQL 不带 table_comment,/api/dict/fields 响应里要手动从 table_summary 关联
    6cb0ffa7
routes.py 31.7 KB