114 lines
3.7 KiB
Go
114 lines
3.7 KiB
Go
// Code scaffolded by goctl. Safe to edit.
|
||
// goctl 1.9.2
|
||
|
||
package socialService
|
||
|
||
import (
|
||
"context"
|
||
"database/sql"
|
||
|
||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||
"github.com/JACKYMYPERSON/hldrCenter/internal/social_service/internal/model"
|
||
"github.com/JACKYMYPERSON/hldrCenter/internal/social_service/internal/types"
|
||
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
)
|
||
|
||
type UpdateSocialServiceLogic struct {
|
||
logx.Logger
|
||
ctx context.Context
|
||
cfg *config.Config
|
||
model model.SocialServiceModel
|
||
}
|
||
|
||
func NewUpdateSocialServiceLogic(ctx context.Context, cfg *config.Config, model model.SocialServiceModel) *UpdateSocialServiceLogic {
|
||
return &UpdateSocialServiceLogic{
|
||
Logger: logx.WithContext(ctx),
|
||
ctx: ctx,
|
||
cfg: cfg,
|
||
model: model,
|
||
}
|
||
}
|
||
|
||
func (l *UpdateSocialServiceLogic) UpdateSocialService(req *types.UpdateSocialServiceReq) (resp *types.UpdateSocialServiceResp, err error) {
|
||
// 1. 校验ID有效性
|
||
if req.Id <= 0 {
|
||
l.Logger.Errorf("更新社会服务失败:无效ID,id=%d", req.Id)
|
||
return &types.UpdateSocialServiceResp{
|
||
Code: 400,
|
||
Msg: "更新失败:ID无效",
|
||
}, nil
|
||
}
|
||
|
||
// 2. 查询原记录(original的字段类型为model.SocialService,含sql.NullString)
|
||
original, err := l.model.FindOne(context.Background(), req.Id)
|
||
if err != nil {
|
||
if err == model.ErrNotFound {
|
||
l.Logger.Errorf("更新社会服务失败:记录不存在,id=%d", req.Id)
|
||
return &types.UpdateSocialServiceResp{
|
||
Code: 404,
|
||
Msg: "更新失败:未找到该记录",
|
||
}, nil
|
||
}
|
||
l.Logger.Errorf("查询原记录失败,id=%d, err=%v", req.Id, err)
|
||
return &types.UpdateSocialServiceResp{
|
||
Code: 500,
|
||
Msg: "更新失败:查询原记录异常",
|
||
}, nil
|
||
}
|
||
|
||
updateData := &model.SocialService{
|
||
Id: req.Id,
|
||
// string类型字段:用处理string的辅助函数
|
||
Title: updateStringField(req.Title, original.Title),
|
||
Subtitle: updateStringField(req.Subtitle, original.Subtitle),
|
||
CoverUrl: updateStringField(req.CoverUrl, original.CoverUrl),
|
||
Intro: updateStringField(req.Intro, original.Intro),
|
||
ImageEditors: updateStringField(req.ImageEditors, original.ImageEditors),
|
||
TextEditors: updateStringField(req.TextEditors, original.TextEditors),
|
||
ChiefEditor: updateStringField(req.ChiefEditor, original.ChiefEditor),
|
||
Proofreaders: updateStringField(req.Proofreaders, original.Proofreaders),
|
||
Reviewers: updateStringField(req.Reviewers, original.Reviewers),
|
||
// 特殊处理Content(sql.NullString类型)
|
||
Content: updateNullStringField(req.Content, original.Content),
|
||
// 保留原发布时间和删除状态
|
||
PublishTime: original.PublishTime,
|
||
IsDelete: original.IsDelete,
|
||
}
|
||
|
||
// 4. 执行更新
|
||
err = l.model.Update(context.Background(), updateData)
|
||
if err != nil {
|
||
l.Logger.Errorf("更新社会服务失败,id=%d, err=%v", req.Id, err)
|
||
return &types.UpdateSocialServiceResp{
|
||
Code: 500,
|
||
Msg: "更新失败:数据库操作异常",
|
||
}, nil
|
||
}
|
||
|
||
// 5. 返回成功响应
|
||
return &types.UpdateSocialServiceResp{
|
||
Code: 0,
|
||
Msg: "更新成功",
|
||
}, nil
|
||
}
|
||
|
||
func updateStringField(newVal, originalVal string) string {
|
||
if newVal != "" {
|
||
return newVal // 传入新值则更新
|
||
}
|
||
return originalVal // 未传入则保留原值
|
||
}
|
||
|
||
// 辅助函数:处理sql.NullString类型字段的更新(仅适用于Content)
|
||
// newVal:前端传入的新值(string,可能为空)
|
||
// originalVal:原记录的值(sql.NullString,数据库存储值)
|
||
func updateNullStringField(newVal string, originalVal sql.NullString) sql.NullString {
|
||
if newVal != "" {
|
||
// 传入新值:转换为有效的sql.NullString
|
||
return sql.NullString{String: newVal, Valid: true}
|
||
}
|
||
// 未传入新值:保留原记录的sql.NullString(可能有效或无效)
|
||
return originalVal
|
||
}
|