add edit json v1 WIP, testing

This commit is contained in:
pakintada@gmail.com 2023-10-20 14:32:16 +07:00
parent e5eee656d5
commit ea92145350
11 changed files with 216 additions and 67 deletions

View file

@ -2,15 +2,19 @@ package routers
import (
"encoding/json"
"io/fs"
"net/http"
"os"
"recipe-manager/data"
"recipe-manager/models"
"recipe-manager/services/logger"
"recipe-manager/services/sheet"
"sort"
"strconv"
"strings"
"github.com/go-chi/chi/v5"
"go.uber.org/zap"
)
type RecipeRouter struct {
@ -18,6 +22,10 @@ type RecipeRouter struct {
sheetService sheet.SheetService
}
var (
Log = logger.GetInstance()
)
func NewRecipeRouter(data *data.Data, sheetService sheet.SheetService) *RecipeRouter {
return &RecipeRouter{
data: data,
@ -143,5 +151,53 @@ func (rr *RecipeRouter) Route(r chi.Router) {
}
json.NewEncoder(w).Encode(mapResult)
})
r.Post("/edit/{version}", func(w http.ResponseWriter, r *http.Request) {
Log.Debug("Edit: ", zap.String("path", r.RequestURI))
version := chi.URLParam(r, "version")
target_recipe := rr.data.GetRecipe(version)
Log.Debug("Target => ", zap.Any("target", target_recipe.MachineSetting.ConfigNumber))
// Body
var changes models.Recipe01
err := json.NewDecoder(r.Body).Decode(&changes)
if err != nil {
Log.Error("Decode in request failed: ", zap.Error(err))
}
Log.Debug("Changes: ", zap.Any("changes", changes))
// TODO: find the matched pd
target_menu := rr.data.GetRecipe01ByProductCode(changes.ProductCode)
menu_map := target_menu.ToMap()
change_map := changes.ToMap()
// Find changes
for key, val := range menu_map {
if val != change_map[key] {
menu_map[key] = change_map[key]
}
}
// Apply changes
tempRecipe := models.Recipe01{}
tempRecipe = tempRecipe.FromMap(menu_map)
rr.data.SetValuesToRecipe(tempRecipe)
finalData := rr.data.ExportToJSON()
temp_finalData, err := json.MarshalIndent(finalData, "", " ")
if err != nil {
Log.Error("Error when indent marshal recipe", zap.Error(err))
return
}
os.WriteFile("./cofffeemachineConfig/coffeethai02_"+version+".json", temp_finalData, fs.FileMode(0666))
w.Header().Add("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]interface{}{
"status": "OK",
})
})
})
}