Multi-agent AI laboratory with ASP.NET Core 8.0 backend and Flutter frontend. Implements CQRS architecture, OpenAPI contract-first API design. BACKEND: Agent management, conversations, executions with PostgreSQL + Ollama FRONTEND: Cross-platform UI with strict typing and Result-based error handling Co-Authored-By: Jean-Philippe Brule <jp@svrnty.io>
3.9 KiB
3.9 KiB
Codex API Architecture
Overview
Codex is a CQRS-based ASP.NET Core 8.0 Web API built on the OpenHarbor.CQRS framework with a modular architecture powered by PoweredSoft modules.
Key Design Decisions
CQRS Pattern with OpenHarbor
- Auto-generated REST endpoints: Commands and Queries are automatically exposed as REST endpoints by the OpenHarbor.CQRS framework
- Convention-based routing:
- Commands:
POST /api/command/{CommandName} - Queries:
POST /api/query/{QueryName} - Dynamic Queries:
POST /api/dynamicquery/{QueryItemType}
- Commands:
- Command/Query Segregation: Write operations (Commands) are strictly separated from read operations (Queries)
Module System
- Feature-based organization using PoweredSoft's
IModuleinterface - Modules provide clean separation of concerns and dependency registration
- Module hierarchy:
AppModule→DalModule,CommandsModule,QueriesModule
Data Access
- Entity Framework Core with PostgreSQL
- Query optimization: All read operations use
.AsNoTracking()for better performance - Dynamic queries with automatic filtering, sorting, and pagination via PoweredSoft.DynamicQuery
Validation
- FluentValidation integration for all commands
- Automatic validation pipeline before command execution
- All commands require a validator (even if empty)
API Documentation
- OpenAPI/Swagger as single source of truth
- XML documentation for all Commands, Queries, and DTOs
- Auto-generated API contract exported to
docs/openapi.json
Project Structure
Codex.sln
├── Codex.Api/ # API layer, Program.cs, AppModule
├── Codex.CQRS/ # Commands and Queries
│ ├── Commands/ # Write operations
│ └── Queries/ # Read operations
├── Codex.Dal/ # Data access layer
│ ├── CodexDbContext # EF Core DbContext
│ ├── Entities/ # Database entities
│ └── Infrastructure/ # Query provider overrides
└── docs/ # API documentation
├── openapi.json # Auto-generated OpenAPI spec
├── ARCHITECTURE.md # This file
└── CHANGELOG.md # Breaking changes log
Technology Stack
Core Framework
- .NET 8.0 LTS
- ASP.NET Core 8.0
- OpenHarbor.CQRS 8.1.0-rc1
Data Access
- Entity Framework Core 8.0
- Npgsql (PostgreSQL provider)
- PoweredSoft.Data & PoweredSoft.DynamicQuery
Validation & Documentation
- FluentValidation 11.3+
- Swashbuckle.AspNetCore (Swagger)
- XML documentation generation
Security & Authentication
Planned Features
- JWT Bearer token authentication
- Role-based authorization
- CORS configuration for specific origins
Current State
- Authentication infrastructure documented in OpenAPI spec
- Implementation pending
Performance Considerations
Query Optimization
.AsNoTracking()for all read operations- Pagination support for large datasets
- Dynamic filtering to reduce data transfer
Caching Strategy
- In-memory caching available via
IMemoryCache - Cache implementation per use case
Deployment
Environment Configuration
- Development: Swagger UI enabled, relaxed CORS
- Production: HTTPS enforcement, restricted CORS, no Swagger UI
Database Migrations
dotnet ef migrations add <MigrationName> --project Codex.Dal
dotnet ef database update --project Codex.Dal
API Contract Management
Workflow
- Update Command/Query with XML documentation
- Build solution to generate XML files
- Run
export-openapi.shto export OpenAPI spec - Frontend teams consume
docs/openapi.json
Breaking Changes
All breaking API changes must be documented in CHANGELOG.md with:
- Date of change
- Affected endpoints
- Migration guide
- Version number (when versioning is implemented)
Future Enhancements
- API versioning strategy
- Real-time features (SignalR)
- Advanced caching layer
- Distributed tracing
- Health checks endpoint (beyond basic health query)