|
|
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 |
|
|
|
178008496e
|
优化: Keep-Alive/rate-limiter/dead-code清理 + deploy.sh蓝绿自动检测 + 压测文档
|
2026-07-03 19:45:57 +08:00 |
|
|
|
640f57b6da
|
feat: 通知系统(notifications表+CRUD接口+管理员接口)
|
2026-05-26 15:02:49 +08:00 |
|
|
|
722ab837d0
|
refactor: is_paid→is_member, paid_expires_at→membership_expires_at 全局重命名
|
2026-05-25 15:33:31 +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 |
|
|
|
8c9552fbfc
|
feat: 新增支付页面接口,为接入支付宝做准备
- GET /payment: 套餐选择页(无需认证,外部浏览器打开)
- GET /payment/page: 支付引导页(需 JWT,创建订单)
- GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT)
- AppState 新增支付宝配置字段(可选)
- afterbody.js: PDF下载增加状态提示和重试按钮
|
2026-04-23 10:48:31 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
a819a0db91
|
fix: 调整路由顺序,修复静态文件被JWT拦截的问题
- 将 /static/{tail:.*} 路由移到受保护 scope 之前
- 确保静态文件无需认证即可访问
|
2026-04-15 11:51:59 +08:00 |
|
|
|
ce34896525
|
fix: 修复calculatedwindspeed字段命名不匹配问题
- 后端serde添加alias以接受camelCase、snake_case和原始数据库字段名
- 前端移除调试日志
- 修复afterbody.js中引用calculatedwindspeed→calculatedWindSpeed
|
2026-04-14 10:55:56 +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 |
|
|
|
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 |
|
|
|
bd60a72e68
|
修改了convertedwindspeed为float
|
2025-10-17 19:39:12 +08:00 |
|
|
|
ebe4e69222
|
根据前端上传数据的修改,修正了相关代码
|
2025-10-17 12:07:52 +08:00 |
|
|
|
7fa1ae6301
|
使用了logger来进行后端的消息记录
|
2025-09-30 15:59:15 +08:00 |
|
|
|
9880124c87
|
在weather_data表中添加了一个字段
|
2025-09-29 16:02:50 +08:00 |
|
|
|
56844a537f
|
可以正常使用get_weather_details获取前端指定的数据了
|
2025-09-29 11:20:21 +08:00 |
|
|
|
58a0b6858a
|
修改了错误的数据库方法
|
2025-09-28 14:28:16 +08:00 |
|
|
|
bf560ccd8c
|
修改错误的weatherdata类型
|
2025-09-28 09:33:28 +08:00 |
|
|
|
ce162bb289
|
禁用不需要的struct User
|
2025-09-27 18:37:40 +08:00 |
|
|
|
02703de89c
|
修改了get_weather方法,现在可以实现前端的需求了
|
2025-09-27 17:29:46 +08:00 |
|
|
|
6d680260a2
|
添加了weatherlistresponse并进行了一些修改
|
2025-09-27 16:21:04 +08:00 |
|
|
|
051cad1c7a
|
在weather_data的struct 中的id字段添加了skip的方法,使前端可以正常使用
|
2025-09-26 16:11:42 +08:00 |
|
|
|
1c2eb82248
|
使用了jwt作为身份验证和分发
|
2025-09-26 13:48:18 +08:00 |
|
|
|
a4f2f5bf6b
|
将struct从main移动到models
|
2025-09-25 15:10:03 +08:00 |
|
|
|
bf6045ece2
|
将WeatherData移到models.rs中
|
2025-09-23 10:19:59 +08:00 |
|
|
|
40d4c9ad49
|
weather data upload test
|
2025-09-12 09:25:15 +08:00 |
|
|
|
00a4faa410
|
添加weatherdata表的struct
|
2025-09-10 16:24:01 +08:00 |
|
|
|
f567e66485
|
访问users数据库
|
2025-09-05 15:10:30 +08:00 |
|