Commit Graph

124 Commits

Author SHA1 Message Date
31bafee0ab feat(payment): 重构网页端支付登录流程——小程序生成临时码、网页端扫码确认
- 后端新增 /api/web-login/code (生成临时登录码) 和 /api/web-login/confirm (确认登录)
- 后端新增 /payment/login-status (GET, 轮询登录状态)
- payment_index 页面完全重写:未登录时显示微信扫码登录入口;登录后显示套餐或会员信息
- 沙箱环境下 /payment 通过 mock-login 跳过真实微信认证,方便测试
2026-04-24 09:43:18 +08:00
375f0affcf docs: 更新支付系统和支付宝集成文档,修复Rust edition版本号 2026-04-24 09:19:48 +08:00
ea705f0917 feat(auth): 添加沙箱测试用 mock_login 接口 (GET /api/mock-login) 2026-04-23 13:11:10 +08:00
502ae8babb fix(payment): payment_page支持URL参数传递JWT,payment_index页面跳转时携带JWT 2026-04-23 12:34:39 +08:00
e8286310ea feat(payment): 接入支付宝沙箱环境 (alipay.trade.page.pay) 2026-04-23 12:23:53 +08:00
8c9552fbfc feat: 新增支付页面接口,为接入支付宝做准备
- GET /payment: 套餐选择页(无需认证,外部浏览器打开)
- GET /payment/page: 支付引导页(需 JWT,创建订单)
- GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT)
- AppState 新增支付宝配置字段(可选)
- afterbody.js: PDF下载增加状态提示和重试按钮
2026-04-23 10:48:31 +08:00
fe0e831210 docs: 更新后端 API 文档
- 补充 handlers 目录:添加 meta.rs、favorites.rs
- 新增服务状态页说明(/、/health)
- 完善 API 接口列表:
  - 公开接口:添加 /health、/refresh-token
  - 受保护接口:添加 /api/favorites 系列、/api/user/quota
  - 支付接口:添加 /api/payment/create-order、/api/payment/mock-confirm
2026-04-19 21:10:17 +08:00
fb791a2a7c docs: 更新备份策略文档,反映版本去重和选择性回滚
- 备份文件名格式:{project}.backup.{timestamp}.{gitHash}.{md5前8位}
- 清理策略:保留 5 个不同版本,相同版本只保留最早的
- 手动回滚:支持选择特定版本
2026-04-19 20:56:32 +08:00
0c7d44d795 fix(deploy): 改进备份命名和清理逻辑,防止版本重复
问题:同一版本多次备份时,备份文件仅时间戳不同,内容完全相同,
导致清理后仍保留多个相同版本的备份,失去回滚多样性。

解决方案:
1. 备份文件名加入 Git hash + MD5:{timestamp}.{gitHash}.{md5}
2. 清理逻辑按 MD5 去重:相同版本的多个备份只保留最早一个
3. 手动回滚支持选择特定版本

影响:
- 回滚时可明确知道恢复到哪个版本(Git hash + MD5 可验证)
- 清理不再基于简单时间戳,而是基于版本内容
- 保留了真正的版本多样性
2026-04-19 20:55:47 +08:00
9974bfbf58 fix(config): 移除代码中的 app_version 引用,完成版本管理统一
- config.rs: 移除 AppConfig.app_version 字段和日志输出
- main.rs: 移除 APP_VERSION 环境变量设置
- models.rs: 移除 AppState.app_version 字段

