把工程根目录中和"配置加载"、"数据存储"两个领域相关的全部 Go 文件迁到 internal/ 下的子包,按功能分组的第一阶段成果。 internal/config/ - 从 config.go 抽出 Config / MQTTConfig / WebConfig / DatabaseConfig 等 类型并大写导出,函数改名 Default/Load/Write/Validate/BuildTLS 等。 - 测试随被测代码迁移成 package config 的内部测试。 - 根目录留 config.go 作桥接:用 type alias 让旧的小写名(config / mqttConfig / databaseConfig 等)继续可用,避免修改 30+ 处调用方。 internal/store/ - 把 db.go、store_query.go、db_write_queue.go 与 13 个 *_store.go 一并 迁入;26 个 *Record 类型与 store 同包以避免循环依赖。 - store -> Store;50+ 标识符从小写未导出改为大写导出(包括 record、 ListOptions、错误变量、bot/llm/runtime 常量、helpers 等)。 - 新增 DB() / Driver() 访问器供 ai 子系统使用,避免直接访问私有字段。 - bot_pki_store.go 独立出来,把 PKI 解密所需的 store 方法集中归类。 - helpers.go 提供 hashPassword / uint32FromRecord / printJSON 等以前在 其他根目录文件中的辅助;test_helpers_test.go 提供 verifyPassword 与 publicMapTileSourceDTO 让测试可以本地运行而不依赖 main 包。 根目录新增: - store_bridge.go:完整 type-alias / 函数包装层,把 internal/store 的 导出名映射回旧的小写名,让 admin_*_routes.go、web.go、bot_service.go 等仍未迁出的文件继续编译。后续步骤把它们迁到各自领域包后可逐步删除。 - test_helpers_test.go:根目录测试沿用 openTestStore 的入口。 go build ./... 与 go test ./... 全部通过;测试数量与重构前一致。 Co-Authored-By: Claude <noreply@anthropic.com>
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package store
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
// 测试 helper —— 为从 main 包搬过来的测试提供它们原本依赖的小写函数。
|
|
// 这些 helper 不暴露给生产代码使用;它们的行为应当与 main 包对应实现保持一致。
|
|
|
|
// verifyPassword 复刻 auth.go 中的 bcrypt 校验,用于 user_store 的测试。
|
|
func verifyPassword(hash, password string) bool {
|
|
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) == nil
|
|
}
|
|
|
|
// publicMapTileSourceDTO 复刻 admin_map_source_routes.go 中的同名函数,
|
|
// 仅供 map_source_store_test.go 验证 ProxyEnabled 时 URL 是否被改写。
|
|
// 这里返回 map[string]any 而非 gin.H 以避免引入 gin 依赖。
|
|
func publicMapTileSourceDTO(row MapTileSourceRecord) map[string]any {
|
|
urlTemplate := row.URLTemplate
|
|
if row.ProxyEnabled {
|
|
hash := row.URLTemplateHash
|
|
if hash == "" {
|
|
hash = MapTileSourceHash(row.URLTemplate)
|
|
}
|
|
urlTemplate = "/api/map/" + hash + "?x={x}&y={y}&z={z}"
|
|
}
|
|
return map[string]any{
|
|
"id": row.ID,
|
|
"name": row.Name,
|
|
"url_template": urlTemplate,
|
|
"attribution": row.Attribution,
|
|
"max_zoom": row.MaxZoom,
|
|
"enabled": row.Enabled,
|
|
"is_default": row.IsDefault,
|
|
"proxy_enabled": row.ProxyEnabled,
|
|
}
|
|
}
|
|
|
|
// newDBWriteQueue 是 db_write_queue_test.go 期望的旧名字。重新导出供测试使用。
|
|
var newDBWriteQueue = NewWriteQueue
|
|
|
|
// 让 strings 不会被 import-but-not-used(如果上面用不到,就算了——保留以应对将来扩展)
|
|
var _ = strings.TrimSpace
|