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

76 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ⛽ 汽油价格监控(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
## 快速开始
### 本地运行
```bash
go run ./cmd/server
# 打开 http://localhost:8080 ,首次注册的账号自动成为管理员
```
### Docker 部署
```bash
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 / 后端任务 / 附录(三阶段)。