refactor(instance): change instance deletion to use ID instead of name

- Update DBRemoveFrpcInstance to use instanceID for deletion
- Modify DeleteInstanceHandler to accept and validate instanceID
- Improve error messages for invalid instanceID format
- Update logging to use instanceID instead of instanceName
This commit is contained in:
2026-03-25 10:49:30 +08:00
parent 802a726464
commit 3a00f5d6a5
3 changed files with 20 additions and 15 deletions
+2 -2
View File
@@ -385,8 +385,8 @@ func DBQueryFrpcInstance(userID int, instanceName string) (FrpcInstance, error)
return instance, nil return instance, nil
} }
func DBRemoveFrpcInstance(userID int, instanceName string) error { func DBRemoveFrpcInstanceByID(instanceID int) error {
_, err := frpcDB.Exec("DELETE FROM frpcInstances WHERE userID = ? AND name = ?", userID, instanceName) _, err := frpcDB.Exec("DELETE FROM frpcInstances WHERE id = ?", instanceID)
if err != nil { if err != nil {
return fmt.Errorf("failed to delete frpc instance: %w", err) return fmt.Errorf("failed to delete frpc instance: %w", err)
} }
+17 -11
View File
@@ -219,9 +219,15 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
instanceName := getStringFromMap(reqMap, "instanceName") instanceIDStr := getStringFromMap(reqMap, "instanceID")
if instanceName == "" { if instanceIDStr == "" {
SendErrorResponse(w, http.StatusBadRequest, "instanceName is required") SendErrorResponse(w, http.StatusBadRequest, "instanceID is required")
return
}
instanceID, err := strconv.Atoi(instanceIDStr)
if err != nil {
SendErrorResponse(w, http.StatusBadRequest, "Invalid instanceID format")
return return
} }
@@ -246,10 +252,10 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) {
} }
var instance FrpcInstance var instance FrpcInstance
instance, err = DBQueryFrpcInstance(userID, instanceName) instance, err = DBQueryFrpcInstanceByID(instanceID)
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
SendErrorResponse(w, http.StatusNotFound, "Instance not found") SendErrorResponse(w, http.StatusNotFound, "Instance not found")
postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] User %d tried to delete a not existed instance: %s", userID, instanceName)) postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] User %d tried to delete a not existed instance: %d", userID, instanceID))
return return
} }
if err != nil { if err != nil {
@@ -259,8 +265,8 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) {
} }
if instance.BootAtStart { if instance.BootAtStart {
if err := removeBootService(user.Username, instanceName); err != nil { if err := removeBootService(user.Username, instance.Name); err != nil {
postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instanceName, err)) postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instance.Name, err))
SendErrorResponse(w, http.StatusInternalServerError, "Failed to remove boot service") SendErrorResponse(w, http.StatusInternalServerError, "Failed to remove boot service")
return return
} }
@@ -274,16 +280,16 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) {
} }
} }
if err := DBRemoveFrpcInstance(userID, instanceName); err != nil { if err := DBRemoveFrpcInstanceByID(instanceID); err != nil {
postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to delete instance %s from database: %v", instanceName, err)) postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to delete instance %d from database: %v", instanceID, err))
SendErrorResponse(w, http.StatusInternalServerError, "Failed to delete instance from database") SendErrorResponse(w, http.StatusInternalServerError, "Failed to delete instance from database")
return return
} }
SendSuccessResponse(w, "Instance deleted successfully", map[string]interface{}{ SendSuccessResponse(w, "Instance deleted successfully", map[string]interface{}{
"name": instanceName, "id": instanceID,
}) })
postLog.Info(fmt.Sprintf("[DeleteInstanceHandler] Instance %s deleted successfully", instanceName)) postLog.Info(fmt.Sprintf("[DeleteInstanceHandler] Instance %d deleted successfully", instanceID))
} }
func ModifyInstanceHandler(w http.ResponseWriter, r *http.Request) { func ModifyInstanceHandler(w http.ResponseWriter, r *http.Request) {
+1 -2
View File
@@ -1,7 +1,6 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
@@ -56,7 +55,7 @@ func createBootService(username, instanceName, configPath, runUser string) error
case "windows": case "windows":
return createWindowsBootService(username, instanceName, configPath) return createWindowsBootService(username, instanceName, configPath)
default: default:
return errors.New("unsupported init system") return fmt.Errorf("unsupported init system: %s", initType)
} }
} }