Prechádzať zdrojové kódy

fix: fail to save sync_overwrite flag #518

Jacky 8 mesiacov pred
rodič
commit
4179fad640
2 zmenil súbory, kde vykonal 149 pridanie a 139 odobranie
  1. 133 131
      api/config/modify.go
  2. 16 8
      query/configs.gen.go

+ 133 - 131
api/config/modify.go

@@ -1,141 +1,143 @@
 package config
 
 import (
-    "github.com/0xJacky/Nginx-UI/api"
-    "github.com/0xJacky/Nginx-UI/internal/config"
-    "github.com/0xJacky/Nginx-UI/internal/helper"
-    "github.com/0xJacky/Nginx-UI/internal/nginx"
-    "github.com/0xJacky/Nginx-UI/model"
-    "github.com/0xJacky/Nginx-UI/query"
-    "github.com/gin-gonic/gin"
-    "github.com/sashabaranov/go-openai"
-    "net/http"
-    "os"
-    "time"
+	"github.com/0xJacky/Nginx-UI/api"
+	"github.com/0xJacky/Nginx-UI/internal/config"
+	"github.com/0xJacky/Nginx-UI/internal/helper"
+	"github.com/0xJacky/Nginx-UI/internal/nginx"
+	"github.com/0xJacky/Nginx-UI/model"
+	"github.com/0xJacky/Nginx-UI/query"
+	"github.com/gin-gonic/gin"
+	"github.com/sashabaranov/go-openai"
+	"net/http"
+	"os"
+	"time"
 )
 
 type EditConfigJson struct {
-    Content string `json:"content" binding:"required"`
+	Content string `json:"content" binding:"required"`
 }
 
 func EditConfig(c *gin.Context) {
-    name := c.Param("name")
-    var json struct {
-        Name          string `json:"name" binding:"required"`
-        Filepath      string `json:"filepath" binding:"required"`
-        NewFilepath   string `json:"new_filepath" binding:"required"`
-        Content       string `json:"content"`
-        SyncOverwrite bool   `json:"sync_overwrite"`
-        SyncNodeIds   []int  `json:"sync_node_ids"`
-    }
-    if !api.BindAndValid(c, &json) {
-        return
-    }
-
-    path := json.Filepath
-    if !helper.IsUnderDirectory(path, nginx.GetConfPath()) {
-        c.JSON(http.StatusForbidden, gin.H{
-            "message": "filepath is not under the nginx conf path",
-        })
-        return
-    }
-
-    if !helper.IsUnderDirectory(json.NewFilepath, nginx.GetConfPath()) {
-        c.JSON(http.StatusForbidden, gin.H{
-            "message": "new filepath is not under the nginx conf path",
-        })
-        return
-    }
-
-    if !helper.FileExists(path) {
-        c.JSON(http.StatusNotFound, gin.H{
-            "message": "file not found",
-        })
-        return
-    }
-
-    content := json.Content
-    origContent, err := os.ReadFile(path)
-    if err != nil {
-        api.ErrHandler(c, err)
-        return
-    }
-
-    if content != "" && content != string(origContent) {
-        err = os.WriteFile(path, []byte(content), 0644)
-        if err != nil {
-            api.ErrHandler(c, err)
-            return
-        }
-    }
-
-    q := query.Config
-    cfg, err := q.Where(q.Filepath.Eq(json.Filepath)).FirstOrCreate()
-    if err != nil {
-        api.ErrHandler(c, err)
-        return
-    }
-
-    _, err = q.Where(q.Filepath.Eq(json.Filepath)).Updates(&model.Config{
-        Name:          json.Name,
-        Filepath:      json.NewFilepath,
-        SyncNodeIds:   json.SyncNodeIds,
-        SyncOverwrite: json.SyncOverwrite,
-    })
-
-    if err != nil {
-        api.ErrHandler(c, err)
-        return
-    }
-    g := query.ChatGPTLog
-    // handle rename
-    if path != json.NewFilepath {
-        if helper.FileExists(json.NewFilepath) {
-            c.JSON(http.StatusNotAcceptable, gin.H{
-                "message": "File exists",
-            })
-            return
-        }
-        err := os.Rename(json.Filepath, json.NewFilepath)
-        if err != nil {
-            api.ErrHandler(c, err)
-            return
-        }
-
-        // update ChatGPT record
-        _, _ = g.Where(g.Name.Eq(json.NewFilepath)).Delete()
-        _, _ = g.Where(g.Name.Eq(path)).Update(g.Name, json.NewFilepath)
-    }
-
-    err = config.SyncToRemoteServer(cfg, json.NewFilepath)
-    if err != nil {
-        api.ErrHandler(c, err)
-        return
-    }
-
-    output := nginx.Reload()
-    if nginx.GetLogLevel(output) >= nginx.Warn {
-        c.JSON(http.StatusInternalServerError, gin.H{
-            "message": output,
-        })
-        return
-    }
-
-    chatgpt, err := g.Where(g.Name.Eq(json.NewFilepath)).FirstOrCreate()
-    if err != nil {
-        api.ErrHandler(c, err)
-        return
-    }
-
-    if chatgpt.Content == nil {
-        chatgpt.Content = make([]openai.ChatCompletionMessage, 0)
-    }
-
-    c.JSON(http.StatusOK, config.Config{
-        Name:            name,
-        Content:         content,
-        ChatGPTMessages: chatgpt.Content,
-        FilePath:        json.NewFilepath,
-        ModifiedAt:      time.Now(),
-    })
+	name := c.Param("name")
+	var json struct {
+		Name          string `json:"name" binding:"required"`
+		Filepath      string `json:"filepath" binding:"required"`
+		NewFilepath   string `json:"new_filepath" binding:"required"`
+		Content       string `json:"content"`
+		SyncOverwrite bool   `json:"sync_overwrite"`
+		SyncNodeIds   []int  `json:"sync_node_ids"`
+	}
+	if !api.BindAndValid(c, &json) {
+		return
+	}
+
+	path := json.Filepath
+	if !helper.IsUnderDirectory(path, nginx.GetConfPath()) {
+		c.JSON(http.StatusForbidden, gin.H{
+			"message": "filepath is not under the nginx conf path",
+		})
+		return
+	}
+
+	if !helper.IsUnderDirectory(json.NewFilepath, nginx.GetConfPath()) {
+		c.JSON(http.StatusForbidden, gin.H{
+			"message": "new filepath is not under the nginx conf path",
+		})
+		return
+	}
+
+	if !helper.FileExists(path) {
+		c.JSON(http.StatusNotFound, gin.H{
+			"message": "file not found",
+		})
+		return
+	}
+
+	content := json.Content
+	origContent, err := os.ReadFile(path)
+	if err != nil {
+		api.ErrHandler(c, err)
+		return
+	}
+
+	if content != "" && content != string(origContent) {
+		err = os.WriteFile(path, []byte(content), 0644)
+		if err != nil {
+			api.ErrHandler(c, err)
+			return
+		}
+	}
+
+	q := query.Config
+	cfg, err := q.Where(q.Filepath.Eq(json.Filepath)).FirstOrCreate()
+	if err != nil {
+		api.ErrHandler(c, err)
+		return
+	}
+
+	_, err = q.Where(q.Filepath.Eq(json.Filepath)).
+		Select(q.Name, q.Filepath, q.SyncNodeIds, q.SyncOverwrite).
+		Updates(&model.Config{
+			Name:          json.Name,
+			Filepath:      json.NewFilepath,
+			SyncNodeIds:   json.SyncNodeIds,
+			SyncOverwrite: json.SyncOverwrite,
+		})
+
+	if err != nil {
+		api.ErrHandler(c, err)
+		return
+	}
+	g := query.ChatGPTLog
+	// handle rename
+	if path != json.NewFilepath {
+		if helper.FileExists(json.NewFilepath) {
+			c.JSON(http.StatusNotAcceptable, gin.H{
+				"message": "File exists",
+			})
+			return
+		}
+		err := os.Rename(json.Filepath, json.NewFilepath)
+		if err != nil {
+			api.ErrHandler(c, err)
+			return
+		}
+
+		// update ChatGPT record
+		_, _ = g.Where(g.Name.Eq(json.NewFilepath)).Delete()
+		_, _ = g.Where(g.Name.Eq(path)).Update(g.Name, json.NewFilepath)
+	}
+
+	err = config.SyncToRemoteServer(cfg, json.NewFilepath)
+	if err != nil {
+		api.ErrHandler(c, err)
+		return
+	}
+
+	output := nginx.Reload()
+	if nginx.GetLogLevel(output) >= nginx.Warn {
+		c.JSON(http.StatusInternalServerError, gin.H{
+			"message": output,
+		})
+		return
+	}
+
+	chatgpt, err := g.Where(g.Name.Eq(json.NewFilepath)).FirstOrCreate()
+	if err != nil {
+		api.ErrHandler(c, err)
+		return
+	}
+
+	if chatgpt.Content == nil {
+		chatgpt.Content = make([]openai.ChatCompletionMessage, 0)
+	}
+
+	c.JSON(http.StatusOK, config.Config{
+		Name:            name,
+		Content:         content,
+		ChatGPTMessages: chatgpt.Content,
+		FilePath:        json.NewFilepath,
+		ModifiedAt:      time.Now(),
+	})
 }

