A Web API built with .NET 7, Microservices, MediatR/CQRS Pattern, EF Core, and using Clean Architecture. Data stores: PostgreSQL (Mongo?), Redis. It can be used for listing, browsing and renting/selling properties.
Frontend: RealEstate Frontend
Microservice | Status | Description |
---|---|---|
API Gateway :9000 | Routing, Auth/Authz, Load Balancer, CORS, Rate Limiter, Health Checks, Swagger | |
Clients :9001 | Client profiles, Roles, Saved Items/Settings | |
Contracts :9002 | Contracts - Save, Modify Documents | |
Estates :9003 | Estates Management, Data Access | |
External API :9004 | Zillow API, Stripe API, Scraper | |
Listings :9005 | Estate Listings, Search, Filter, Trends | |
Messaging :9006 | Emails, Notifications | |
Utilities :9007 | Background Tasks, File Management, Cache, Formatters, Shared Resources | |
Cross-Cutting / Shared | Generic Repository, Event Bus, Logging, MediatR, Models - Entities, DTOs, Startup Extensions | |
Tests | e2e, Functional. Integration, Unit Tests |
Make sure you have installed and configured docker in your environment. After that, you can run the below commands from the .NET RealEstate directory and start the project:
docker-compose build
docker-compose up
make compose-build
make compose
- [✔]
.NET 7
- [✔]
Microservices
(and Clean Architecture) - [✔]
Vertical Slice Architecture
- [✔]
Domain Driven Design (DDD)
to implement all business processes in microservices. - [✔]
Fluent Validation
and aValidation Pipeline Behaviour
on top ofMediatR
. - [✔]
Built-In Containerization
forDocker
images of microservices and DBs - [✔]
Ocelot
- API Gateway/Reverse Proxy - [✔]
MediatR
/ CQRS Pattern - [✔]
Entity Framework Core 6
- ORM - [✔]
PostgreSQL
(and MongoDB possibly?) - [✔]
Redis
Caching - [✔]
Sendgrid
for emails - [✔]
Cloudinary.Net
for file upload/storage - [✔]
Swagger
/ Swashbuckle API Docs - [✔]
Stripe
Payments API - [✔]
Elasticsearch / Logstash|Serilog / Kibana
- ELK stack for logging - [✔]
Automapper
- [✔]
Nuke
Build Pipeline - [✔]
Keycloak
- Authentication / Authorization and User Management - [✔]
RabbitMQ / MassTransit
- Event Bus - [✔]
CI/CD Pipeline
with github actions - [✔]
Polly
Resilience - Persistance/Retries - [✔]
SonarAnalyzer + StyleCop
- Code quality gate - [✔]
CodeCov
- Code Coverage and Reports
- A Scraper which takes listings from real sites
HangFire
for task scheduling / background executionConsul
- Service DiscoveryGrafana + Prometheus
- MonitoringSieve
- Sorting and FilteringSpectre Console
Zipkin
- distributed tracingSignalR
for on-page notifications/messaging
Camunda
- Orchestration and BPMN EngineAggregator service
- Data from multiple DBs / Microservices and transformationsToken Handler Middleware
which is used for the Keycloak AuthMVC Versioning API
opentelemetry-dotnet
(Testing)
- MyTested.AspNetCore.Mvc
- Moq (incl inMemory DB)
- xunit and NUnit
- coverlet / CodeCov
Service: | Where to find it: | Description |
---|---|---|
API Gateway Swagger | http://localhost:9000/swagger/index.html | Swagger pages for all microservices |
Microservice openapi.json | http://localhost:900X/swagger/v1/swagger.json | OpenAPI config for each service |
Microservice Swagger UI: | http://localhost:900X/swagger/index.html | Swagger interface for each service |
Keycloak Dashboard | http://localhost:8080/ | Keycloak UI for managing Users, Roles, Realms |
RabbitMQ Dashboard | http://localhost:15672/#/ | RabbitMQ UI for visualising queues/buses |
PgAdmin | http://localhost:5050/browser/ | In-Browser DB management |
Elasticsearch | http://localhost:9200/ | Elasticsearch instance config |
Kibana | http://localhost:5601/ | Kibana UI for elasticsearch/logging |