fusenapi/server/map-library/internal/logic/savemaplibrarylogic.go
laodaming dd13dcbf0d fix
2023-09-15 10:39:08 +08:00

104 lines
2.7 KiB
Go

package logic
import (
"context"
"encoding/json"
"fusenapi/model/gmodel"
"fusenapi/utils/auth"
"fusenapi/utils/basic"
"io/ioutil"
"net/http"
"strconv"
"time"
"fusenapi/server/map-library/internal/svc"
"fusenapi/server/map-library/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type SaveMapLibraryLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
bodyData []byte
}
func NewSaveMapLibraryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveMapLibraryLogic {
return &SaveMapLibraryLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
// 处理进入前逻辑w,r
func (l *SaveMapLibraryLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) {
bodyData, err := ioutil.ReadAll(r.Body)
defer r.Body.Close()
if err != nil {
logx.Error(err)
return
}
l.bodyData = bodyData
}
func (l *SaveMapLibraryLogic) SaveMapLibrary(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) {
if userinfo.GetIdType() != auth.IDTYPE_User {
return resp.SetStatusWithMessage(basic.CodeServiceErr, "please sign in first")
}
if len(l.bodyData) == 0 {
return resp.SetStatus(basic.CodeApiErr, http.ErrBodyReadAfterClose.Error())
}
var err error
var postData []types.SaveMapLibraryData
if err = json.Unmarshal(l.bodyData, &postData); err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeSaveErr, "param err")
}
sort := int64(0)
status := int64(1)
now := time.Now().UTC().Unix()
createList := make([]gmodel.FsMapLibrary, 0, len(postData))
updateList := make([]gmodel.FsMapLibrary, 0, len(postData))
//开启事务
for _, v := range postData {
postDataVal := v
infoByte, _ := json.Marshal(postDataVal.Info)
infoJsonStr := string(infoByte)
switch postDataVal.Mid {
case "": //新增
createList = append(createList, gmodel.FsMapLibrary{
Title: &postDataVal.Info.Title,
Info: &infoJsonStr,
Sort: &sort,
Status: &status,
Ctime: &now,
TagId: &postDataVal.Tag.Id,
})
default: //修改
midInt, err := strconv.ParseInt(postDataVal.Mid, 10, 64)
if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "mid is not a number")
}
updateList = append(updateList, gmodel.FsMapLibrary{
Id: midInt,
Title: &postDataVal.Info.Title,
Info: &infoJsonStr,
TagId: &postDataVal.Tag.Id,
})
}
}
err = l.svcCtx.AllModels.FsMapLibrary.SaveMapLibraryWithTransaction(l.ctx, createList, updateList)
if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to save map library")
}
return resp.SetStatusWithMessage(basic.CodeOK, "success")
}