upsertCourseOffering method

Future<int> upsertCourseOffering({
  1. String? courseCode,
  2. required int semesterId,
  3. String? number,
  4. required String nameZh,
  5. String? nameEn,
  6. double? credits,
  7. int? hours,
  8. int? phase,
  9. String? status,
  10. String? language,
  11. String? remarks,
  12. String? syllabusId,
})

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