更新课程教师逻辑层

This commit is contained in:
2025-11-03 11:31:45 +08:00
parent fc40a31818
commit dfd1438981

View File

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