71 lines
2.1 KiB
Dart
71 lines
2.1 KiB
Dart
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<List<Project>> watchAll() => _db.projectsDao
|
|
.watchAll()
|
|
.map((rows) => rows.map((r) => r.toDomain()).toList());
|
|
|
|
@override
|
|
Stream<List<Project>> watchActive() => _db.projectsDao
|
|
.watchActive()
|
|
.map((rows) => rows.map((r) => r.toDomain()).toList());
|
|
|
|
@override
|
|
Future<Project?> getById(int id) async {
|
|
final row = await _db.projectsDao.getById(id);
|
|
return row?.toDomain();
|
|
}
|
|
|
|
@override
|
|
Future<int> create({
|
|
required String name,
|
|
required int colorValue,
|
|
String? description,
|
|
}) =>
|
|
_db.projectsDao.insertProject(
|
|
db.ProjectsCompanion.insert(
|
|
name: name,
|
|
colorValue: colorValue,
|
|
description: Value(description),
|
|
),
|
|
);
|
|
|
|
@override
|
|
Future<void> 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<void> archive(int id) => _db.projectsDao.archiveProject(id);
|
|
|
|
@override
|
|
Future<void> unarchive(int id) => _db.projectsDao.unarchiveProject(id);
|
|
|
|
@override
|
|
Future<void> delete(int id) => _db.projectsDao.deleteProject(id);
|
|
}
|
|
|
|
@riverpod
|
|
ProjectsRepository projectsRepository(ProjectsRepositoryRef ref) {
|
|
final database = ref.watch(db.appDatabaseProvider);
|
|
return DriftProjectsRepository(database);
|
|
}
|