Files
meshtastic_mqtt_server/internal/store/help_store.go
T
kevinandClaude eff4972668 重构:拆出 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>
2026-06-18 13:56:36 +08:00

55 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}