重构:拆出 internal/config 与 internal/store 子包
把工程根目录中和"配置加载"、"数据存储"两个领域相关的全部 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>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const maxHelpMarkdownBytes = 200 * 1024
|
||||
|
||||
const DefaultHelpMarkdown = `## 连接地址
|
||||
|
||||
将 Meshtastic 设备连接到本服务提供的 MQTT broker。
|
||||
|
||||
- 默认地址:**mesh.gat-iot.com**
|
||||
- 默认端口:**1883**
|
||||
- 用户名称:**meshdev**
|
||||
- 密码:**large4cats**
|
||||
|
||||
## 频道加密要求
|
||||
|
||||
为了让服务能够解析 Meshtastic MQTT payload,频道需要满足以下任一条件:
|
||||
|
||||
- 频道不加密。
|
||||
- 使用 Meshtastic 默认 PSK:**AQ==**。
|
||||
|
||||
如果使用自定义加密密钥,数据可能会被判定为无法解密并丢弃。
|
||||
|
||||
## 反馈问题
|
||||
|
||||
如果遇到 bug,请在 GitHub [提交 issue](https://github.com/wuwenfengmi1998/meshtastic_mqtt_server),或联系邮箱 [kevin@lmve.net](mailto:kevin@lmve.net)。`
|
||||
|
||||
func (s *Store) GetLatestHelpContent() (*HelpContentRecord, error) {
|
||||
var row HelpContentRecord
|
||||
if err := s.db.Order("id DESC").Take(&row).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &row, nil
|
||||
}
|
||||
|
||||
func (s *Store) InsertHelpContent(markdown, createdBy string) (*HelpContentRecord, error) {
|
||||
markdown = strings.TrimSpace(markdown)
|
||||
createdBy = strings.TrimSpace(createdBy)
|
||||
if markdown == "" {
|
||||
return nil, fmt.Errorf("markdown is required")
|
||||
}
|
||||
if len([]byte(markdown)) > maxHelpMarkdownBytes {
|
||||
return nil, fmt.Errorf("markdown exceeds %d bytes", maxHelpMarkdownBytes)
|
||||
}
|
||||
row := HelpContentRecord{Markdown: markdown, CreatedBy: createdBy}
|
||||
if err := s.db.Create(&row).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &row, nil
|
||||
}
|
||||
Reference in New Issue
Block a user