|
|
3cce81321f
|
test: 补充单元测试并修复 urlencoding 解码 bug
- auth.rs 新增 JWT 生成/验证回环、篡改拒绝、refresh token 随机性、临时 token 有效期测试
- payment.rs 新增套餐定义、URL 解码、支付宝表单解析(UTF-8/GBK)、RSA2 签名验签、UA 检测测试
- 修复 urlencoding 两个真实 bug:UTF-8 多字节序列乱码、不完整转义吞字符
- 移除 db.rs 悬空 doc 注释,修复 auth.rs 冗余引用(clippy 0 警告)
- cargo test 从 2 个增至 36 个全过
- 同步 IMPROVEMENTS.md(索引/重复查询/测试覆盖/公告系统状态)
|
2026-08-14 13:09:55 +08:00 |
|
|
|
49d740e27c
|
fix: 移除订单自动确认,仅依赖支付宝回调验签;rsa2_verify 支持裸 base64 DER 公钥;.env 取消 git 跟踪
|
2026-08-10 15:49:27 +08:00 |
|
|
|
2ce97243ab
|
fix: 全量代码审计修复 — 30项
Deploy Backend / deploy (push) Has been cancelled
P0 - Panic 风险修复:
- payment.rs: unwrap() → let-else safe handling
- payment.rs: get_jwt_secret() expect → Result/AppError
- auth.rs: openid 切片添加 len >= 8 守卫
- main.rs: 启动时 expect → unwrap_or_else 描述性 panic
- main.rs: Directive::from_str 添加 fallback
P1 - 逻辑/安全修复:
- payment.rs: urlencoding() + 解码 bug 修复 (移除 had_escape)
- payment.rs: Mock 支付添加 check_mock_payment_allowed 检查
- db.rs: 永久会员 NULL → 2099-12-31 一致化
- user.rs: 维护模式添加安全说明注释
- 自动清理 unused_variables 警告 (_is_mobile)
P2 - 错误吞没修复:
- main.rs: 3 处定时任务 let _ = → if let Err = tracing::error!
- db.rs + admin.rs: 7 处通知/审计日志 let _ = → tracing::warn!
- auth.rs: refresh token 保存 add warn 日志
P3 - 死代码清理:
- models.rs: 移除 TokenResponse (dead)
- models.rs: 移除 AppState 中 5 个未使用字段 (env var 直接读取)
- error.rs: 移除 3 个 dead ErrorResponse 方法
- rate_limiter.rs: extract_client_ip_from_header → #[cfg(test)]
- models.rs: 注释 typo fix (user_ytpe → user_type)
- db.rs: RefreshToken 添加 deserialization 注释
Shell 脚本修复:
- deploy.sh: run_migrations 移到 restart_service 之前
- test.sh: 移除 EXIT trap 覆盖; heredoc 引号修复; 维护模式添加 restart
- common.sh: mock_key 添加 sed 转义 (防 / & 注入)
验证: cargo check 0 warnings, 8 tests passed
|
2026-07-23 12:40:47 +08:00 |
|
|
|
941a8e5350
|
fix: insert_weather_data 配额查询使用已重命名的 membership_expires_at 列
|
2026-07-19 09:52:35 +08:00 |
|
|
|
a47502f07e
|
perf: 合并 insert_weather_data N+1 查询为单次;添加 Docker 内存限制和磁盘告警
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 10:52:24 +08:00 |
|
|
|
178008496e
|
优化: Keep-Alive/rate-limiter/dead-code清理 + deploy.sh蓝绿自动检测 + 压测文档
|
2026-07-03 19:45:57 +08:00 |
|
|
|
6d066c8e82
|
fix: 取消订单错误提示区分已支付/已取消状态+支付确认提示优化
|
2026-06-17 13:32:01 +08:00 |
|
|
|
43c349919d
|
fix: 防止用户误取消已付款订单-回调重新激活+2分钟内禁止取消+成功页30s超时提示
|
2026-06-15 10:37:28 +08:00 |
|
|
|
e672f00b66
|
fix: 支付确认TOCTOU竞态(AND status=pending)+定时器补充过期订单清理
|
2026-06-10 14:11:47 +08:00 |
|
|
|
caf3c7cc61
|
fix: 支付后增加会员时长验证(verify_membership_after_payment)防止ELSE静默错误
|
2026-06-07 16:34:30 +08:00 |
|
|
|
955e8d9501
|
chore: 受影响的3位测试用户补偿91天会员+发送感谢通知
|
2026-06-05 22:25:37 +08:00 |
|
|
|
55259a96a6
|
fix: 套餐定价更新+新增季卡/半年卡+SQL interval适配
|
2026-05-27 09:18:20 +08:00 |
|
|
|
d20c785d38
|
refactor: 移除会员过期通知(check_member_expired)
|
2026-05-26 15:29:52 +08:00 |
|
|
|
667231520d
|
feat: 自动通知-支付成功+到期前7天提醒+已过期通知
|
2026-05-26 15:28:11 +08:00 |
|
|
|
722ab837d0
|
refactor: is_paid→is_member, paid_expires_at→membership_expires_at 全局重命名
|
2026-05-25 15:33:31 +08:00 |
|
|
|
e6e04979dc
|
fix: get_user_quota 返回 was_paid 字段
|
2026-05-25 13:45:55 +08:00 |
|
|
|
fed95531fe
|
fix: 维护模式使用500条临时限额而非完全跳过(防滥用)
|
2026-05-25 13:34:40 +08:00 |
|
|
|
f82dd8d5de
|
feat: 添加PAYMENT_MAINTENANCE_MODE维护模式 + ServiceUnavailable错误
|
2026-05-25 13:32:16 +08:00 |
|
|
|
72cbb8ff28
|
fix: 添加用户取消订单 + 管理员手动退款端点
|
2026-05-25 13:09:54 +08:00 |
|
|
|
5f3b919e92
|
fix: 添加后台定时重试 + 管理员强制确认 + 审计日志 + mock守卫
|
2026-05-25 13:04:19 +08:00 |
|
|
|
af2837e15e
|
fix: 修复付费机制失效处理的5个后端缺口
- 新增POST /payment/refund-notify支付宝退款Webhook
- 新增待支付订单自动清理(超过24h→cancelled, 含启动清理)
- 新增web登录码过期启动清理
- 永久会员用NULL替代硬编码2099-12-31
- 修复缺失的is_paid_active数据库函数(改用内联SQL)
|
2026-05-25 12:07:15 +08:00 |
|
|
|
54484482c3
|
feat: 抽测风速改为用户可自定义次数(增删按钮)
- models.rs:新增 spot_check_count 字段(默认 5)
- db.rs:INSERT/SELECT 添加 spotcheckcount 列
- migrations/007:ALTER TABLE weather_data ADD spotcheckcount
- afterbody.js:使用 data.spotCheckCount 动态渲染抽测数据
|
2026-05-18 09:51:43 +08:00 |
|
|
|
061c2bbb5a
|
fix: 修复多处代码质量问题-移除unwrap/println/dead-code/重复代码/错误吞咽
|
2026-05-11 13:38:41 +08:00 |
|
|
|
228a9f3b3b
|
feat: 添加 GET /api/payment/orders 接口,返回用户订单记录
|
2026-05-07 17:12:31 +08:00 |
|
|
|
a588478ab0
|
fix: 修复付费会员累加逻辑和迁移误判问题
- 修复 confirm_payment_order 累加逻辑:GREATEST(COALESCE(paid_expires_at, NOW()), NOW()) + days
- 永久会员改为 2099-12-31 而非 NULL,避免与未付费用户的 NULL 混淆
- 禁用 003_set_all_users_paid.sql 迁移(将所有已有用户设为永久付费)
- 后端部署后已回滚 Dev 数据库中 73 个被误设为付费的用户
|
2026-05-07 15:55:37 +08:00 |
|
|
|
e8286310ea
|
feat(payment): 接入支付宝沙箱环境 (alipay.trade.page.pay)
|
2026-04-23 12:23:53 +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 |
|
|
|
9d452c4e75
|
feat: 统一前后端日志和错误处理
|
2026-04-19 00:14:22 +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 |
|
|
|
562528a1f0
|
feat: implement payment order system (create-order, mock-confirm, get-quota)
|
2026-04-17 12:45:53 +08:00 |
|
|
|
6d2824589c
|
feat: 添加用户信息存储功能
- 添加 avatar_url 和 nickname 字段到 users 表
- 修改 get_user_by_id 查询包含新字段
- 添加 save_user_profile API
- 优化 deploy.sh 默认使用 release 模式
|
2026-03-26 14:28:46 +08:00 |
|
|
|
fe514ebfc4
|
fix: 修复 desc 保留关键字导致的 SQL 语法错误
desc 是 PostgreSQL 保留关键字,需要加双引号转义
|
2026-03-25 17:15:17 +08:00 |
|
|
|
484146aba9
|
支付系统核心:配额限制与用户付费状态管理
- 添加 tokio 依赖用于异步测试
- 启用 User 结构体,添加 is_paid/is_admin/paid_expires_at 字段
- 添加 UpdatePaymentRequest 请求体
- insert_weather_data 集成配额检查逻辑
- 新增 get_user_by_id、count_user_weather_data、update_user_payment_status
- 添加 payment_fields 数据库迁移脚本
|
2026-03-25 13:17:36 +08:00 |
|
|
|
67c3be3c9e
|
在数据库中添加了Version字段,并修改前端,不再使用指定的Version
|
2026-01-08 14:12:34 +08:00 |
|
|
|
a99fb905ec
|
修改了point_height以支持可选值
|
2025-10-18 10:21:59 +08:00 |
|
|
|
ebe4e69222
|
根据前端上传数据的修改,修正了相关代码
|
2025-10-17 12:07:52 +08:00 |
|
|
|
9880124c87
|
在weather_data表中添加了一个字段
|
2025-09-29 16:02:50 +08:00 |
|
|
|
58a0b6858a
|
修改了错误的数据库方法
|
2025-09-28 14:28:16 +08:00 |
|
|
|
02703de89c
|
修改了get_weather方法,现在可以实现前端的需求了
|
2025-09-27 17:29:46 +08:00 |
|
|
|
6d680260a2
|
添加了weatherlistresponse并进行了一些修改
|
2025-09-27 16:21:04 +08:00 |
|
|
|
5c269328ee
|
修改了db.rs中的create_pool()方法
|
2025-09-24 14:07:31 +08:00 |
|
|
|
ef326d82ed
|
将insert_weather_data方法移到db.rs
|
2025-09-23 10:27:41 +08:00 |
|
|
|
f567e66485
|
访问users数据库
|
2025-09-05 15:10:30 +08:00 |
|