|
|
917d69c171
|
feat: Graceful shutdown (10s);backup 格式兼容 .dump.gz;容器连接监控
Deploy Backend / deploy (push) Has been cancelled
|
2026-07-15 11:05:11 +08:00 |
|
|
|
178008496e
|
优化: Keep-Alive/rate-limiter/dead-code清理 + deploy.sh蓝绿自动检测 + 压测文档
|
2026-07-03 19:45:57 +08:00 |
|
|
|
e672f00b66
|
fix: 支付确认TOCTOU竞态(AND status=pending)+定时器补充过期订单清理
|
2026-06-10 14:11:47 +08:00 |
|
|
|
2aea682098
|
fix: reqwest Client添加10s超时防止登录请求挂起阻塞worker
|
2026-06-09 15:44:48 +08:00 |
|
|
|
f8bee8f8b4
|
fix: 后台定时清理refresh_token+清理payment.rs死代码
|
2026-06-05 22:35:02 +08:00 |
|
|
|
832a2003f5
|
fix: 绿色环境(:4434)启用HTTPS-代码硬编码端口列表+配置路径修正
|
2026-06-02 12:16:27 +08:00 |
|
|
|
2470f4265b
|
feat: 添加会员订阅检查脚本 check-members.sh
|
2026-06-02 10:34:09 +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 |
|
|
|
640f57b6da
|
feat: 通知系统(notifications表+CRUD接口+管理员接口)
|
2026-05-26 15:02:49 +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 |
|
|
|
5dce0e3332
|
fix: sentry init 日志从 info! 改为 eprintln!(tracing 初始化前不输出)
|
2026-05-14 10:59:48 +08:00 |
|
moira
|
f8a95c7417
|
feat: 集成 Sentry 错误监控 + 前端错误上报中继
后端:
- Cargo.toml 添加 sentry/sentry-actix/sentry-tracing (v0.48)
- main.rs 条件初始化 Sentry(SENTRY_DSN 环境变量控制)
- 新增 handlers/sentry.rs — POST /api/sentry/events 前端中继端点
- sentry-actix 全局中间件 + sentry-tracing 自动捕获 tracing::error!
- .env.example 添加 SENTRY_DSN / SENTRY_TRACES_SAMPLE_RATE 配置
前端:
- 新增 utils/sentryReporter.ts (批量上报/防抖/开发环境跳过)
- app.ts 全局错误处理接入 Sentry (wx.onError/onUnhandledRejection/onPageNotFound)
Sentry 未配置 DSN 时完全无操作,无性能开销
|
2026-05-14 10:12:09 +08:00 |
|
moira
|
27c8979690
|
fix: 全量代码审计修复—安全/死代码/错误处理/配置净化
P0 安全修复:
- 支付宝回调验签 (alipay_notify BTreeMap + rsa2_verify)
- JWT fallback 'default_secret' 改为 .expect() (panic保底)
- 安全响应头中间件 (CSP/X-Frame-Options/HSTS)
P1 死代码清理:
- 移除孤儿文件 src/alipay.rs (284行, 无mod注册)
- 移除Cargo未使用依赖 (actix-files/error/log/hex/digest)
- log::info! → tracing::info! (auth.rs)
- 移除 config.rs server_host + 3个TOML定义
P1 质量修复:
- 修复 weather.rs unwrap() → unwrap_or
- 修复 auth.rs+payment.rs 错误吞咽 (add tracing::warn)
- 修复 main.rs 3x parse().unwrap → unwrap_or
P3 运维:
- 新增 scripts/backup-db.sh (定时备份用)
- 新增 README.md (快速入门文档)
- deploy.sh 集成 backup-db.sh 上传
|
2026-05-13 17:20:31 +08:00 |
|
moira
|
bded0113ee
|
refactor: 配置安全加固-从TOML移除密钥+去除死代码+统一端口
P0: 从config/production.toml和config/development.toml移除wechat_secret/jwt_secret
这些密钥现在仅通过.env(EnvironmentFile)加载,不再进入Git历史
config.rs: 新增直接环境变量名回退(JWT_SECRET而非仅APP_JWT_SECRET)
P1: - 移除config.rs中的server_ports字段(死代码,未被任何代码使用)
- 简化main.rs端口fallback: 生产环境仅4433,开发环境仅8080/3000
- .env.example版本号0.2.3→0.3.0
Docs: - AGENTS.md测试域名xmclassmate.top/dev→dev.xmclassmate.top
|
2026-05-13 15:17:45 +08:00 |
|
|
|
228a9f3b3b
|
feat: 添加 GET /api/payment/orders 接口,返回用户订单记录
|
2026-05-07 17:12:31 +08:00 |
|
|
|
a05b46dfe2
|
feat: 添加 POST /api/payment/sync-order 接口,用于强制同步订单会员状态
|
2026-05-07 16:58:55 +08:00 |
|
|
|
580e68b58c
|
feat(payment): 支持 URL 参数直接传递 JWT 登录
|
2026-04-27 13:13:32 +08:00 |
|
|
|
48ed2ca9ea
|
fix(main): 修正 create_server_config 函数结构
|
2026-04-27 09:26:51 +08:00 |
|
|
|
bb20d82d49
|
fix(auth): 修复 web::scope("") 路由顺序导致 web-login 被 JWT 拦截的问题
|
2026-04-27 09:25:14 +08:00 |
|
|
|
e6048ea010
|
feat(auth): 实现登录限流和性能优化
性能优化:
- 添加数据库索引优化查询性能 (006)
- weather_data: user_id, date, is_favorite 索引
- users: openid 索引
- payment_orders: status 索引
- 新增 refresh_tokens 表支持双 Token 机制 (004)
- 新增 web_login_codes 表支持网页端扫码登录 (005)
安全增强:
- 实现基于 IP 的登录限流 (rate_limiter.rs)
- 滑动窗口算法: 5次/分钟/IP
- 自动清理过期记录
- 429 TooManyRequests 响应
新模块:
- src/rate_limiter.rs: 限流模块
- src/alipay.rs: 支付宝签名模块 (RSA2)
- src/error.rs: 统一错误类型 (含 TooManyRequests)
- src/handlers/meta.rs: 元数据处理器
代码清理:
- 修复 .gitignore 规则,正确跟踪 src/ 和 migrations/
|
2026-04-24 16:13:49 +08:00 |
|
|
|
693075a30c
|
fix(auth): 将 web_login_confirm 移出 JWT scope,无需认证
登录码本身就是认证凭证,小程序确认时可能无有效 JWT。
改为无需 JWT,登录码 + openid 验证即可。
|
2026-04-24 14:48:30 +08:00 |
|
|
|
034aa66ed8
|
feat(payment): 实现网页端登录码流程(无需微信登录)
- 新增 GET /payment/generate-code:网页端生成 ASD-XXXXXX 登录码
- 新增 GET /payment/login-status:网页轮询查询登录码确认状态
- web_generate_login_code 和 web_login_confirm 增加 JWT 保护
- payment_index JS 改为真实调用 generate-code 并轮询
- 添加 rand crate 依赖
|
2026-04-24 10:51:06 +08:00 |
|
|
|
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 |
|
|
|
ea705f0917
|
feat(auth): 添加沙箱测试用 mock_login 接口 (GET /api/mock-login)
|
2026-04-23 13:11:10 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
741d6acff1
|
feat: 升级日志系统为 tracing 结构化日志
- 替换 env_logger 为 tracing + tracing-subscriber
- 统一使用 tracing::{debug, error, info, warn} 日志宏
- 消除所有 eprintln!/println 调用
- 添加 JSON 格式日志输出便于 ELK Stack 收集
- 添加文件日志轮转(每天一个新文件 ./logs/rust-backend-{date}.log)
- 日志等级过滤:rust_backend=info, actix_web=info, sqlx=warn
- 更新 IMPROVEMENTS.md 标记 6.1 日志系统两项完成
|
2026-04-15 10:39:30 +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 |
|
|
|
34f698ded2
|
feat: 添加获取当前用户信息 API
新增 GET /api/user/profile 接口
- 返回用户付费状态和管理员标识
- 计算付费是否有效(考虑过期时间)
|
2026-03-25 16:08:39 +08:00 |
|
|
|
fa34e6597f
|
添加管理员API端点
- .env 添加 FREE_USER_DATA_LIMIT 配置
- 新增 GET /api/admin/users/{id} 管理员获取用户信息
- 新增 PUT /api/admin/users/{id}/payment 更新用户付费状态
- post_weather_data 集成 JWT 认证,使用 claims.user_id
- 管理员接口通过数据库查询验证 is_admin
|
2026-03-25 13:17:53 +08:00 |
|
|
|
f7450bce7f
|
修改了服务只监听本地端口
|
2025-10-21 10:07:32 +08:00 |
|
|
|
9e76976a56
|
修改了端口
|
2025-10-21 09:28:42 +08:00 |
|
|
|
edf6200acd
|
修改了不规范的temp_token返回
|
2025-10-17 23:59:49 +08:00 |
|
|
|
9ff20c16c3
|
删除了多余的info
|
2025-10-17 22:51:49 +08:00 |
|
|
|
bd60a72e68
|
修改了convertedwindspeed为float
|
2025-10-17 19:39:12 +08:00 |
|