92 lines
2.8 KiB
Go
92 lines
2.8 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fusenapi/model/gmodel"
|
|
"fusenapi/utils/auth"
|
|
"fusenapi/utils/basic"
|
|
"gorm.io/gorm"
|
|
|
|
"fusenapi/server/product-template/internal/svc"
|
|
"fusenapi/server/product-template/internal/types"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type UpdateTemplateLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewUpdateTemplateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateTemplateLogic {
|
|
return &UpdateTemplateLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *UpdateTemplateLogic) UpdateTemplate(req *types.UpdateTemplateReq, userInfo *auth.BackendUserInfo) (resp *basic.Response) {
|
|
if req.ModelId <= 0 {
|
|
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "param modelId is required")
|
|
}
|
|
if req.TemplateData == nil {
|
|
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "param template data is required")
|
|
}
|
|
if req.TemplateData.Id <= 0 {
|
|
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "param template data`id is required")
|
|
}
|
|
//验证模板数据真实性
|
|
templatev2Info, err := l.svcCtx.AllModels.FsProductTemplateV2.FindOne(l.ctx, req.TemplateData.Id)
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "template is not exists")
|
|
}
|
|
logx.Error(err)
|
|
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get v2 template info")
|
|
}
|
|
if *templatev2Info.ModelId != req.ModelId {
|
|
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "the template`s model id is not match")
|
|
}
|
|
templateInfoBytes, err := json.Marshal(req.TemplateData)
|
|
if err != nil {
|
|
logx.Error(err)
|
|
return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to marshal template data")
|
|
}
|
|
templateInfoJson := string(templateInfoBytes)
|
|
//保存模板宽高
|
|
var logoWidth int64
|
|
var logoHeight int64
|
|
for _, v := range req.TemplateData.MaterialList {
|
|
//logo面板需保存宽高
|
|
if v["tag"] == "Logo" {
|
|
logoWidth, _ = v["width"].(json.Number).Int64()
|
|
logoHeight, _ = v["height"].(json.Number).Int64()
|
|
break
|
|
}
|
|
}
|
|
isPublic := int64(0)
|
|
if req.TemplateData.IsPublic {
|
|
isPublic = 1
|
|
}
|
|
updData := gmodel.FsProductTemplateV2{
|
|
TemplateInfo: &templateInfoJson,
|
|
MaterialImg: &req.TemplateData.Material,
|
|
Name: &req.TemplateData.Name,
|
|
LogoWidth: &logoWidth,
|
|
LogoHeight: &logoHeight,
|
|
IsPublic: &isPublic,
|
|
}
|
|
if err = l.svcCtx.AllModels.FsProductTemplateV2.Update(l.ctx, req.TemplateData.Id, &updData); err != nil {
|
|
logx.Error(err)
|
|
return resp.SetStatusWithMessage(basic.CodeSaveErr, "failed to update template")
|
|
}
|
|
return resp.SetStatusWithMessage(basic.CodeOK, "success", types.UpdateTemplateRsp{
|
|
ModelId: req.ModelId,
|
|
TemplateId: req.TemplateData.Id,
|
|
})
|
|
}
|