104 lines
2.7 KiB
Go
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")
|
|
}
|