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 upmake 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 Validationand aValidation Pipeline Behaviouron top ofMediatR. - [✔]
Built-In ContainerizationforDockerimages of microservices and DBs - [✔]
Ocelot- API Gateway/Reverse Proxy - [✔]
MediatR/ CQRS Pattern - [✔]
Entity Framework Core 6- ORM - [✔]
PostgreSQL(and MongoDB possibly?) - [✔]
RedisCaching - [✔]
Sendgridfor emails - [✔]
Cloudinary.Netfor file upload/storage - [✔]
Swagger/ Swashbuckle API Docs - [✔]
StripePayments API - [✔]
Elasticsearch / Logstash|Serilog / Kibana- ELK stack for logging - [✔]
Automapper - [✔]
NukeBuild Pipeline - [✔]
Keycloak- Authentication / Authorization and User Management - [✔]
RabbitMQ / MassTransit- Event Bus - [✔]
CI/CD Pipelinewith github actions - [✔]
PollyResilience - Persistance/Retries - [✔]
SonarAnalyzer + StyleCop- Code quality gate - [✔]
CodeCov- Code Coverage and Reports
- A Scraper which takes listings from real sites
HangFirefor task scheduling / background executionConsul- Service DiscoveryGrafana + Prometheus- MonitoringSieve- Sorting and FilteringSpectre ConsoleZipkin- distributed tracingSignalRfor on-page notifications/messaging
Camunda- Orchestration and BPMN EngineAggregator service- Data from multiple DBs / Microservices and transformationsToken Handler Middlewarewhich is used for the Keycloak AuthMVC Versioning APIopentelemetry-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 |

