upsertCourseOffering method
Returns the ID of an existing course offering, or creates/updates one.
Upserts by (semester, number). Null-number entries always insert
(SQLite treats NULLs as distinct) — caller must delete stale ones first.
Implementation
Future<int> upsertCourseOffering({
String? courseCode,
required int semesterId,
String? number,
required String nameZh,
String? nameEn,
double? credits,
int? hours,
int? phase,
String? status,
String? language,
String? remarks,
String? syllabusId,
}) async {
return (await into(courseOfferings).insertReturning(
CourseOfferingsCompanion.insert(
courseCode: Value(courseCode),
semester: semesterId,
number: Value(number),
nameZh: nameZh,
nameEn: Value(nameEn),
credits: Value(credits),
hours: Value(hours),
phase: Value(phase),
status: Value(status),
language: Value(language),
remarks: Value(remarks),
syllabusId: Value(syllabusId),
),
onConflict: DoUpdate(
(old) => CourseOfferingsCompanion(
courseCode: Value(courseCode),
nameZh: Value(nameZh),
nameEn: .absentIfNull(nameEn),
credits: Value(credits),
hours: Value(hours),
phase: Value(phase),
status: Value(status),
language: Value(language),
remarks: Value(remarks),
syllabusId: Value(syllabusId),
),
target: [courseOfferings.semester, courseOfferings.number],
),
)).id;
}