upsertTeacherSemester method
Returns the ID of an existing teacher semester, or creates/updates one.
Implementation
Future<int> upsertTeacherSemester({
required String code,
required int semesterId,
required String nameZh,
String? nameEn,
String? email,
int? departmentId,
String? title,
double? teachingHours,
String? officeHoursNote,
DateTime? fetchedAt,
}) async {
return transaction(() async {
final teacher = await into(teachers).insertReturning(
TeachersCompanion.insert(
code: code,
nameZh: nameZh,
nameEn: Value(nameEn),
),
onConflict: DoUpdate(
(old) => TeachersCompanion(
nameZh: Value(nameZh),
nameEn: Value.absentIfNull(nameEn),
),
target: [teachers.code],
),
);
final semesterProfile = await into(teacherSemesters).insertReturning(
TeacherSemestersCompanion.insert(
teacher: teacher.id,
semester: semesterId,
email: Value(email),
department: Value(departmentId),
title: Value(title),
teachingHours: Value(teachingHours),
officeHoursNote: Value(officeHoursNote),
fetchedAt: Value.absentIfNull(fetchedAt),
),
onConflict: DoUpdate(
(old) => TeacherSemestersCompanion(
teacher: Value(teacher.id),
email: Value.absentIfNull(email),
department: Value.absentIfNull(departmentId),
title: Value.absentIfNull(title),
teachingHours: Value.absentIfNull(teachingHours),
officeHoursNote: Value.absentIfNull(officeHoursNote),
fetchedAt: Value.absentIfNull(fetchedAt),
),
target: [teacherSemesters.teacher, teacherSemesters.semester],
),
);
return semesterProfile.id;
});
}