Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Structura

.NET 10 Docker

Structura is a sample back-end project implemented with .NET 10, demonstrating Clean Architecture principles along with CQRS and MediatR for command/query separation. It uses Entity Framework Core for data access and supports both InMemory and PostgreSQL databases. The project is designed to be modular, scalable, and easily reusable for future projects.


Features

  • Clean Architecture Clear separation of concerns across layers:

    • Domain: Core entities and business rules
    • Application: Commands, Queries, Validators, and Pipeline Behaviors
    • Infrastructure: Repositories, DbContext, external services
    • API: Web API endpoints
  • CQRS + MediatR Command and Query responsibilities are fully separated. Handlers, Notifications, and Pipeline Behaviors (e.g., Logging, Validation) are implemented using MediatR.

  • Validation & Logging Pipeline Requests are automatically validated using FluentValidation before reaching handlers. Logging behavior captures request and response flow for easier debugging.

  • Flexible Database Configuration

    • InMemory Database for development and testing
    • PostgreSQL for production use
      Configuration is environment-aware and automatically switches between databases.
  • Unit Testing Ready Comprehensive unit tests are included for:

    • Handlers
    • Pipeline Behaviors
    • Repositories using InMemory database
  • Extensible & Reusable Designed to allow easy addition of new features, modules, or external integrations without violating Clean Architecture principles.


Getting Started

Prerequisites

  • .NET 10 SDK
  • PostgreSQL (optional for production)

Running the Project

  1. Clone the repository:
git clone git@github.com:nimanikoo/Structura.git
cd Structura
  1. Configure the connection string in appsettings.json:
{
  "ConnectionStrings": {
    "DefaultConnection": "Host=localhost;Database=structura;Username=postgres;Password=postgres"
  }
}
  1. Run the application:
dotnet run --project src/Structura.Api
  1. The API will be available at https://localhost:5182 (or http://localhost:5182 for non-HTTPS).
    Swagger UI is enabled in Development mode at /swagger/index.html.

🐳 Docker & Running in Container

You can run Structura API inside a Docker container with PostgreSQL or InMemory database.

🚀 Build Docker Image

From the root of the project (where Dockerfile is located):

docker build -t structura-api .

🏃‍♂️ Run the Container

docker run -d -p 5182:8080 -e ASPNETCORE_ENVIRONMENT=Development --name structura-api structura-api
  • -p 5182:8080 maps the container port 8080 to your local port 5182.
  • -e ASPNETCORE_ENVIRONMENT=Development ensures Swagger is enabled.

🌐 Access Swagger UI

After the container starts, open your browser:

http://localhost:5182/swagger/index.html

Project Structure

Structura/
│
├─ src/
│  ├─ Structura.Api/              # ASP.NET Core Web API
│  ├─ Structura.Application/      # Application layer: Commands, Queries, Validators, Behaviors
│  ├─ Structura.Domain/           # Domain entities and business rules
│  └─ Structura.Infrastructure/   # Repositories, DbContext, database configuration
│
└─ tests/
   └─ Structura.Tests/            # Unit tests for Handlers, Behaviors, Repositories

Key Patterns

  • Pipeline Behaviors: Middleware-like handlers for cross-cutting concerns (Logging, Validation)
  • CQRS: Separation of read and write operations
  • Repository Pattern: Abstraction over EF Core DbContext for cleaner data access
  • Unit Testing: InMemory EF Core used for isolated, fast, reliable tests

Contributing

This project is designed to be reused and extended. Contributions are welcome via pull requests. Please follow Clean Architecture principles and write tests for new features.


License

This project is licensed under the MIT License.

Created with ❤️ by Nima Nikoo

About

Structura is a modular .NET 10 Clean Architecture template that implements CQRS with MediatR, uses EF Core for data access, supports InMemory and PostgreSQL databases, includes validation and logging pipeline behaviors, and comes with ready-to-use unit tests for scalable and maintainable back-end development.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages