feat: planning sessions foundation (Plan A) #4

Merged
claude merged 16 commits from feat/planning-sessions-foundation into main 2026-04-23 16:31:37 +00:00
2 changed files with 31 additions and 0 deletions
Showing only changes of commit 2e80cc606e - Show all commits

View File

@@ -293,6 +293,16 @@ public sealed class TaskRepository
.SetProperty(t => t.PlanningSessionId, sessionId), ct); .SetProperty(t => t.PlanningSessionId, sessionId), ct);
} }
public async Task<TaskEntity?> FindByPlanningTokenAsync(
string token,
CancellationToken ct = default)
{
if (string.IsNullOrEmpty(token)) return null;
return await _context.Tasks
.AsNoTracking()
.FirstOrDefaultAsync(t => t.PlanningSessionToken == token, ct);
}
#endregion #endregion
#region Queue selection #region Queue selection

View File

@@ -166,4 +166,25 @@ public sealed class TaskRepositoryPlanningTests : IDisposable
var loaded = await _tasks.GetByIdAsync(task.Id); var loaded = await _tasks.GetByIdAsync(task.Id);
Assert.Equal("claude-session-42", loaded!.PlanningSessionId); Assert.Equal("claude-session-42", loaded!.PlanningSessionId);
} }
[Fact]
public async Task FindByPlanningTokenAsync_ReturnsTask_WhenTokenMatches()
{
var listId = await CreateListAsync();
var task = MakeTask(listId, TaskStatus.Manual);
await _tasks.AddAsync(task);
await _tasks.SetPlanningStartedAsync(task.Id, "unique-token-123");
var found = await _tasks.FindByPlanningTokenAsync("unique-token-123");
Assert.NotNull(found);
Assert.Equal(task.Id, found!.Id);
}
[Fact]
public async Task FindByPlanningTokenAsync_ReturnsNull_WhenTokenUnknown()
{
var found = await _tasks.FindByPlanningTokenAsync("no-such-token");
Assert.Null(found);
}
} }