forked from eva/focus-flow
38 lines
1.3 KiB
Dart
38 lines
1.3 KiB
Dart
part of '../persistence.dart';
|
|
|
|
/// Repository contract for project profile records.
|
|
abstract interface class ProjectRepository {
|
|
/// Return the project with [projectId] in [ownerId], or null when absent.
|
|
Future<RepoResult<core.ProjectProfile?>> findById({
|
|
required core.OwnerId ownerId,
|
|
required String projectId,
|
|
});
|
|
|
|
/// Return owner-scoped projects, optionally including archived profiles.
|
|
Future<RepoResult<core.Page<core.ProjectProfile>>> findByOwner({
|
|
required core.OwnerId ownerId,
|
|
bool includeArchived = false,
|
|
core.PageRequest page = const core.PageRequest(),
|
|
});
|
|
|
|
/// Insert [project] for [ownerId] and return the assigned revision.
|
|
Future<RepoResult<core.Revision>> insert({
|
|
required core.OwnerId ownerId,
|
|
required core.ProjectProfile project,
|
|
});
|
|
|
|
/// Save [project] if [expectedRevision] still matches the stored record.
|
|
Future<RepoResult<core.Revision>> save({
|
|
required core.OwnerId ownerId,
|
|
required core.ProjectProfile project,
|
|
required core.Revision expectedRevision,
|
|
});
|
|
|
|
/// Archive [projectId] without deleting task history.
|
|
Future<RepoResult<core.Revision>> archive({
|
|
required core.OwnerId ownerId,
|
|
required String projectId,
|
|
required core.Revision expectedRevision,
|
|
required DateTime archivedAtUtc,
|
|
});
|
|
}
|