第三批(最终批):把 root 中剩下所有领域文件按功能搬到 internal/ 下。
完成后根目录从 46 个 .go 文件降到 14 个,其中 11 个是 bridge(type alias
+ thin wrapper),仅供尚未改造的 main.go 引用。
新增包
- internal/bot/ Service / TextSender / NewPKIKeyResolver /
RegisterRoutes,含 PKI 直连发送、节点信息广播、
outbound DM 持久化等业务逻辑。
- internal/sign/ SignDTO / SignDayCountDTO / RegisterAdminRoutes,
把原来分散在 admin_sign_routes.go 与 web.go 中的
sign DTO/路由收拢到一处。
- internal/mapsource/ AdminDTO / PublicDTO / RegisterAdminRoutes /
RegisterPublicRoutes。
- internal/llmadmin/ LLM 消息队列、Provider、ToolRouter、PrimaryConfig 的
admin 路由。
- internal/web/ 路由总入口(NewRouter/NewHTTPServer/ServeUnixSocket)、
各资源的 GET API、admin 用户/登录/MQTT 状态、所有
DTO 函数。把 auth.go 的 sessionClaims 升级为
auth.SessionClaims;mqtt_status.go 重写成
MQTTRuntimeStatus / AdminMQTTStatus 结构体并把
client info 解析在 web 包内自带,不再依赖 main 包。
map_tile_proxy_routes 与测试一起搬入。
修改
- web.go 中 parseListOptions / writeListResponse / ptrString 等本地 helper
改为对 internal/webutil 的 thin wrapper,避免重复实现。
- internal/auth 在 step 4 已创建,本批中 web 包正式开始引用其 Manager /
RequireAdmin / SessionClaims。
根目录新增 bridge:bot_bridge.go / sign_bridge.go / mapsource_bridge.go /
llmadmin_bridge.go / web_bridge.go。后者把 mqttRuntimeStatus 包成
webpkg.MQTTStatusProvider 适配器,使 main.go 中旧字段名保持可用。
go build ./... / go test ./... 全部通过;测试数量未变。
Co-Authored-By: Claude <noreply@anthropic.com>
57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
package main
|
|
|
|
// 桥接到 internal/web — 让 main.go 中使用 newSessionManager / newRouter /
|
|
// mqttRuntimeStatus / serveHTTPUnixSocket 这些旧名字的代码继续编译。
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
mqtt "github.com/mochi-mqtt/server/v2"
|
|
|
|
"meshtastic_mqtt_server/internal/auth"
|
|
mqttforwardpkg "meshtastic_mqtt_server/internal/mqttforward"
|
|
storepkg "meshtastic_mqtt_server/internal/store"
|
|
webpkg "meshtastic_mqtt_server/internal/web"
|
|
)
|
|
|
|
// 旧类型/旧函数名 → 新位置的别名。
|
|
|
|
type mqttRuntimeStatusInternal = webpkg.MQTTRuntimeStatus
|
|
|
|
// mqttRuntimeStatus 旧名字保持小写、字段也是小写——这里用一个适配类型把
|
|
// main 包的旧字段写法包到 web 包导出的大写字段上。
|
|
type mqttRuntimeStatus struct {
|
|
server *mqtt.Server
|
|
address string
|
|
tls bool
|
|
stats *meshtasticMessageStats
|
|
dbQueue *dbWriteQueue
|
|
}
|
|
|
|
// 让 mqttRuntimeStatus 自动实现 webpkg.MQTTStatusProvider,把请求转给真正的实现。
|
|
func (m mqttRuntimeStatus) Status() webpkg.AdminMQTTStatus {
|
|
return webpkg.MQTTRuntimeStatus{
|
|
Server: m.server,
|
|
Address: m.address,
|
|
TLS: m.tls,
|
|
Stats: m.stats,
|
|
DBQueue: m.dbQueue,
|
|
}.Status()
|
|
}
|
|
|
|
// 让旧代码里 `mqttforwardpkg.Stats` 别名留作 main 包内可见。
|
|
var _ *mqttforwardpkg.Stats = (*meshtasticMessageStats)(nil)
|
|
|
|
func newSessionManager(cfg webAdminConfig) (*auth.Manager, error) {
|
|
return auth.NewManager(cfg)
|
|
}
|
|
|
|
func newRouter(cfg webConfig, store *storepkg.Store, sessions *auth.Manager, mqttStatus webpkg.MQTTStatusProvider, blocking *blockingCache, forwarder mqttForwardReloader, settings *runtimeSettingsCache, botSender botTextSender) *gin.Engine {
|
|
return webpkg.NewRouter(cfg, store, sessions, mqttStatus, blocking, forwarder, settings, botSender)
|
|
}
|
|
|
|
func serveHTTPUnixSocket(server *http.Server, socketPath string) error {
|
|
return webpkg.ServeUnixSocket(server, socketPath)
|
|
}
|