更新课程教师逻辑层
This commit is contained in:
@@ -6,7 +6,6 @@ package course_teacher
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
@@ -33,83 +32,63 @@ func NewUpdateCourseTeacherLogic(ctx context.Context, cfg *config.Config, model
|
||||
}
|
||||
|
||||
func (l *UpdateCourseTeacherLogic) UpdateCourseTeacher(req *types.UpdateCourseTeacherReq) (resp *types.UpdateCourseTeacherResp, err error) {
|
||||
// 1. 基础参数校验(确保ID有效)
|
||||
// 1. 仅校验关联ID有效性(唯一必填参数)
|
||||
if req.Id <= 0 {
|
||||
return nil, fmt.Errorf("参数错误:关联ID必须为正整数")
|
||||
}
|
||||
|
||||
// 2. 查询原记录(确保记录存在)
|
||||
// 注意:此处假设Model层有FindOne方法(根据ID查询单条记录)
|
||||
original, err := l.model.FindOne(l.ctx, int64(req.Id))
|
||||
if err != nil {
|
||||
if errors.Is(err, model.ErrNotFound) { // 假设Model层定义了ErrNotFound表示记录不存在
|
||||
return nil, fmt.Errorf("课程教师关联记录不存在(ID: %d)", req.Id)
|
||||
}
|
||||
return nil, fmt.Errorf("查询原记录失败:%w", err)
|
||||
}
|
||||
|
||||
// 3. 构建更新数据(仅更新请求中提供的非空/有效字段)
|
||||
// 2. 直接构建更新数据(不查询原记录,不检查记录是否存在)
|
||||
updateData := &model.CourseTeacher{
|
||||
Id: int64(req.Id), // 必须携带ID用于WHERE条件
|
||||
// 基础字段默认沿用原记录,后续按需覆盖
|
||||
CourseId: original.CourseId,
|
||||
TeacherId: original.TeacherId,
|
||||
Name: original.Name,
|
||||
Title: original.Title,
|
||||
Avatar: original.Avatar,
|
||||
Intro: original.Intro,
|
||||
Sort: original.Sort,
|
||||
Id: int64(req.Id), // 关联ID,用于WHERE条件定位要更新的记录
|
||||
}
|
||||
|
||||
// 3.1 可选更新:课程ID(若请求中提供了有效值)
|
||||
// 3. 仅更新请求中提供的非空/有效字段(无字段则不更新对应项)
|
||||
// 3.1 课程ID(传入有效值则更新)
|
||||
if req.CourseId > 0 {
|
||||
updateData.CourseId = int64(req.CourseId)
|
||||
}
|
||||
|
||||
// 3.2 可选更新:教师ID(若请求中提供了有效值)
|
||||
// 3.2 教师ID(传入即更新,不校验是否存在)
|
||||
if req.TeacherId > 0 {
|
||||
updateData.TeacherId = int64(req.TeacherId)
|
||||
}
|
||||
|
||||
// 3.3 可选更新:教师姓名(若请求中提供了非空值)
|
||||
// 3.3 教师姓名(传入非空值则更新)
|
||||
if req.Name != "" {
|
||||
updateData.Name = req.Name
|
||||
}
|
||||
|
||||
// 3.4 可选更新:教师头衔(若请求中提供了非空值)
|
||||
// 3.4 教师头衔(传入非空值则更新)
|
||||
if req.Title != "" {
|
||||
updateData.Title = req.Title
|
||||
}
|
||||
|
||||
// 3.5 可选更新:头像URL(若请求中提供了非空值)
|
||||
// 3.5 头像URL(传入非空值则更新)
|
||||
if req.Avatar != "" {
|
||||
updateData.Avatar = req.Avatar
|
||||
}
|
||||
|
||||
// 3.6 可选更新:教师简介(若请求中提供了非空值,允许清空)
|
||||
if req.Intro != "" { // 注意:若需允许清空简介,此处直接赋值(空字符串也会更新)
|
||||
updateData.Intro = StringToNullString(req.Intro)
|
||||
}
|
||||
// 3.6 教师简介(支持清空,传入空字符串也会更新)
|
||||
updateData.Intro = StringToNullString(req.Intro)
|
||||
|
||||
// 3.7 可选更新:排序值(若请求中提供了有效值)
|
||||
if req.Sort >= 0 { // 符合validate规则:min=0
|
||||
// 3.7 排序值(传入有效值则更新)
|
||||
if req.Sort >= 0 {
|
||||
updateData.Sort = int64(req.Sort)
|
||||
}
|
||||
|
||||
// 4. 调用Model层执行更新
|
||||
// 4. 直接执行更新操作(不管记录是否存在,数据库会自动忽略不存在的记录)
|
||||
err = l.model.Update(l.ctx, updateData)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("更新课程教师关联记录失败:%w", err)
|
||||
}
|
||||
|
||||
// 5. 构建成功响应
|
||||
// 5. 构建响应(不判断更新行数,仅返回操作结果)
|
||||
resp = &types.UpdateCourseTeacherResp{
|
||||
Message: fmt.Sprintf("课程教师关联记录(ID: %d)更新成功", req.Id),
|
||||
Message: fmt.Sprintf("课程教师关联记录(ID: %d)更新操作执行成功", req.Id),
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func StringToNullString(s string) sql.NullString {
|
||||
if s != "" {
|
||||
return sql.NullString{String: s, Valid: true}
|
||||
|
||||
Reference in New Issue
Block a user