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:
@ -56,7 +56,10 @@ func TestLunarDayNamesCoverAllPrefixForms(t *testing.T) {
|
||||
t.Fatalf("日名表要有 31 项(下标 0 占位 + 1..30),实际 %d", len(lunarDayNames))
|
||||
}
|
||||
// 五种前缀形态各至少要有一个代表 —— 少任何一种就是漏了一类日子
|
||||
for _, pair := range []struct{ day int; want string }{
|
||||
for _, pair := range []struct {
|
||||
day int
|
||||
want string
|
||||
}{
|
||||
{1, "初一"}, // 初
|
||||
{11, "十一"}, // 十
|
||||
{20, "二十"}, // 二(这一条是 WebUI 漏过的那个)
|
||||
@ -137,15 +140,16 @@ func TestLunarLeapMonthIsMarked(t *testing.T) {
|
||||
// 越界/极端值**不许 panic**(这是 recover 那层的实质),且真换不出来时必须 ok=false 而不是给个假日子。
|
||||
//
|
||||
// ★ 这条我第一版写错了:我断言「time.Time{} 应当换不出来」,实测库**换得出来**
|
||||
// (0001-01-01 → 「〇年冬月十八」)—— 断言的是我的**想象**而不是实际行为。
|
||||
// 现在改成断言真正的契约:① 不 panic;② 换不出来就不给(不猜);
|
||||
// ③ **给出来的时候文字里不许出现“无效/NaN”这类失败标记**。
|
||||
//
|
||||
// (0001-01-01 → 「〇年冬月十八」)—— 断言的是我的**想象**而不是实际行为。
|
||||
// 现在改成断言真正的契约:① 不 panic;② 换不出来就不给(不猜);
|
||||
// ③ **给出来的时候文字里不许出现“无效/NaN”这类失败标记**。
|
||||
func TestLunarLabelsRefuseRatherThanGuess(t *testing.T) {
|
||||
cases := []time.Time{
|
||||
time.Time{}, // 零值(公元 1 年)
|
||||
time.Date(1900, 6, 15, 0, 0, 0, 0, time.UTC), // 库的传统下限附近
|
||||
time.Date(2100, 6, 15, 0, 0, 0, 0, time.UTC), // 上限
|
||||
time.Date(9999, 12, 31, 0, 0, 0, 0, time.UTC), // 极端上限
|
||||
time.Time{}, // 零值(公元 1 年)
|
||||
time.Date(1900, 6, 15, 0, 0, 0, 0, time.UTC), // 库的传统下限附近
|
||||
time.Date(2100, 6, 15, 0, 0, 0, 0, time.UTC), // 上限
|
||||
time.Date(9999, 12, 31, 0, 0, 0, 0, time.UTC), // 极端上限
|
||||
}
|
||||
for _, d := range cases {
|
||||
got, ok := func() (l LunarLabels, ok bool) {
|
||||
|
||||
Reference in New Issue
Block a user