+ 16 - 8
query/configs.gen.go

@@ -32,8 +32,10 @@ func newConfig(db *gorm.DB, opts ...gen.DOOption) config {
 	_config.CreatedAt = field.NewTime(tableName, "created_at")
 	_config.UpdatedAt = field.NewTime(tableName, "updated_at")
 	_config.DeletedAt = field.NewField(tableName, "deleted_at")
+	_config.Name = field.NewString(tableName, "name")
 	_config.Filepath = field.NewString(tableName, "filepath")
 	_config.SyncNodeIds = field.NewField(tableName, "sync_node_ids")
+	_config.SyncOverwrite = field.NewBool(tableName, "sync_overwrite")
 
 	_config.fillFieldMap()
 
@@ -43,13 +45,15 @@ func newConfig(db *gorm.DB, opts ...gen.DOOption) config {
 type config struct {
 	configDo
 
-	ALL         field.Asterisk
-	ID          field.Int
-	CreatedAt   field.Time
-	UpdatedAt   field.Time
-	DeletedAt   field.Field
-	Filepath    field.String
-	SyncNodeIds field.Field
+	ALL           field.Asterisk
+	ID            field.Int
+	CreatedAt     field.Time
+	UpdatedAt     field.Time
+	DeletedAt     field.Field
+	Name          field.String
+	Filepath      field.String
+	SyncNodeIds   field.Field
+	SyncOverwrite field.Bool
 
 	fieldMap map[string]field.Expr
 }
@@ -70,8 +74,10 @@ func (c *config) updateTableName(table string) *config {
 	c.CreatedAt = field.NewTime(table, "created_at")
 	c.UpdatedAt = field.NewTime(table, "updated_at")
 	c.DeletedAt = field.NewField(table, "deleted_at")
+	c.Name = field.NewString(table, "name")
 	c.Filepath = field.NewString(table, "filepath")
 	c.SyncNodeIds = field.NewField(table, "sync_node_ids")
+	c.SyncOverwrite = field.NewBool(table, "sync_overwrite")
 
 	c.fillFieldMap()
 
@@ -88,13 +94,15 @@ func (c *config) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
 }
 
 func (c *config) fillFieldMap() {
-	c.fieldMap = make(map[string]field.Expr, 6)
+	c.fieldMap = make(map[string]field.Expr, 8)
 	c.fieldMap["id"] = c.ID
 	c.fieldMap["created_at"] = c.CreatedAt
 	c.fieldMap["updated_at"] = c.UpdatedAt
 	c.fieldMap["deleted_at"] = c.DeletedAt
+	c.fieldMap["name"] = c.Name
 	c.fieldMap["filepath"] = c.Filepath
 	c.fieldMap["sync_node_ids"] = c.SyncNodeIds
+	c.fieldMap["sync_overwrite"] = c.SyncOverwrite
 }
 
 func (c config) clone(db *gorm.DB) config {