This is the initial commit for the CODEX_ADK project, a full-stack AI agent management platform featuring: BACKEND (ASP.NET Core 8.0): - CQRS architecture with 6 commands and 7 queries - 16 API endpoints (all working and tested) - PostgreSQL database with 5 entities - AES-256 encryption for API keys - FluentValidation on all commands - Rate limiting and CORS configured - OpenAPI/Swagger documentation - Docker Compose setup (PostgreSQL + Ollama) FRONTEND (Flutter 3.x): - Dark theme with Svrnty branding - Collapsible sidebar navigation - CQRS API client with Result<T> error handling - Type-safe endpoints from OpenAPI schema - Multi-platform support (Web, iOS, Android, macOS, Linux, Windows) DOCUMENTATION: - Comprehensive API reference - Architecture documentation - Development guidelines for Claude Code - API integration guides - context-claude.md project overview Status: Backend ready (Grade A-), Frontend integration pending 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
53 lines
1.4 KiB
C#
53 lines
1.4 KiB
C#
using Codex.Dal;
|
|
using FluentValidation;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using OpenHarbor.CQRS.Abstractions;
|
|
|
|
namespace Codex.CQRS.Commands;
|
|
|
|
/// <summary>
|
|
/// Command to soft-delete an agent
|
|
/// </summary>
|
|
public record DeleteAgentCommand
|
|
{
|
|
/// <summary>
|
|
/// ID of the agent to delete
|
|
/// </summary>
|
|
public Guid Id { get; init; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Handler for deleting an agent (soft delete)
|
|
/// </summary>
|
|
public class DeleteAgentCommandHandler(CodexDbContext dbContext) : ICommandHandler<DeleteAgentCommand>
|
|
{
|
|
public async Task HandleAsync(DeleteAgentCommand command, CancellationToken cancellationToken = default)
|
|
{
|
|
var agent = await dbContext.Agents
|
|
.FirstOrDefaultAsync(a => a.Id == command.Id && !a.IsDeleted, cancellationToken);
|
|
|
|
if (agent == null)
|
|
{
|
|
throw new InvalidOperationException($"Agent with ID {command.Id} not found or has already been deleted");
|
|
}
|
|
|
|
// Soft delete
|
|
agent.IsDeleted = true;
|
|
agent.UpdatedAt = DateTime.UtcNow;
|
|
|
|
await dbContext.SaveChangesAsync(cancellationToken);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Validator for DeleteAgentCommand
|
|
/// </summary>
|
|
public class DeleteAgentCommandValidator : AbstractValidator<DeleteAgentCommand>
|
|
{
|
|
public DeleteAgentCommandValidator()
|
|
{
|
|
RuleFor(x => x.Id)
|
|
.NotEmpty().WithMessage("Agent ID is required");
|
|
}
|
|
}
|