@@ -18,9 +18,11 @@ package course
1818
1919import (
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