Files
ClaudeDo/src/ClaudeDo.Data/Repositories/TaskAttachmentRepository.cs
T
Mika Kuns f7e946e472 feat(attachments): MCP tools to attach/list/remove task files
AttachmentMcpTools exposes add_task_attachment (text or base64),
list_task_attachments, and remove_task_attachment on the external MCP
endpoint, so an agent can prepare reference files (plans, scripts) on a task
that will run later. Re-attaching the same name overwrites; add/remove refuse
on a running task.
2026-06-26 16:11:48 +02:00

52 lines
1.7 KiB
C#

using ClaudeDo.Data.Models;
using Microsoft.EntityFrameworkCore;
namespace ClaudeDo.Data.Repositories;
public sealed class TaskAttachmentRepository
{
private readonly ClaudeDoDbContext _context;
public TaskAttachmentRepository(ClaudeDoDbContext context) => _context = context;
public async Task AddAsync(TaskAttachmentEntity entity, CancellationToken ct = default)
{
_context.TaskAttachments.Add(entity);
await _context.SaveChangesAsync(ct);
}
public async Task<List<TaskAttachmentEntity>> ListByTaskIdAsync(string taskId, CancellationToken ct = default)
{
return await _context.TaskAttachments
.Where(a => a.TaskId == taskId)
.OrderBy(a => a.CreatedAt)
.ToListAsync(ct);
}
public async Task<TaskAttachmentEntity?> GetAsync(string taskId, string fileName, CancellationToken ct = default)
{
return await _context.TaskAttachments
.FirstOrDefaultAsync(a => a.TaskId == taskId && a.FileName == fileName, ct);
}
public async Task UpdateAsync(TaskAttachmentEntity entity, CancellationToken ct = default)
{
_context.TaskAttachments.Update(entity);
await _context.SaveChangesAsync(ct);
}
public async Task DeleteAsync(string taskId, string fileName, CancellationToken ct = default)
{
await _context.TaskAttachments
.Where(a => a.TaskId == taskId && a.FileName == fileName)
.ExecuteDeleteAsync(ct);
}
public async Task DeleteAllForTaskAsync(string taskId, CancellationToken ct = default)
{
await _context.TaskAttachments
.Where(a => a.TaskId == taskId)
.ExecuteDeleteAsync(ct);
}
}