Files
hldrCenter/server/internal/social_service/internal/logic/socialService/updatesocialservicelogic.go
2025-10-29 13:01:30 +08:00

114 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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("更新社会服务失败无效IDid=%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),
// 特殊处理Contentsql.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
}