版本号现统一使用 Cargo.toml 中的 env!("CARGO_PKG_VERSION")
2026-04-19 20:50:56 +08:00
a91948a18c refactor(config): 统一版本管理,移除冗余的 app_version 字段
- 移除 config/*.toml 中的 app_version 字段(代码中未使用)
- 版本号统一由 Cargo.toml 管理
- Cargo.lock 自动同步更新
- 更新 AGENTS.md 添加版本管理说明
2026-04-19 20:35:12 +08:00
db7fa8e460 chore: 升级版本至 0.3.0 2026-04-19 20:30:02 +08:00
9868db0abc style(pdf): 优化 PDF 报表布局样式
- 改用 two-column/field 布局替代 data-grid
- 经纬度分开显示
- 移除冗余的'是否有抽测风速'字段
2026-04-19 20:20:12 +08:00
778bf0e9e7 fix(deploy): 修复迁移执行和数据库测试问题
1. 迁移执行:使用 cat + pipe 替代 stdin 重定向,解决远程文件读取问题
2. 数据库表检测:修复 SQL 引号嵌套问题,使用正确的 psql 语法
2026-04-19 17:53:29 +08:00
58e52ce1c1 feat(deploy): 增强部署测试套件
新增 6 大测试模块:
1. test_basic_connectivity - 基础连通性 (health, login, refresh-token, /)
2. test_database_connection - Docker PostgreSQL 连接和查询测试
3. test_token_flow - 完整 Token 流程 (登录 → JWT → 受保护接口)
4. test_weather_details_jwt - weather/details 端点 JWT 验证测试
5. test_invalid_token_401 - 无效 Token 返回 401 测试
6. test_response_content - JSON 响应内容结构验证

测试覆盖:
- 本地端口和 HTTPS 域名双重验证
- 数据库表存在性和查询测试
- JWT 生成、验证、受保护接口访问
- 响应格式完整性验证
2026-04-19 17:45:48 +08:00
45ed78a883 feat(deploy): 增强 deploy.sh 日志和服务管理功能
新增选项:
- --logs [N]     查看后端日志(默认50行)
- --tail [N]     实时跟踪后端日志(Ctrl+C 退出)
- --status       查看服务状态
- --post-logs    部署后自动显示日志

改进:
- 修复 --help 选项无法正确处理的 bug
- 优化参数解析逻辑(先选项后位置参数)
2026-04-19 17:40:23 +08:00
14c2ef25de fix(auth): /weather/details 端点自己验证 JWT(修复静默刷新后仍 401 问题)
问题:/weather/details 不在 jwt_middleware 保护范围内,导致即使前端发送 Authorization header,后端也不会验证 JWT。

修复:使用 HttpRequest 直接从 Authorization header 提取并验证 JWT,而非依赖 middleware 注入的 Claims。

验证:curl 测试确认 /weather/details?id=2 返回正确数据
2026-04-19 17:34:35 +08:00
e14c85436b feat(auth): 添加 Refresh Token 双 Token 机制
- 添加 /api/refresh-token 接口支持 Token 续期
- 登录接口返回 access_token 和 refresh_token
- 新增 refresh_tokens 表存储 refresh_token
- 部署脚本添加数据库备份和迁移功能
- deploy.sh 添加 4 项 API 测试
- 更新 AGENTS.md 文档
2026-04-19 16:01:41 +08:00
52991dcfd5 fix(api): 优化 /health 端点错误提示 2026-04-19 00:38:13 +08:00
988828b984 feat(deploy): 添加开发环境 systemd 服务,改进部署文档 2026-04-19 00:31:26 +08:00
44aa62da49 feat(deploy): 优化部署脚本,添加 dry-run、备份、SSH 复用 2026-04-19 00:20:06 +08:00
9d452c4e75 feat: 统一前后端日志和错误处理 2026-04-19 00:14:22 +08:00
fd21e641a2 fix: 将 get_weather_details 和 health_check 移出 JWT 保护作用域作为公开接口 2026-04-18 14:04:49 +08:00
d756694534 docs: 更新 API 文档,澄清 get_weather_details 支持双认证方式
- 说明 get_weather_details 同时支持 JWT 和 temp_token
- 更新路由注册注释
2026-04-18 13:24:07 +08:00
7eb8d1b5c2 refactor: 重构报表生成逻辑,改进代码结构
- 重构 afterbody.js 为模块化结构 (WeatherReport IIFE)
- 优化 HTML 构建和 PDF 生成流程
- 添加更健壮的数据处理函数
- 改进错误处理和调试日志
2026-04-18 13:23:42 +08:00
4a9e85667c docs: 添加服务器资源评估文档
- 新增服务器资源评估章节
- 记录当前服务器配置和资源占用
- 分析业务数据规模
- 评估小/中/大规模资源需求
- 说明 Rust 后端性能特性
- 分析瓶颈和优化建议
- 给出分阶段升级方案
2026-04-17 23:16:11 +08:00
15237d4250 docs: 新增公告系统实现计划
- 新增十四、公告系统章节
- 数据库设计(announcements, user_announcement_reads)
- 用户接口(列表、详情、未读数量)
- 管理员接口(发布、编辑、删除)
- Rust 结构体示例
- 实施优先级
2026-04-17 23:12:21 +08:00
2aeef3e9bf docs: 添加生产环境数据库迁移步骤
- 新增二、生产环境数据库迁移章节
- 记录测试/生产环境数据量对比
- 添加备份和迁移操作步骤
- 添加 memberships/invitation_codes 建表语句
- 添加回滚方案
2026-04-17 23:03:27 +08:00
b6c022d472 docs: 添加命名规范章节并更新付费系统接口
- 新增命名规范章节
  - 前后端 JSON 通信统一使用 camelCase
  - Rust 结构体和数据库使用 snake_case
  - 添加 serde rename 示例
- 更新 12.4 接口设计为 camelCase
- 更新 12.3 累积计算逻辑代码示例
- 更新 13.1 标记为已完成
2026-04-17 22:53:06 +08:00
e02644d6d7 docs: 重构付费系统设计文档
AGENTS.md:
- 支付系统章节新增三种支付模式(微信/邀请码/管理员)
- 添加累积计算逻辑说明
- 说明永久会员使用 2099-12-31 而非 NULL

IMPROVEMENTS.md:
- 重构 12.1-12.7 章节为新的付费系统设计
- 添加 memberships 表设计(冗余表提高查询性能)
- 添加 invitation_codes 表设计
- 详细说明累积计算逻辑和代码示例
- 更新邀请码接口设计(增加 paid_days 字段)
- 更新后端/前端实现要点
- 邀请码生成规则改为 Y/M/P 类型标识
2026-04-17 21:44:27 +08:00
75cdb1d222 docs: 新增邀请码开通会员方案
- IMPROVEMENTS.md 添加方案二:邀请码开通会员
  - 数据库设计(invitation_codes 表)
  - 接口设计(使用邀请码、生成邀请码)
  - 后端/前端实现要点
  - 邀请码生成规则建议
2026-04-17 21:34:03 +08:00
a495d091e5 docs: 补充测试环境和生产环境数据库名称
- 明确区分 milkydata_dev(测试环境)和 milkydata(生产环境)
- 更新 docker exec 命令示例为测试环境
- 添加两个环境的连接字符串
2026-04-17 21:18:43 +08:00
7436e04764 docs: 添加服务器连接和数据库部署信息
- 添加 SSH 连接命令:ssh root@1panel-server
- 说明 PostgreSQL 通过 Docker 部署
- 添加 docker ps 和 docker exec 连接命令
- 注明连接字符串和 127.0.0.1 而非 localhost
2026-04-17 20:53:39 +08:00
61b1174b30 fix: 统一字段命名为 camelCase 并修复详情 API
- models.rs: 将 inspectiontype/assignmentnumber 的 serde rename 改为
  inspectionType/assignmentNumber,与前端 TypeScript 接口保持一致
- models.rs: 为 WeatherDataBrief 添加 isFavorite 字段支持
- models.rs: WeatherData.is_favorite 添加 skip_deserializing 避免 POST
  请求解析失败,同时使用 default 处理数据库 NULL 值
- handlers/weather.rs: get_weather_details 支持 string 和 number 类型的
  id 参数解析
- IMPROVEMENTS.md: 新增第十三章记录本次对话经验(serde 配置、config
  路径解析、TOML 结构等)
2026-04-17 20:47:00 +08:00
bdbba2cd60 feat: 添加收藏功能 API
- models.rs: 添加 is_favorite 字段到 WeatherData 和 WeatherDataBrief
- db.rs: 添加 get_favorites_list 和 set_weather_favorite 函数
- handlers/favorites.rs: 新建收藏 API 处理器
- handlers/mod.rs: 导出 favorites 模块
- main.rs: 注册收藏 API 路由
2026-04-17 17:40:58 +08:00
0ef0f71049 docs: 移除支付网关禁止事项,新增支付系统开发约定
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-17 12:56:26 +08:00
562528a1f0 feat: implement payment order system (create-order, mock-confirm, get-quota) 2026-04-17 12:45:53 +08:00
454139f70d feat: add payment_orders table migration 2026-04-17 12:40:31 +08:00
61f3e79b2a chore: 更新 .gitignore 忽略本地配置和构建产物
- 添加 .clawhub/ - clawhub 配置目录
- 添加 .env.example - 环境变量模板
- 添加 config/ - 本地配置文件目录
- 添加 logs/ - 日志文件目录
2026-04-17 11:13:38 +08:00
da4e6f557e feat: 实现后端多环境配置机制
- 使用 toml crate 替代 config crate 直接读取配置文件
- 创建 config/default.toml、config/development.toml、config/production.toml
- 重写 config.rs 支持多环境配置加载
- 增强 deploy.sh 支持 development/production 环境参数
- 更新 IMPROVEMENTS.md 标记环境区分完成
2026-04-17 11:11:13 +08:00
ca7ddcc55e docs: 添加付费功能系统完整设计文档
- 新增第十二章:付费功能系统
- 支付下单接口 POST /api/payment/create-order
- 支付回调接口 POST /api/payment/callback
- payment_orders 表结构设计
- 配额查询 API GET /api/user/quota
- 定价策略(包月/包年/永久)
- 实施优先级和注意事项
2026-04-16 13:22:48 +08:00
3055023790 docs: 更新项目文档,反映已完成的重构和模块拆分 2026-04-15 13:37:21 +08:00
ef47232b1e feat: 添加图片 Content-Type 支持 (png/jpg/gif/svg/webp) 2026-04-15 13:18:43 +08:00
839e71b28a docs: IMPROVEMENTS.md 添加前端 Bug 修复记录 (9.1) 2026-04-15 12:16:08 +08:00
ccfa9d9315 docs: 更新 IMPROVEMENTS.md 标记 1.1 已完成 2026-04-15 11:52:29 +08:00
a819a0db91 fix: 调整路由顺序,修复静态文件被JWT拦截的问题
- 将 /static/{tail:.*} 路由移到受保护 scope 之前
- 确保静态文件无需认证即可访问
2026-04-15 11:51:59 +08:00
913a235e5c docs: 更新 AGENTS.md 和 IMPROVEMENTS.md,记录已知兼容性问题
AGENTS.md:
- 添加已知兼容性问题章节
  - actix-ratelimit 0.3.1 与 actix-web 4.x 不兼容
  - actix-web-prom 与当前架构不兼容
- 添加路由配置结构说明(App 配置顺序、middleware 应用方式)
- 添加路由优先级说明

IMPROVEMENTS.md:
- 2.1 缺少请求频率限制:标记 ⚠️,记录兼容性问题及备选方案
- 6.1 缺少性能指标收集:标记 ⚠️,记录兼容性问题及备选方案
- 修正无日志聚合的 checkbox 状态
2026-04-15 11:29:20 +08:00
e8990f7771 fix: 隐藏内部错误信息,防止敏感数据泄露
- 移除 ErrorResponse.errmsg 中的 e.to_string() 调用
- 将详细的内部错误信息改为 None,用户看不到内部详情
- 错误详情仍然记录到 JSON 日志,供开发者排查
- 健康检查端点也使用友好的错误信息
- 更新 IMPROVEMENTS.md 标记 1.3 完成

影响范围:
- src/main.rs: login handler (2处)
- src/main.rs: health_check handler (1处)
2026-04-15 11:11:16 +08:00
6b871ca4d6 refactor: 整理路由配置,分离公开接口与受保护接口
- 登录和天气详情接口移至公开区域
- 其他接口统一在 web::scope("") 下受 JWT middleware 保护
- 静态文件和健康检查移至最后
- 为 actix-ratelimit 兼容性问题做准备(当前无法在 actix-web 4.x 使用)

注意:Rate Limiting 功能暂未实现(actix-ratelimit 与 actix-web 4.x 不兼容)
2026-04-15 11:05:21 +08:00
338871796a feat: 添加 /health 健康检查端点
- 新增 GET /health 端点,公开无需认证
- 检查 PostgreSQL 数据库连接状态
- 健康时返回: {"status": "healthy", "database": "connected"}
- 不健康时返回 HTTP 503 + {"status": "unhealthy", "database": "disconnected", "error": "..."}
- 失败时记录错误到 JSON 日志
- 用于负载均衡器、Kubernetes、1Panel 健康探针
- 更新 IMPROVEMENTS.md 标记 6.3 完成
2026-04-15 10:49:15 +08:00