117 lines
4.2 KiB
Go
117 lines
4.2 KiB
Go
// 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
|
||
}
|