- 引入 modernc.org/sqlite(纯 Go 无 CGO,保持单二进制分发)
- store/db.go: Open/Close/IntegrityCheck + WAL/foreign_keys/synchronous PRAGMA
- store/settings.go: key-value CRUD,Get/Set/Delete/GetAll/SetBatch,带 int/bool/duration 类型 helper
- store/voices.go: 完整 CRUD + ErrDuplicate/ErrNotFound/ErrInUse,name 白名单 [a-zA-Z0-9_-]{1,64}
- store/migrate.go: schema 版本号占位(migrate 调度留待 v2)
- 27 个单测覆盖:CRUD/Pragma/Idempotent/Integrity/Unique/DefaultSpeaker 保护
- 测试覆盖率 70.7%,测试二进制 +0.87MB(预期 +30MB,实际大幅低于预期)
- 不改 setting/config.go、main.go、router、controller(按 M0 计划保持改动局部)
验证: go vet ./... 干净; go test ./... store 包全绿
28 lines
1.0 KiB
Go
28 lines
1.0 KiB
Go
package store
|
|
|
|
// schema 版本号演进与迁移函数注册表。
|
|
//
|
|
// 用法:每次结构性变更时 +1 schemaVersion 常量,并在 migrations 切片中追加 applyV<n>。
|
|
// migrate.go 会在 Open 时按版本号顺序应用。
|
|
//
|
|
// 注意:本文件留作未来扩展,本期 M0 阶段 schemaVersion=1,migrate() 在 db.go
|
|
// 内做基础建表,未触发 migrations 调度。切到 v2 时再启用。
|
|
|
|
// Migration 是从 version N-1 升级到 N 的迁移函数。
|
|
type Migration struct {
|
|
From int
|
|
To int
|
|
Fn func(tx interface{ Exec(query string, args ...any) (any, error) }) error
|
|
}
|
|
|
|
// migrations 是按 From 升序排列的迁移列表;首条 From 必须等于 1。
|
|
// 留作占位,本期为空。
|
|
var migrations = []Migration{}
|
|
|
|
// schemaVersionRequested 是期望的 schema 版本号;db.go 里直接写常量。
|
|
// 这里留个常量引用便于未来从 db.go 解耦。
|
|
const schemaVersionRequested = 1
|
|
|
|
// CurrentVersion 返回当前代码期望的 schema 版本。
|
|
func CurrentVersion() int { return schemaVersionRequested }
|