focus-flow/packages/scheduler_persistence/lib/persistence/task_repository.dart

57 lines
1.9 KiB
Dart

part of '../persistence.dart';
/// Repository contract for task records.
abstract interface class TaskRepository {
/// Return the task with [taskId] in [ownerId], or null when it is absent.
Future<RepoResult<core.Task?>> findById({
required core.OwnerId ownerId,
required String taskId,
});
/// Return owner-scoped tasks in deterministic adapter order.
Future<RepoResult<core.Page<core.Task>>> findByOwner({
required core.OwnerId ownerId,
core.PageRequest page = const core.PageRequest(),
});
/// Return owner-scoped tasks assigned to [projectId].
Future<RepoResult<core.Page<core.Task>>> findByProjectId({
required core.OwnerId ownerId,
required String projectId,
core.PageRequest page = const core.PageRequest(),
});
/// Return owner-scoped direct child tasks for [parentTaskId].
Future<RepoResult<core.Page<core.Task>>> findByParentTaskId({
required core.OwnerId ownerId,
required String parentTaskId,
core.PageRequest page = const core.PageRequest(),
});
/// Return owner-scoped tasks with [status].
Future<RepoResult<core.Page<core.Task>>> findByStatus({
required core.OwnerId ownerId,
required core.TaskStatus status,
core.PageRequest page = const core.PageRequest(),
});
/// Insert [task] for [ownerId] and return the assigned revision.
Future<RepoResult<core.Revision>> insert({
required core.OwnerId ownerId,
required core.Task task,
});
/// Save [task] if [expectedRevision] still matches the stored record.
Future<RepoResult<core.Revision>> save({
required core.OwnerId ownerId,
required core.Task task,
required core.Revision expectedRevision,
});
/// Remove [taskId] if [expectedRevision] still matches the stored record.
Future<RepoResult<core.Revision>> delete({
required core.OwnerId ownerId,
required String taskId,
required core.Revision expectedRevision,
});
}