style(controller): re-organize controller project structure: split controller and pipes

This commit is contained in:
2026-08-05 14:27:22 +08:00
parent 6e93a9bd2f
commit dc30675e0f
6 changed files with 27 additions and 24 deletions
@@ -1,4 +1,4 @@
package controller package pipes
import ( import (
"fmt" "fmt"
@@ -1,4 +1,4 @@
package controller package pipes
import ( import (
"fmt" "fmt"
@@ -1,4 +1,4 @@
package controller package pipes
import ( import (
"bytes" "bytes"
@@ -13,6 +13,7 @@ import (
"nukumizu-backend/internal/node" "nukumizu-backend/internal/node"
"nukumizu-backend/internal/template" "nukumizu-backend/internal/template"
"nukumizu-backend/postLog" "nukumizu-backend/postLog"
"nukumizu-backend/internal/controller"
) )
// QQController handles QQ Bot interactions via napcat-bridge. // QQController handles QQ Bot interactions via napcat-bridge.
@@ -57,8 +58,8 @@ func (q *QQController) IsEnabled() bool {
} }
// HandleCommand processes a bot command and returns a response string. // HandleCommand processes a bot command and returns a response string.
func (q *QQController) HandleCommand(cmd Command) (string, error) { func (q *QQController) HandleCommand(cmd controller.Command) (string, error) {
parsed, ok := ParseCommand(cmd.RawText) parsed, ok := controller.ParseCommand(cmd.RawText)
if !ok { if !ok {
// Not a command. In "global" mode, silently ignore. // Not a command. In "global" mode, silently ignore.
// In "at" mode, this would be an error - but at detection happens at the message level. // In "at" mode, this would be an error - but at detection happens at the message level.
@@ -81,7 +82,7 @@ func (q *QQController) HandleCommand(cmd Command) (string, error) {
return q.executeCommand(parsed) return q.executeCommand(parsed)
} }
func (q *QQController) executeCommand(cmd Command) (string, error) { func (q *QQController) executeCommand(cmd controller.Command) (string, error) {
// Validate against supported commands. // Validate against supported commands.
switch cmd.Command { switch cmd.Command {
case "list": case "list":
@@ -118,7 +119,7 @@ func (q *QQController) handleList() (string, error) {
return template.Render(cfg.ControllerMessage.ServerList, params), nil return template.Render(cfg.ControllerMessage.ServerList, params), nil
} }
func (q *QQController) handleStatus(cmd Command) (string, error) { func (q *QQController) handleStatus(cmd controller.Command) (string, error) {
if len(cmd.Args) < 1 { if len(cmd.Args) < 1 {
return "Usage: /status <uuid>", nil return "Usage: /status <uuid>", nil
} }
@@ -154,7 +155,7 @@ func (q *QQController) handleStatus(cmd Command) (string, error) {
return sb.String(), nil return sb.String(), nil
} }
func (q *QQController) handleShutdown(cmd Command) (string, error) { func (q *QQController) handleShutdown(cmd controller.Command) (string, error) {
if !q.isAdmin(cmd.SenderID) { if !q.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -176,7 +177,7 @@ func (q *QQController) handleShutdown(cmd Command) (string, error) {
return fmt.Sprintf("Shutdown command sent to server %s", uuid), nil return fmt.Sprintf("Shutdown command sent to server %s", uuid), nil
} }
func (q *QQController) handleReboot(cmd Command) (string, error) { func (q *QQController) handleReboot(cmd controller.Command) (string, error) {
if !q.isAdmin(cmd.SenderID) { if !q.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -198,7 +199,7 @@ func (q *QQController) handleReboot(cmd Command) (string, error) {
return fmt.Sprintf("Reboot command sent to server %s", uuid), nil return fmt.Sprintf("Reboot command sent to server %s", uuid), nil
} }
func (q *QQController) handleRun(cmd Command) (string, error) { func (q *QQController) handleRun(cmd controller.Command) (string, error) {
if !q.isAdmin(cmd.SenderID) { if !q.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -1,4 +1,4 @@
package controller package pipes
import ( import (
"fmt" "fmt"
@@ -9,6 +9,7 @@ import (
"nukumizu-backend/internal/node" "nukumizu-backend/internal/node"
"nukumizu-backend/internal/template" "nukumizu-backend/internal/template"
"nukumizu-backend/postLog" "nukumizu-backend/postLog"
"nukumizu-backend/internal/controller"
) )
// TelegramController handles Telegram Bot interactions via long polling. // TelegramController handles Telegram Bot interactions via long polling.
@@ -70,8 +71,8 @@ func (t *TelegramController) pollLoop() {
} }
// HandleCommand processes a bot command and returns a response string. // HandleCommand processes a bot command and returns a response string.
func (t *TelegramController) HandleCommand(cmd Command) (string, error) { func (t *TelegramController) HandleCommand(cmd controller.Command) (string, error) {
parsed, ok := ParseCommand(cmd.RawText) parsed, ok := controller.ParseCommand(cmd.RawText)
if !ok { if !ok {
if t.cfg.ListenMethod == "at" { if t.cfg.ListenMethod == "at" {
return "Unknown command format. Use /command args", nil return "Unknown command format. Use /command args", nil
@@ -86,7 +87,7 @@ func (t *TelegramController) HandleCommand(cmd Command) (string, error) {
return t.executeCommand(parsed) return t.executeCommand(parsed)
} }
func (t *TelegramController) executeCommand(cmd Command) (string, error) { func (t *TelegramController) executeCommand(cmd controller.Command) (string, error) {
switch cmd.Command { switch cmd.Command {
case "list": case "list":
return t.handleList() return t.handleList()
@@ -122,7 +123,7 @@ func (t *TelegramController) handleList() (string, error) {
return template.Render(cfg.ControllerMessage.ServerList, params), nil return template.Render(cfg.ControllerMessage.ServerList, params), nil
} }
func (t *TelegramController) handleStatus(cmd Command) (string, error) { func (t *TelegramController) handleStatus(cmd controller.Command) (string, error) {
if len(cmd.Args) < 1 { if len(cmd.Args) < 1 {
return "Usage: /status <uuid>", nil return "Usage: /status <uuid>", nil
} }
@@ -155,7 +156,7 @@ func (t *TelegramController) handleStatus(cmd Command) (string, error) {
return sb.String(), nil return sb.String(), nil
} }
func (t *TelegramController) handleShutdown(cmd Command) (string, error) { func (t *TelegramController) handleShutdown(cmd controller.Command) (string, error) {
if !t.isAdmin(cmd.SenderID) { if !t.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -177,7 +178,7 @@ func (t *TelegramController) handleShutdown(cmd Command) (string, error) {
return fmt.Sprintf("Shutdown command sent to server %s", uuid), nil return fmt.Sprintf("Shutdown command sent to server %s", uuid), nil
} }
func (t *TelegramController) handleReboot(cmd Command) (string, error) { func (t *TelegramController) handleReboot(cmd controller.Command) (string, error) {
if !t.isAdmin(cmd.SenderID) { if !t.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -199,7 +200,7 @@ func (t *TelegramController) handleReboot(cmd Command) (string, error) {
return fmt.Sprintf("Reboot command sent to server %s", uuid), nil return fmt.Sprintf("Reboot command sent to server %s", uuid), nil
} }
func (t *TelegramController) handleRun(cmd Command) (string, error) { func (t *TelegramController) handleRun(cmd controller.Command) (string, error) {
if !t.isAdmin(cmd.SenderID) { if !t.isAdmin(cmd.SenderID) {
return "Permission denied: admin only", nil return "Permission denied: admin only", nil
} }
@@ -1,4 +1,4 @@
package controller package pipes
import ( import (
"bytes" "bytes"
+6 -5
View File
@@ -13,6 +13,7 @@ import (
"nukumizu-backend/config" "nukumizu-backend/config"
"nukumizu-backend/database" "nukumizu-backend/database"
"nukumizu-backend/internal/controller" "nukumizu-backend/internal/controller"
"nukumizu-backend/internal/controller/pipes"
"nukumizu-backend/internal/komari" "nukumizu-backend/internal/komari"
"nukumizu-backend/internal/node" "nukumizu-backend/internal/node"
"nukumizu-backend/postLog" "nukumizu-backend/postLog"
@@ -158,7 +159,7 @@ func initControllers() {
} }
// QQ (Napcat) controller. // QQ (Napcat) controller.
qqCtrl := controller.NewQQController(cfg.ControllerMethod.QQ) qqCtrl := pipes.NewQQController(cfg.ControllerMethod.QQ)
mgr.Register(qqCtrl) mgr.Register(qqCtrl)
go func() { go func() {
defer func() { defer func() {
@@ -172,7 +173,7 @@ func initControllers() {
}() }()
// Telegram controller. // Telegram controller.
tgCtrl := controller.NewTelegramController(cfg.ControllerMethod.Telegram) tgCtrl := pipes.NewTelegramController(cfg.ControllerMethod.Telegram)
mgr.Register(tgCtrl) mgr.Register(tgCtrl)
go func() { go func() {
defer func() { defer func() {
@@ -186,7 +187,7 @@ func initControllers() {
}() }()
// Email controller (status-only). // Email controller (status-only).
emailCtrl := controller.NewEmailController(cfg.ControllerMethod.Email) emailCtrl := pipes.NewEmailController(cfg.ControllerMethod.Email)
mgr.Register(emailCtrl) mgr.Register(emailCtrl)
go func() { go func() {
defer func() { defer func() {
@@ -200,7 +201,7 @@ func initControllers() {
}() }()
// Ntfy controller (status-only). // Ntfy controller (status-only).
ntfyCtrl := controller.NewNtfyController(cfg.ControllerMethod.Ntfy) ntfyCtrl := pipes.NewNtfyController(cfg.ControllerMethod.Ntfy)
mgr.Register(ntfyCtrl) mgr.Register(ntfyCtrl)
go func() { go func() {
defer func() { defer func() {
@@ -214,7 +215,7 @@ func initControllers() {
}() }()
// Webhook controller (status-only). // Webhook controller (status-only).
webhookCtrl := controller.NewWebhookController(cfg.ControllerMethod.Webhook) webhookCtrl := pipes.NewWebhookController(cfg.ControllerMethod.Webhook)
mgr.Register(webhookCtrl) mgr.Register(webhookCtrl)
go func() { go func() {
defer func() { defer func() {