style(server): gofmt 注释规范 + init.sql 补 parent_session_id + 新增 ratelimit 判据

## 主体是 gofmt

`server/` 下 20 个文件的改动里,**142/147 行是注释与缩进** ——
Go 1.19+ 的 gofmt 把块注释里的 `//   x` 规范成 `//\tx`。
功能零变化。

## 一处实质:init.sql 补 parent_session_id

`ALTER TABLE sessions ADD COLUMN IF NOT EXISTS parent_session_id
 TEXT REFERENCES sessions(session_id)`

远端已在 `db/migrate.go` 的 `sqliteAddColumns` 结构迁移通道里加了同一列;
init.sql 是**全新库**的建库脚本,缺这列会让新库少一个字段。

- `IF NOT EXISTS` ⇒ 与结构迁移通道幂等,两者并存无害
- 默认空 = 根节点;**不据历史数据猜父子**(猜错会让线索拓扑失真,比没有更糟)

## 新增 handler/ratelimit_test.go(162 行)

速率限制的判据。此前这一块没有独立判据。

## 验证(本机实跑,非推断)

    go build ./...                              通过
    go vet ./internal/{handler,repo,db,sse}/   通过
    go test -count=1(handler/repo/db/sse/blob)
      handler  41.3s  ok
      repo    101.9s  ok
      db       1.1s  ok
      sse      0.01s ok
      blob     0.08s ok

`-count=1` 是刻意的:第一遍跑出来全是 `(cached)`,那种绿灯不算数。
This commit is contained in:
2026-10-05 09:26:07 +08:00
parent be9bfd3cd1
commit a8d6811cd7
21 changed files with 246 additions and 69 deletions

View File

@ -84,9 +84,10 @@ var lunarMonthNames = []string{
// lunarDayNames 农历日名查表。
//
// ★ **不用正则从 `Date.String()` 里截**:实测日名前缀有五种形态
// (初一/十一/二十/廿一/三十),写一个覆盖全部的正则既难读又容易漏 ——
// WebUI 那版就漏了「二十」,20 号会退化成显示整串「七月二十」。
// 这个表与 `client/electron/src/lib/lunar.ts` 的 `LUNAR_DAY_NAMES` 逐字一致。
//
// (初一/十一/二十/廿一/三十),写一个覆盖全部的正则既难读又容易漏 ——
// WebUI 那版就漏了「二十」,20 号会退化成显示整串「七月二十」。
// 这个表与 `client/electron/src/lib/lunar.ts` 的 `LUNAR_DAY_NAMES` 逐字一致。
var lunarDayNames = []string{
"", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十",
"十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十",
@ -96,8 +97,9 @@ var lunarDayNames = []string{
// labelsOf 把一个公历日期转成农历标签。
//
// ★ 越界/异常一律回 *零值+false*,**不猜**:农历换算是天文算法,
// 猜一个日子比不显示更糟("看着有农历、其实是错的"最难发现)。
// `lunar.FromSolar` 内部对极端年份会 panic 保护,这里再兜一层。
//
// 猜一个日子比不显示更糟("看着有农历、其实是错的"最难发现)。
// `lunar.FromSolar` 内部对极端年份会 panic 保护,这里再兜一层。
func labelsOf(t time.Time) (LunarLabels, bool) {
var d lunar.Date
ok := func() (good bool) {