diff --git a/go.mod b/go.mod index 35e2121..6d0593e 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/qjebbs/go-jsons v0.0.0-20221222033332-a534c5fc1c4c // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect diff --git a/go.sum b/go.sum index d6f895b..c5772e9 100644 --- a/go.sum +++ b/go.sum @@ -71,6 +71,8 @@ github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/qjebbs/go-jsons v0.0.0-20221222033332-a534c5fc1c4c h1:kmzxiX+OB0knCo1V0dkEkdPelzCdAzCURCfmFArn2/A= +github.com/qjebbs/go-jsons v0.0.0-20221222033332-a534c5fc1c4c/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= diff --git a/local/service/config.go b/local/service/config.go index 997fe0e..1f5db05 100644 --- a/local/service/config.go +++ b/local/service/config.go @@ -12,6 +12,7 @@ import ( "time" "github.com/gofiber/fiber/v2" + "github.com/qjebbs/go-jsons" "golang.org/x/text/encoding/unicode" "golang.org/x/text/transform" ) @@ -38,6 +39,7 @@ func NewConfigService(repository *repository.ConfigRepository, serverRepository func (as ConfigService) UpdateConfig(ctx *fiber.Ctx, body *map[string]interface{}) (*model.Config, error) { serverID, _ := ctx.ParamsInt("id") configFile := ctx.Params("file") + merge := ctx.QueryBool("merge") server := as.serverRepository.GetFirst(ctx.UserContext(), serverID) @@ -63,6 +65,13 @@ func (as ConfigService) UpdateConfig(ctx *fiber.Ctx, body *map[string]interface{ return nil, err } + if merge { + newData, err = jsons.Merge(oldDataUTF8, newData) + if err != nil { + return nil, err + } + } + newDataUTF16, err := EncodeUTF16LEBOM(newData) if err != nil { return nil, err