import 'package:drift/drift.dart'; import 'package:trainhub_flutter/data/database/app_database.dart'; part 'program_dao.g.dart'; @DriftAccessor(tables: [Programs, ProgramWeeks, ProgramWorkouts]) class ProgramDao extends DatabaseAccessor with _$ProgramDaoMixin { ProgramDao(super.db); Future> getAllPrograms() => (select(programs) ..orderBy([ (t) => OrderingTerm(expression: t.createdAt, mode: OrderingMode.desc) ])) .get(); Future getProgram(String id) => (select(programs)..where((t) => t.id.equals(id))).getSingleOrNull(); Future insertProgram(ProgramsCompanion entry) => into(programs).insert(entry); Future deleteProgram(String id) => (delete(programs)..where((t) => t.id.equals(id))).go(); Future> getWeeks(String programId) => (select(programWeeks) ..where((t) => t.programId.equals(programId)) ..orderBy([(t) => OrderingTerm(expression: t.position)])) .get(); Future insertWeek(ProgramWeeksCompanion entry) => into(programWeeks).insert(entry); Future deleteWeek(String id) => (delete(programWeeks)..where((t) => t.id.equals(id))).go(); Future updateWeekNote(String weekId, String note) => (update(programWeeks)..where((t) => t.id.equals(weekId))) .write(ProgramWeeksCompanion(notes: Value(note))); Future> getWorkouts(String programId) => (select(programWorkouts)..where((t) => t.programId.equals(programId))) .get(); Future insertWorkout(ProgramWorkoutsCompanion entry) => into(programWorkouts).insert(entry); Future updateWorkout(String id, ProgramWorkoutsCompanion entry) => (update(programWorkouts)..where((t) => t.id.equals(id))).write(entry); Future deleteWorkout(String id) => (delete(programWorkouts)..where((t) => t.id.equals(id))).go(); Future toggleWorkoutComplete(String id, bool currentStatus) => (update(programWorkouts)..where((t) => t.id.equals(id))) .write(ProgramWorkoutsCompanion(completed: Value(!currentStatus))); }