Skip to content

Commit b8bfaef

Browse files
committed
fix(upsert): 走PUT时带上全字段
1 parent 62525e4 commit b8bfaef

1 file changed

Lines changed: 40 additions & 6 deletions

File tree

internal/course/handler.go

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ package course
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223

2324
"github.com/google/uuid"
25+
"gorm.io/gorm"
2426

2527
"github.com/west2-online/fzuhelper-server/internal/course/pack"
2628
"github.com/west2-online/fzuhelper-server/internal/course/service"
@@ -164,20 +166,52 @@ func (s *CourseServiceImpl) UpsertCustomCourse(ctx context.Context, req *course.
164166
return resp, nil
165167
}
166168
} else {
167-
// 更新:根据 course_id 更新
169+
old, err := dbClient.Course.GetCustomCourseByID(ctx, stuId, req.Term, *courseId)
170+
if err != nil {
171+
if errors.Is(err, gorm.ErrRecordNotFound) {
172+
resp.Base = base.BuildBaseResp(errno.CustomCourseNotFoundError)
173+
return resp, nil
174+
}
175+
resp.Base = base.BuildBaseResp(err)
176+
return resp, nil
177+
}
178+
179+
// required 字段:前端一定传了,直接用新值
180+
teacher := old.Teacher
181+
if courseItem.Teacher != nil {
182+
teacher = *courseItem.Teacher
183+
}
184+
single := old.IsSingle
185+
if courseItem.Single != nil {
186+
single = *courseItem.Single
187+
}
188+
double_ := old.IsDouble
189+
if courseItem.Double_ != nil {
190+
double_ = *courseItem.Double_
191+
}
192+
color := old.Color
193+
if courseItem.Color != nil {
194+
color = *courseItem.Color
195+
}
196+
remark := old.Remark
197+
if courseItem.Remark != nil {
198+
remark = *courseItem.Remark
199+
}
200+
201+
// 全字段 PUT 覆盖(合并后的完整数据)
168202
updates := map[string]interface{}{
169203
"name": courseItem.Name,
170-
"teacher": getStringValue(courseItem.Teacher),
204+
"teacher": teacher,
171205
"location": courseItem.Location,
172206
"start_class": int(courseItem.StartClass),
173207
"end_class": int(courseItem.EndClass),
174208
"start_week": int(courseItem.StartWeek),
175209
"end_week": int(courseItem.EndWeek),
176210
"weekday": int(courseItem.Weekday),
177-
"is_single": getBoolValue(courseItem.Single),
178-
"is_double": getBoolValue(courseItem.Double_),
179-
"color": getStringValueWithDefault(courseItem.Color, "#FF5733"),
180-
"remark": getStringValue(courseItem.Remark),
211+
"is_single": single,
212+
"is_double": double_,
213+
"color": color,
214+
"remark": remark,
181215
}
182216

183217
rows, err := dbClient.Course.UpdateCustomCourse(ctx, stuId, req.Term, *courseId, updates)

0 commit comments

Comments
 (0)