// 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 }