Files
hldrCenter/server/internal/social_service_governmentprogram/internal/logic/socialServiceGovernmentProgram/updatesocialservicegovernmentprogramlogic.go

117 lines
4.2 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 socialServiceGovernmentProgram
import (
"context"
"database/sql"
"fmt"
"time"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/social_service_governmentprogram/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/social_service_governmentprogram/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateSocialServiceGovernmentProgramLogic struct {
logx.Logger
ctx context.Context
cfg *config.Config
model model.SocialServiceGovernmentprogramModel
}
func NewUpdateSocialServiceGovernmentProgramLogic(ctx context.Context, cfg *config.Config, model model.SocialServiceGovernmentprogramModel) *UpdateSocialServiceGovernmentProgramLogic {
return &UpdateSocialServiceGovernmentProgramLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
cfg: cfg,
model: model,
}
}
func (l *UpdateSocialServiceGovernmentProgramLogic) UpdateSocialServiceGovernmentProgram(req *types.UpdateSocialServiceGovernmentProgramReq) (resp *types.UpdateSocialServiceGovernmentProgramResp, err error) {
// 1. 验证ID合法性路径参数
if req.Id <= 0 {
return &types.UpdateSocialServiceGovernmentProgramResp{
Code: 400,
Msg: "项目ID不合法必须大于0",
}, nil
}
// 2. 查询原记录(检查是否存在且未被删除)
oldProgram, err := l.model.FindOne(context.Background(), req.Id)
if err != nil {
if err == model.ErrNotFound {
return &types.UpdateSocialServiceGovernmentProgramResp{
Code: 404,
Msg: "未找到该社会服务政府项目(或已被删除)",
}, nil
}
fmt.Printf("查询待更新项目失败ID%d错误%v\n", req.Id, err)
return &types.UpdateSocialServiceGovernmentProgramResp{
Code: 500,
Msg: "查询项目信息失败,请稍后重试",
}, nil
}
// 3. 构造更新数据复用原记录字段仅覆盖req中提供的非空值
updateData := &model.SocialServiceGovernmentprogram{
Id: req.Id, // 必须携带ID用于WHERE条件
// 基础字段优先使用req中的值未提供则保留原记录值
Title: getUpdateValue(req.Title, oldProgram.Title),
Subtitle: getUpdateValue(req.Subtitle, oldProgram.Subtitle),
CoverUrl: getUpdateValue(req.CoverUrl, oldProgram.CoverUrl),
Intro: getUpdateValue(req.Intro, oldProgram.Intro),
// 特殊类型string → sql.NullString处理Content字段
Content: getNullStringFromUpdate(req.Content, oldProgram.Content),
ImageEditors: getUpdateValue(req.ImageEditors, oldProgram.ImageEditors),
TextEditors: getUpdateValue(req.TextEditors, oldProgram.TextEditors),
ChiefEditor: getUpdateValue(req.ChiefEditor, oldProgram.ChiefEditor),
Proofreaders: getUpdateValue(req.Proofreaders, oldProgram.Proofreaders),
Reviewers: getUpdateValue(req.Reviewers, oldProgram.Reviewers),
// 时间字段:保留原发布时间,更新最后修改时间为当前时间
PublishTime: oldProgram.PublishTime, // 发布时间不随更新改变(除非有特殊需求)
UpdateTime: time.Now(), // 强制更新为当前时间
IsDelete: oldProgram.IsDelete, // 保留原删除状态(不允许通过更新接口修改删除状态)
}
// 4. 调用model执行更新
err = l.model.Update(context.Background(), updateData)
if err != nil {
fmt.Printf("更新社会服务政府项目失败ID%d错误%v\n", req.Id, err)
return &types.UpdateSocialServiceGovernmentProgramResp{
Code: 500,
Msg: "项目更新失败,请稍后重试",
}, nil
}
// 5. 构造成功响应
resp = &types.UpdateSocialServiceGovernmentProgramResp{
Code: 0,
Msg: "项目更新成功",
}
return resp, nil
}
func getUpdateValue(newVal, oldVal string) string {
if newVal != "" {
return newVal
}
return oldVal
}
// getNullStringFromUpdate处理Content字段的更新string → sql.NullString
// 若请求中提供了新内容则包装为有效NullString否则保留原记录的NullString
func getNullStringFromUpdate(newContent string, oldNull sql.NullString) sql.NullString {
if newContent != "" {
return sql.NullString{
String: newContent,
Valid: true,
}
}
return oldNull
}