Files

1 line
26 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}