using ClaudeDo.Data.Models; using Microsoft.EntityFrameworkCore; namespace ClaudeDo.Data.Repositories; public sealed class WorktreeRepository { private readonly ClaudeDoDbContext _context; public WorktreeRepository(ClaudeDoDbContext context) => _context = context; public async Task AddAsync(WorktreeEntity entity, CancellationToken ct = default) { _context.Worktrees.Add(entity); await _context.SaveChangesAsync(ct); } public async Task GetByTaskIdAsync(string taskId, CancellationToken ct = default) { return await _context.Worktrees.FirstOrDefaultAsync(w => w.TaskId == taskId, ct); } public async Task UpdateHeadAsync(string taskId, string headCommit, string? diffStat, CancellationToken ct = default) { await _context.Worktrees .Where(w => w.TaskId == taskId) .ExecuteUpdateAsync(s => s .SetProperty(w => w.HeadCommit, headCommit) .SetProperty(w => w.DiffStat, diffStat), ct); } public async Task SetStateAsync(string taskId, WorktreeState state, CancellationToken ct = default) { await _context.Worktrees .Where(w => w.TaskId == taskId) .ExecuteUpdateAsync(s => s.SetProperty(w => w.State, state), ct); } public async Task DeleteAsync(string taskId, CancellationToken ct = default) { await _context.Worktrees.Where(w => w.TaskId == taskId).ExecuteDeleteAsync(ct); } }