import 'package:drift/drift.dart' show Value; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:timetrack/core/database/app_database.dart' as db; import 'package:timetrack/features/projects/data/project_mapper.dart'; import 'package:timetrack/features/projects/data/projects_repository.dart'; import 'package:timetrack/features/projects/domain/project.dart'; part 'drift_projects_repository.g.dart'; class DriftProjectsRepository implements ProjectsRepository { DriftProjectsRepository(this._db); final db.AppDatabase _db; @override Stream> watchAll() => _db.projectsDao .watchAll() .map((rows) => rows.map((r) => r.toDomain()).toList()); @override Stream> watchActive() => _db.projectsDao .watchActive() .map((rows) => rows.map((r) => r.toDomain()).toList()); @override Future getById(int id) async { final row = await _db.projectsDao.getById(id); return row?.toDomain(); } @override Future create({ required String name, required int colorValue, String? description, }) => _db.projectsDao.insertProject( db.ProjectsCompanion.insert( name: name, colorValue: colorValue, description: Value(description), ), ); @override Future update(Project project) => _db.projectsDao.updateProject( db.ProjectsCompanion( id: Value(project.id), name: Value(project.name), colorValue: Value(project.colorValue), description: Value(project.description), archivedAt: Value(project.archivedAt), ), ); @override Future archive(int id) => _db.projectsDao.archiveProject(id); @override Future unarchive(int id) => _db.projectsDao.unarchiveProject(id); @override Future delete(int id) => _db.projectsDao.deleteProject(id); } @riverpod ProjectsRepository projectsRepository(ProjectsRepositoryRef ref) { final database = ref.watch(db.appDatabaseProvider); return DriftProjectsRepository(database); }