Files
maxfandClaude d6d034727b feat: 邮箱找回密码 + 日志体系完善 + SMTP 配置补全
## 功能
- 邮箱找回密码:新增 password_resets 表 + POST /api/auth/forgot-password
  (按接收邮箱反查用户 → 生成一次性 30 分钟令牌 → 复用 SMTP 发重置邮件,
   防枚举统一提示、复用登录限流器防刷)+ POST /api/auth/reset
  (校验令牌有效性 → bcrypt 更新密码 → 作废令牌 → 强制该用户全部会话下线);
  H5 新增 /forgot、/reset 页面,登录页加"忘记密码"入口
- SMTP 全局配置补全:新增发件邮箱 smtp_user / 授权码 smtp_pass 字段
  (H5 + 小程序设置页同步展示与保存),GET 脱敏回显,
  修复"脱敏值含 * 被 POST 写回覆盖真实配置"的 bug
- 新增 cmd/sendmail 真实发送工具(配置走环境变量,敏感信息不落库,
  已用 163 SMTP 465 隐式 SSL 实测发送成功)

## 日志体系
- 死配置 OIL_MONITOR_LOG_DIR 替换为 OIL_MONITOR_LOG_LEVEL
  (debug/info/warn/error,LevelVar 动态切换,上线默认 info 收敛日志)
- 自定义 requestLogger 请求日志中间件(Debug 级:method/path/status/耗时/IP)
- 外部交互日志统一:爬虫抓取 / SMTP / Webhook / 高德 regeo / 微信 code2session,
  成功 Debug、失败 Error、均带 dur_ms、URL 去 query 脱敏防 key/token 泄露
- 定时任务统一 runTask 包装:开始 Debug、完成+时长 Info、失败/panic Error
  (panic 被 recover,不连累调度器)

## 测试
- cron/scheduler_test.go:runTask 成功/失败/panic 三路径单测
- push/sender_test.go:本地假 SMTP 服务器完整发送会话链路 + 服务器拒绝失败路径
- db_test.go:表数量断言 11 → 12(新增 password_resets)

## 部署配置与文档
- Dockerfile / docker-compose.yml / .env.example / README:日志配置同步
  (删 /app/logs 目录与挂载,OIL_MONITOR_LOG_LEVEL)
- .gitignore:忽略 internal/pkg 依赖缓存(349M,防误提交)
- docs/10/21/22/23/24:同步 A18/A19 接口、password_resets 表、任务执行日志、SMTP 字段

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-28 10:26:59 +08:00

3.3 KiB
Raw Permalink Blame History

⛽ 汽油价格监控(Oil Price Monitor)

监控国内成品油调价(发改委 10 工作日机制),预测下次调价方向/幅度,按省展示 92/95/98/0# 最高零售价,算"一箱油多花/省多少",多渠道推送加油建议;支持 微信小程序 与 加油记账/真实油耗。

功能

  • 一期 · 监控预测提醒
    • 国际原油(Brent/WTI)每日采集 + 调价预测(方向/幅度/置信度)
    • 发改委调价公告自动抓取(含调控情形的"应调/实调"差异)
    • 31 省零售价、下次调价倒计时、ECharts 油价趋势
    • 浏览器定位 → 省份选择(最近 5 省 LRU)
    • 多账户(首用户=管理员)、车辆管理、调价成本测算、飞书/企微/钉钉/SMTP 推送
  • 二期 · 微信小程序:原生小程序,微信一键登录,6+2 页面全功能
  • 三期 · 记账功能:独立油耗计算器(无需登录)、加油记录、真实油耗(L/100km、元/km)、漏记检测与级联重算、油耗趋势折线图

技术栈

Go 1.22+ · chi · modernc.org/sqlite(纯 Go 无 CGO)· robfig/cron · goquery · Tailwind/AlpineJS/ECharts(H5)· 原生微信小程序 · Docker

快速开始

本地运行

go run ./cmd/server
# 打开 http://localhost:8080 ,首次注册的账号自动成为管理员

Docker 部署

docker compose up -d --build
# 数据持久化在 ./data(SQLite),日志输出到 stdout(docker logs 查看)

配置(环境变量 OIL_MONITOR_*)

变量 默认 说明
OIL_MONITOR_HOST 0.0.0.0 监听地址
OIL_MONITOR_PORT 8080 监听端口
OIL_MONITOR_DB_PATH data/oilmonitor.db SQLite 路径
OIL_MONITOR_LOG_LEVEL info 日志等级:debug/info/warn/error
OIL_MONITOR_TIMEZONE Asia/Shanghai 业务时区

复制 .env.example 可快速配置。

部署后管理员设置(浏览器访问"设置"页)

配置 用途
高德 Key 浏览器/小程序定位逆编码(个人开发者免费额度够用)
微信 AppID / AppSecret 小程序一键登录(二选一登录方式)
SMTP 服务器 邮件推送(可选)
推送 Webhook 飞书/企微/钉钉 群机器人(可选,按用户)

上线清单

  1. HTTPS:浏览器定位需 HTTPS(否则自动降级为手动选省);Nginx/Caddy 反代 + Let's Encrypt 证书
  2. 微信小程序:注册小程序 → 填 AppID 到 miniprogram/project.config.json → 后端设置页配置 AppID/Secret → 微信后台配 request 合法域名(HTTPS)→ 开发者工具上传 → 类目/隐私协议 → 审核发布
  3. 数据源:发改委 / 新浪财经 / 汽油价格网(移动版)自动采集;页面改版时解析失败会写日志告警

目录

cmd/server          后端入口
internal/           api/auth/config/crawler/cron/db/model/push/service/web
miniprogram/        微信小程序(8 页)
docs/               设计文档(10/20-24 一期 · 30-34 小程序 · 40-45 记账)
Dockerfile          多阶段构建(镜像 ~20MB)
docker-compose.yml  一键部署

文档

docs/ 下 17 份设计文档:概要 / 详细设计 / 功能大纲 / API / 后端任务 / 附录(三阶段)。