1 line
26 KiB
JSON
1 line
26 KiB
JSON
{"repo": "caoshichuang/financesail", "files": {"docs/API.md": {"2164d11c2045375673d5fc866bd6380752c55bc6": {"t": 1785746542.722831, "n": 6621, "h": "1607dab48ad029c7", "c": "# FinanceSail API 文档\n\n> **v2.0 新增**:Pipeline 直接调用接口、多渠道通知接口\n\n## 认证\n\n所有 API 都需要 JWT Token 认证。\n\n### 登录获取 Token\n\n```\nPOST /api/auth/login\nContent-Type: application/json\n\n{\n \"username\": \"admin\",\n \"password\": \"admin123\"\n}\n\nResponse:\n{\n \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"token_type\": \"bearer\"\n}\n```\n\n### 使用 Token\n\n在请求头中添加:\n```\nAuthorization: Bearer <access_token>\n```\n\n---\n\n## 配置管理 API\n\n### 获取所有配置分类\n\n```\nGET /api/config/categories\n\nResponse:\n{\n \"categories\": [\n {\n \"id\": \"ai\",\n \"name\": \"AI配置\",\n \"icon\": \"Cpu\",\n \"description\": \"DeepSeek AI 配置\"\n },\n {\n \"id\": \"datasource\",\n \"name\": \"数据源配置\",\n \"icon\": \"Connection\",\n \"description\": \"Tushare 数据源配置\"\n },\n ...\n ]\n}\n```\n\n### 获取分类配置\n\n```\nGET /api/config/category/{category}\n\n支持的 category:\n- ai: AI 配置\n- datasource: 数据源配置\n- email: 邮件配置\n- app: 应用配置\n- star_stocks: 明星股配置\n- thresholds: 业务阈值配置\n- scheduler: 定时任务配置\n- project: 项目信息配置\n- holidays: 节假日配置\n- distribution: 分发平台配置\n\nResponse (以 ai 为例):\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"DEEPSEEK_MODEL\": \"deepseek-chat\"\n}\n```\n\n### 更新分类配置\n\n```\nPUT /api/config/category/{category}\nContent-Type: application/json\n\nRequest (以 thresholds 为例):\n{\n \"hot_stock_threshold\": 5.0,\n \"limit_up_down_threshold\": 9.5\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 获取所有配置\n\n```\nGET /api/config/all\n\nResponse:\n{\n \"ai\": {...},\n \"datasource\": {...},\n \"email\": {...},\n \"app\": {...},\n \"star_stocks\": {...},\n \"thresholds\": {...},\n \"scheduler\": {...},\n \"project\": {...},\n \"holidays\": {...},\n \"distribution\": {...}\n}\n```\n\n### 获取单个配置项\n\n```\nGET /api/config/item/{key}\n\nResponse:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 3.0,\n \"source\": \"dynamic\"\n}\n```\n\n### 更新单个配置项\n\n```\nPUT /api/config/item/{key}\nContent-Type: application/json\n\nRequest:\n{\n \"value\": 5.0\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 批量更新配置\n\n```\nPUT /api/config/batch\nContent-Type: application/json\n\nRequest:\n{\n \"configs\": {\n \"HOT_STOCK_THRESHOLD\": 5.0,\n \"LIMIT_UP_DOWN_THRESHOLD\": 9.5\n }\n}\n\nResponse:\n{\n \"message\": \"批量更新成功\",\n \"updated\": 2\n}\n```\n\n### 验证配置\n\n```\nPOST /api/config/validate\nContent-Type: application/json\n\nRequest:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 5.0\n}\n\nResponse:\n{\n \"valid\": true,\n \"message\": \"配置有效\"\n}\n```\n\n### 测试邮件配置\n\n```\nPOST /api/config/test/email\n\nResponse:\n{\n \"success\": true,\n \"message\": \"测试邮件发送成功\"\n}\n```\n\n### 备份配置\n\n```\nPOST /api/config/backup\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置备份成功\",\n \"backup_file\": \"config/dynamic_config_backup_20260329_140000.json\"\n}\n```\n\n### 恢复配置\n\n```\nPOST /api/config/restore\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置恢复成功\"\n}\n```\n\n### 获取环境配置\n\n```\nGET /api/config/env\n\nResponse:\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"TUSHARE_TOKEN\": \"xxxxxxxx\",\n \"QQ_EMAIL\": \"example@qq.com\",\n ...\n}\n```\n\n### 更新环境配置\n\n```\nPUT /api/config/env\nContent-Type: application/json\n\nRequest:\n{\n \"DEEPSEEK_API_KEY\": \"sk-new-key\",\n \"QQ_EMAIL\": \"newemail@qq.com\"\n}\n\nResponse:\n{\n \"message\": \"环境配置已更新,需要重启服务生效\"\n}\n```\n\n### 获取调度器配置\n\n```\nGET /api/config/scheduler\n\nResponse:\n{\n \"us_stock_time\": \"09:00\",\n \"a_share_time\": \"17:00\",\n \"hot_stock_time\": \"17:30\",\n \"ipo_time\": \"20:00\"\n}\n```\n\n### 获取明星股配置\n\n```\nGET /api/config/star-stocks\n\nResponse:\n{\n \"star_stocks\": {\n \"A股\": [\n {\"code\": \"600519\", \"name\": \"贵州茅台\"},\n {\"code\": \"300750\", \"name\": \"宁德时代\"}\n ],\n \"港股\": [...],\n \"美股\": [...]\n }\n}\n```\n\n---\n\n## 用户管理 API\n\n### 获取用户列表\n\n```\nGET /api/users/\n\nResponse:\n{\n \"users\": [\n {\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_date\": \"2026-04-28\",\n \"stocks\": [...]\n }\n ]\n}\n```\n\n### 创建用户\n\n```\nPOST /api/users/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_days\": 30\n}\n\nResponse:\n{\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"message\": \"用户创建成功\"\n}\n```\n\n### 删除用户\n\n```\nDELETE /api/users/{user_id}\n\nResponse:\n{\n \"message\": \"用户删除成功\"\n}\n```\n\n### 续费用户\n\n```\nPOST /api/users/{user_id}/renew\nContent-Type: application/json\n\nRequest:\n{\n \"days\": 30\n}\n\nResponse:\n{\n \"message\": \"续费成功\",\n \"new_expire_date\": \"2026-05-28\"\n}\n```\n\n---\n\n## 内容管理 API\n\n### 获取内容列表\n\n```\nGET /api/content/?limit=20&offset=0\n\nResponse:\n{\n \"contents\": [\n {\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n }\n ],\n \"total\": 100\n}\n```\n\n### 获取内容详情\n\n```\nGET /api/content/{content_id}\n\nResponse:\n{\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"content\": \"...\",\n \"tags\": [\"A股\", \"收盘\", \"总结\"],\n \"images\": [...],\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n}\n```\n\n### 手动生成内容\n\n```\nPOST /api/content/trigger/{market}\n\n支持的 market:\n- us: 美股总结\n- a-share: A股总结\n- hk: 港股总结\n- hot: 热点个股\n- ipo: IPO分析\n\nResponse:\n{\n \"success\": true,\n \"message\": \"内容生成任务已启动\",\n \"task_id\": \"xxx\"\n}\n```\n\n---\n\n## 分发管理 API\n\n### 获取分发状态\n\n```\nGET /api/distribution/status\n\nResponse:\n{\n \"xiaohongshu\": {\"enabled\": true, \"last_post\": \"...\"},\n \"wechat\": {\"enabled\": false, \"reason\": \"未配置\"},\n \"toutiao\": {\"enabled\": false, \"reason\": \"未配置\"}\n}\n```\n\n### 发布内容到平台\n\n```\nPOST /api/distribution/publish\nContent-Type: application/json\n\nRequest:\n{\n \"content_id\": 1,\n \"platform\": \"xiaohongshu\"\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"已跳转到预览页面\"\n}\n```\n\n---\n\n## 订阅管理 API\n\n### 获取订阅列表\n\n```\nGET /api/subscriptions/\n\nResponse:\n{\n \"subscriptions\": [...]\n}\n```\n\n### 添加订阅\n\n```\nPOST /api/subscriptions/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"stock_code\": \"600519\",\n \"events\": [\"price_change\", \"announcement\"]\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅成功\"\n}\n```\n\n### 删除订阅\n\n```\nDELETE /api/subscriptions/{subscription_id}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅已删除\"\n}\n```\n\n---\n\n## 日志 API\n\n### 获取系统状态\n\n```\nGET /api/logs/status\n\nResponse:\n{\n \"status\": \"running\",\n \"uptime\": \"3 days\",\n \"version\": \"1.0.0\",\n \"scheduler\": {\n \"running\": true,\n \"jobs\": [...]\n }\n}\n```\n\n### 获取应用日志\n\n```\nGET /api/logs/app?lines=100\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:00:00 | INFO | 开始执行A股总结任务\",\n ...\n ]\n}\n```\n\n### 获取错误日志\n\n```\nGET /api/logs/error?lines=50\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:05:00 | ERROR | 数据采集失败: ...\",\n ...\n ]\n}\n```\n\n---\n\n## 预览 API\n\n### 获取预览页面\n\n```\nGET /preview/{content_id}\n\nResponse: HTML 页面(手机端优化)\n```\n\n---\n\n## 错误响应格式\n\n所有 API 错误响应格式:\n\n```json\n{\n \"detail\": \"错误描述信息\"\n}\n```\n\n常见错误码:\n- 401: 未认证或 Token 过期\n- 403: 无权限\n- 404: 资源不存在\n- 422: 请求参数错误\n- 500: 服务器内部错误\n"}, "83de17514a5c875b8e9439c30350803439234e41": {"t": 1785765480.8646553, "n": 6621, "h": "1607dab48ad029c7", "c": "# FinanceSail API 文档\n\n> **v2.0 新增**:Pipeline 直接调用接口、多渠道通知接口\n\n## 认证\n\n所有 API 都需要 JWT Token 认证。\n\n### 登录获取 Token\n\n```\nPOST /api/auth/login\nContent-Type: application/json\n\n{\n \"username\": \"admin\",\n \"password\": \"admin123\"\n}\n\nResponse:\n{\n \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"token_type\": \"bearer\"\n}\n```\n\n### 使用 Token\n\n在请求头中添加:\n```\nAuthorization: Bearer <access_token>\n```\n\n---\n\n## 配置管理 API\n\n### 获取所有配置分类\n\n```\nGET /api/config/categories\n\nResponse:\n{\n \"categories\": [\n {\n \"id\": \"ai\",\n \"name\": \"AI配置\",\n \"icon\": \"Cpu\",\n \"description\": \"DeepSeek AI 配置\"\n },\n {\n \"id\": \"datasource\",\n \"name\": \"数据源配置\",\n \"icon\": \"Connection\",\n \"description\": \"Tushare 数据源配置\"\n },\n ...\n ]\n}\n```\n\n### 获取分类配置\n\n```\nGET /api/config/category/{category}\n\n支持的 category:\n- ai: AI 配置\n- datasource: 数据源配置\n- email: 邮件配置\n- app: 应用配置\n- star_stocks: 明星股配置\n- thresholds: 业务阈值配置\n- scheduler: 定时任务配置\n- project: 项目信息配置\n- holidays: 节假日配置\n- distribution: 分发平台配置\n\nResponse (以 ai 为例):\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"DEEPSEEK_MODEL\": \"deepseek-chat\"\n}\n```\n\n### 更新分类配置\n\n```\nPUT /api/config/category/{category}\nContent-Type: application/json\n\nRequest (以 thresholds 为例):\n{\n \"hot_stock_threshold\": 5.0,\n \"limit_up_down_threshold\": 9.5\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 获取所有配置\n\n```\nGET /api/config/all\n\nResponse:\n{\n \"ai\": {...},\n \"datasource\": {...},\n \"email\": {...},\n \"app\": {...},\n \"star_stocks\": {...},\n \"thresholds\": {...},\n \"scheduler\": {...},\n \"project\": {...},\n \"holidays\": {...},\n \"distribution\": {...}\n}\n```\n\n### 获取单个配置项\n\n```\nGET /api/config/item/{key}\n\nResponse:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 3.0,\n \"source\": \"dynamic\"\n}\n```\n\n### 更新单个配置项\n\n```\nPUT /api/config/item/{key}\nContent-Type: application/json\n\nRequest:\n{\n \"value\": 5.0\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 批量更新配置\n\n```\nPUT /api/config/batch\nContent-Type: application/json\n\nRequest:\n{\n \"configs\": {\n \"HOT_STOCK_THRESHOLD\": 5.0,\n \"LIMIT_UP_DOWN_THRESHOLD\": 9.5\n }\n}\n\nResponse:\n{\n \"message\": \"批量更新成功\",\n \"updated\": 2\n}\n```\n\n### 验证配置\n\n```\nPOST /api/config/validate\nContent-Type: application/json\n\nRequest:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 5.0\n}\n\nResponse:\n{\n \"valid\": true,\n \"message\": \"配置有效\"\n}\n```\n\n### 测试邮件配置\n\n```\nPOST /api/config/test/email\n\nResponse:\n{\n \"success\": true,\n \"message\": \"测试邮件发送成功\"\n}\n```\n\n### 备份配置\n\n```\nPOST /api/config/backup\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置备份成功\",\n \"backup_file\": \"config/dynamic_config_backup_20260329_140000.json\"\n}\n```\n\n### 恢复配置\n\n```\nPOST /api/config/restore\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置恢复成功\"\n}\n```\n\n### 获取环境配置\n\n```\nGET /api/config/env\n\nResponse:\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"TUSHARE_TOKEN\": \"xxxxxxxx\",\n \"QQ_EMAIL\": \"example@qq.com\",\n ...\n}\n```\n\n### 更新环境配置\n\n```\nPUT /api/config/env\nContent-Type: application/json\n\nRequest:\n{\n \"DEEPSEEK_API_KEY\": \"sk-new-key\",\n \"QQ_EMAIL\": \"newemail@qq.com\"\n}\n\nResponse:\n{\n \"message\": \"环境配置已更新,需要重启服务生效\"\n}\n```\n\n### 获取调度器配置\n\n```\nGET /api/config/scheduler\n\nResponse:\n{\n \"us_stock_time\": \"09:00\",\n \"a_share_time\": \"17:00\",\n \"hot_stock_time\": \"17:30\",\n \"ipo_time\": \"20:00\"\n}\n```\n\n### 获取明星股配置\n\n```\nGET /api/config/star-stocks\n\nResponse:\n{\n \"star_stocks\": {\n \"A股\": [\n {\"code\": \"600519\", \"name\": \"贵州茅台\"},\n {\"code\": \"300750\", \"name\": \"宁德时代\"}\n ],\n \"港股\": [...],\n \"美股\": [...]\n }\n}\n```\n\n---\n\n## 用户管理 API\n\n### 获取用户列表\n\n```\nGET /api/users/\n\nResponse:\n{\n \"users\": [\n {\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_date\": \"2026-04-28\",\n \"stocks\": [...]\n }\n ]\n}\n```\n\n### 创建用户\n\n```\nPOST /api/users/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_days\": 30\n}\n\nResponse:\n{\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"message\": \"用户创建成功\"\n}\n```\n\n### 删除用户\n\n```\nDELETE /api/users/{user_id}\n\nResponse:\n{\n \"message\": \"用户删除成功\"\n}\n```\n\n### 续费用户\n\n```\nPOST /api/users/{user_id}/renew\nContent-Type: application/json\n\nRequest:\n{\n \"days\": 30\n}\n\nResponse:\n{\n \"message\": \"续费成功\",\n \"new_expire_date\": \"2026-05-28\"\n}\n```\n\n---\n\n## 内容管理 API\n\n### 获取内容列表\n\n```\nGET /api/content/?limit=20&offset=0\n\nResponse:\n{\n \"contents\": [\n {\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n }\n ],\n \"total\": 100\n}\n```\n\n### 获取内容详情\n\n```\nGET /api/content/{content_id}\n\nResponse:\n{\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"content\": \"...\",\n \"tags\": [\"A股\", \"收盘\", \"总结\"],\n \"images\": [...],\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n}\n```\n\n### 手动生成内容\n\n```\nPOST /api/content/trigger/{market}\n\n支持的 market:\n- us: 美股总结\n- a-share: A股总结\n- hk: 港股总结\n- hot: 热点个股\n- ipo: IPO分析\n\nResponse:\n{\n \"success\": true,\n \"message\": \"内容生成任务已启动\",\n \"task_id\": \"xxx\"\n}\n```\n\n---\n\n## 分发管理 API\n\n### 获取分发状态\n\n```\nGET /api/distribution/status\n\nResponse:\n{\n \"xiaohongshu\": {\"enabled\": true, \"last_post\": \"...\"},\n \"wechat\": {\"enabled\": false, \"reason\": \"未配置\"},\n \"toutiao\": {\"enabled\": false, \"reason\": \"未配置\"}\n}\n```\n\n### 发布内容到平台\n\n```\nPOST /api/distribution/publish\nContent-Type: application/json\n\nRequest:\n{\n \"content_id\": 1,\n \"platform\": \"xiaohongshu\"\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"已跳转到预览页面\"\n}\n```\n\n---\n\n## 订阅管理 API\n\n### 获取订阅列表\n\n```\nGET /api/subscriptions/\n\nResponse:\n{\n \"subscriptions\": [...]\n}\n```\n\n### 添加订阅\n\n```\nPOST /api/subscriptions/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"stock_code\": \"600519\",\n \"events\": [\"price_change\", \"announcement\"]\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅成功\"\n}\n```\n\n### 删除订阅\n\n```\nDELETE /api/subscriptions/{subscription_id}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅已删除\"\n}\n```\n\n---\n\n## 日志 API\n\n### 获取系统状态\n\n```\nGET /api/logs/status\n\nResponse:\n{\n \"status\": \"running\",\n \"uptime\": \"3 days\",\n \"version\": \"1.0.0\",\n \"scheduler\": {\n \"running\": true,\n \"jobs\": [...]\n }\n}\n```\n\n### 获取应用日志\n\n```\nGET /api/logs/app?lines=100\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:00:00 | INFO | 开始执行A股总结任务\",\n ...\n ]\n}\n```\n\n### 获取错误日志\n\n```\nGET /api/logs/error?lines=50\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:05:00 | ERROR | 数据采集失败: ...\",\n ...\n ]\n}\n```\n\n---\n\n## 预览 API\n\n### 获取预览页面\n\n```\nGET /preview/{content_id}\n\nResponse: HTML 页面(手机端优化)\n```\n\n---\n\n## 错误响应格式\n\n所有 API 错误响应格式:\n\n```json\n{\n \"detail\": \"错误描述信息\"\n}\n```\n\n常见错误码:\n- 401: 未认证或 Token 过期\n- 403: 无权限\n- 404: 资源不存在\n- 422: 请求参数错误\n- 500: 服务器内部错误\n"}, "a26414de99e9cd12563b33335e6d7776e0110d23": {"t": 1785765482.369003, "n": 6582, "h": "5008ab2e900ad460", "c": "# FinanceSail API 文档\n\n## 认证\n\n所有 API 都需要 JWT Token 认证。\n\n### 登录获取 Token\n\n```\nPOST /api/auth/login\nContent-Type: application/json\n\n{\n \"username\": \"admin\",\n \"password\": \"admin123\"\n}\n\nResponse:\n{\n \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"token_type\": \"bearer\"\n}\n```\n\n### 使用 Token\n\n在请求头中添加:\n```\nAuthorization: Bearer <access_token>\n```\n\n---\n\n## 配置管理 API\n\n### 获取所有配置分类\n\n```\nGET /api/config/categories\n\nResponse:\n{\n \"categories\": [\n {\n \"id\": \"ai\",\n \"name\": \"AI配置\",\n \"icon\": \"Cpu\",\n \"description\": \"DeepSeek AI 配置\"\n },\n {\n \"id\": \"datasource\",\n \"name\": \"数据源配置\",\n \"icon\": \"Connection\",\n \"description\": \"Tushare 数据源配置\"\n },\n ...\n ]\n}\n```\n\n### 获取分类配置\n\n```\nGET /api/config/category/{category}\n\n支持的 category:\n- ai: AI 配置\n- datasource: 数据源配置\n- email: 邮件配置\n- app: 应用配置\n- star_stocks: 明星股配置\n- thresholds: 业务阈值配置\n- scheduler: 定时任务配置\n- project: 项目信息配置\n- holidays: 节假日配置\n- distribution: 分发平台配置\n\nResponse (以 ai 为例):\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"DEEPSEEK_MODEL\": \"deepseek-chat\"\n}\n```\n\n### 更新分类配置\n\n```\nPUT /api/config/category/{category}\nContent-Type: application/json\n\nRequest (以 thresholds 为例):\n{\n \"hot_stock_threshold\": 5.0,\n \"limit_up_down_threshold\": 9.5\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 获取所有配置\n\n```\nGET /api/config/all\n\nResponse:\n{\n \"ai\": {...},\n \"datasource\": {...},\n \"email\": {...},\n \"app\": {...},\n \"star_stocks\": {...},\n \"thresholds\": {...},\n \"scheduler\": {...},\n \"project\": {...},\n \"holidays\": {...},\n \"distribution\": {...}\n}\n```\n\n### 获取单个配置项\n\n```\nGET /api/config/item/{key}\n\nResponse:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 3.0,\n \"source\": \"dynamic\"\n}\n```\n\n### 更新单个配置项\n\n```\nPUT /api/config/item/{key}\nContent-Type: application/json\n\nRequest:\n{\n \"value\": 5.0\n}\n\nResponse:\n{\n \"message\": \"配置已更新\"\n}\n```\n\n### 批量更新配置\n\n```\nPUT /api/config/batch\nContent-Type: application/json\n\nRequest:\n{\n \"configs\": {\n \"HOT_STOCK_THRESHOLD\": 5.0,\n \"LIMIT_UP_DOWN_THRESHOLD\": 9.5\n }\n}\n\nResponse:\n{\n \"message\": \"批量更新成功\",\n \"updated\": 2\n}\n```\n\n### 验证配置\n\n```\nPOST /api/config/validate\nContent-Type: application/json\n\nRequest:\n{\n \"key\": \"HOT_STOCK_THRESHOLD\",\n \"value\": 5.0\n}\n\nResponse:\n{\n \"valid\": true,\n \"message\": \"配置有效\"\n}\n```\n\n### 测试邮件配置\n\n```\nPOST /api/config/test/email\n\nResponse:\n{\n \"success\": true,\n \"message\": \"测试邮件发送成功\"\n}\n```\n\n### 备份配置\n\n```\nPOST /api/config/backup\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置备份成功\",\n \"backup_file\": \"config/dynamic_config_backup_20260329_140000.json\"\n}\n```\n\n### 恢复配置\n\n```\nPOST /api/config/restore\n\nResponse:\n{\n \"success\": true,\n \"message\": \"配置恢复成功\"\n}\n```\n\n### 获取环境配置\n\n```\nGET /api/config/env\n\nResponse:\n{\n \"DEEPSEEK_API_KEY\": \"sk-xxxxxxxx\",\n \"DEEPSEEK_BASE_URL\": \"https://api.deepseek.com\",\n \"TUSHARE_TOKEN\": \"xxxxxxxx\",\n \"QQ_EMAIL\": \"example@qq.com\",\n ...\n}\n```\n\n### 更新环境配置\n\n```\nPUT /api/config/env\nContent-Type: application/json\n\nRequest:\n{\n \"DEEPSEEK_API_KEY\": \"sk-new-key\",\n \"QQ_EMAIL\": \"newemail@qq.com\"\n}\n\nResponse:\n{\n \"message\": \"环境配置已更新,需要重启服务生效\"\n}\n```\n\n### 获取调度器配置\n\n```\nGET /api/config/scheduler\n\nResponse:\n{\n \"us_stock_time\": \"09:00\",\n \"a_share_time\": \"17:00\",\n \"hot_stock_time\": \"17:30\",\n \"ipo_time\": \"20:00\"\n}\n```\n\n### 获取明星股配置\n\n```\nGET /api/config/star-stocks\n\nResponse:\n{\n \"star_stocks\": {\n \"A股\": [\n {\"code\": \"600519\", \"name\": \"贵州茅台\"},\n {\"code\": \"300750\", \"name\": \"宁德时代\"}\n ],\n \"港股\": [...],\n \"美股\": [...]\n }\n}\n```\n\n---\n\n## 用户管理 API\n\n### 获取用户列表\n\n```\nGET /api/users/\n\nResponse:\n{\n \"users\": [\n {\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_date\": \"2026-04-28\",\n \"stocks\": [...]\n }\n ]\n}\n```\n\n### 创建用户\n\n```\nPOST /api/users/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"name\": \"用户昵称\",\n \"expire_days\": 30\n}\n\nResponse:\n{\n \"id\": 1,\n \"email\": \"user@example.com\",\n \"message\": \"用户创建成功\"\n}\n```\n\n### 删除用户\n\n```\nDELETE /api/users/{user_id}\n\nResponse:\n{\n \"message\": \"用户删除成功\"\n}\n```\n\n### 续费用户\n\n```\nPOST /api/users/{user_id}/renew\nContent-Type: application/json\n\nRequest:\n{\n \"days\": 30\n}\n\nResponse:\n{\n \"message\": \"续费成功\",\n \"new_expire_date\": \"2026-05-28\"\n}\n```\n\n---\n\n## 内容管理 API\n\n### 获取内容列表\n\n```\nGET /api/content/?limit=20&offset=0\n\nResponse:\n{\n \"contents\": [\n {\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n }\n ],\n \"total\": 100\n}\n```\n\n### 获取内容详情\n\n```\nGET /api/content/{content_id}\n\nResponse:\n{\n \"id\": 1,\n \"market\": \"A股\",\n \"type\": \"daily_summary\",\n \"title\": \"A股收盘总结\",\n \"content\": \"...\",\n \"tags\": [\"A股\", \"收盘\", \"总结\"],\n \"images\": [...],\n \"created_at\": \"2026-03-29T17:00:00\",\n \"status\": \"sent\"\n}\n```\n\n### 手动生成内容\n\n```\nPOST /api/content/trigger/{market}\n\n支持的 market:\n- us: 美股总结\n- a-share: A股总结\n- hk: 港股总结\n- hot: 热点个股\n- ipo: IPO分析\n\nResponse:\n{\n \"success\": true,\n \"message\": \"内容生成任务已启动\",\n \"task_id\": \"xxx\"\n}\n```\n\n---\n\n## 分发管理 API\n\n### 获取分发状态\n\n```\nGET /api/distribution/status\n\nResponse:\n{\n \"xiaohongshu\": {\"enabled\": true, \"last_post\": \"...\"},\n \"wechat\": {\"enabled\": false, \"reason\": \"未配置\"},\n \"toutiao\": {\"enabled\": false, \"reason\": \"未配置\"}\n}\n```\n\n### 发布内容到平台\n\n```\nPOST /api/distribution/publish\nContent-Type: application/json\n\nRequest:\n{\n \"content_id\": 1,\n \"platform\": \"xiaohongshu\"\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"已跳转到预览页面\"\n}\n```\n\n---\n\n## 订阅管理 API\n\n### 获取订阅列表\n\n```\nGET /api/subscriptions/\n\nResponse:\n{\n \"subscriptions\": [...]\n}\n```\n\n### 添加订阅\n\n```\nPOST /api/subscriptions/\nContent-Type: application/json\n\nRequest:\n{\n \"email\": \"user@example.com\",\n \"stock_code\": \"600519\",\n \"events\": [\"price_change\", \"announcement\"]\n}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅成功\"\n}\n```\n\n### 删除订阅\n\n```\nDELETE /api/subscriptions/{subscription_id}\n\nResponse:\n{\n \"success\": true,\n \"message\": \"订阅已删除\"\n}\n```\n\n---\n\n## 日志 API\n\n### 获取系统状态\n\n```\nGET /api/logs/status\n\nResponse:\n{\n \"status\": \"running\",\n \"uptime\": \"3 days\",\n \"version\": \"1.0.0\",\n \"scheduler\": {\n \"running\": true,\n \"jobs\": [...]\n }\n}\n```\n\n### 获取应用日志\n\n```\nGET /api/logs/app?lines=100\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:00:00 | INFO | 开始执行A股总结任务\",\n ...\n ]\n}\n```\n\n### 获取错误日志\n\n```\nGET /api/logs/error?lines=50\n\nResponse:\n{\n \"logs\": [\n \"2026-03-29 17:05:00 | ERROR | 数据采集失败: ...\",\n ...\n ]\n}\n```\n\n---\n\n## 预览 API\n\n### 获取预览页面\n\n```\nGET /preview/{content_id}\n\nResponse: HTML 页面(手机端优化)\n```\n\n---\n\n## 错误响应格式\n\n所有 API 错误响应格式:\n\n```json\n{\n \"detail\": \"错误描述信息\"\n}\n```\n\n常见错误码:\n- 401: 未认证或 Token 过期\n- 403: 无权限\n- 404: 资源不存在\n- 422: 请求参数错误\n- 500: 服务器内部错误\n"}}}} |