focus-flow/packages/scheduler_persistence/lib/persistence/project_repository.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,
});
}