/.NET-RealEstate

(This is still only partially done and a work in progress!) A web project built with .NET, Microservices(and DBs) and the MediatR/CQRS Pattern, EF Core, PostgreSQL, Redis. It can be used for listing, browsing and renting/selling properties.

Primary LanguageC#

.NET - Real Estate API

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.

Architecture (planned):

..

Microservice, Build Status (GitHub Actions), Description:

Microservice Status Description
API Gateway :9000 api-gateway Routing, Auth/Authz, Load Balancer, CORS, Rate Limiter, Health Checks, Swagger
Clients :9001 api.clients Client profiles, Roles, Saved Items/Settings
Contracts :9002 api.contracts Contracts - Save, Modify Documents
Estates :9003 api.estates Estates Management, Data Access
External API :9004 api.external Zillow API, Stripe API, Scraper
Listings :9005 api.listings Estate Listings, Search, Filter, Trends
Messaging :9006 api.messaging Emails, Notifications
Utilities :9007 api.utilities Background Tasks, File Management, Cache, Formatters, Shared Resources
Cross-Cutting / Shared shared Generic Repository, Event Bus, Logging, MediatR, Models - Entities, DTOs, Startup Extensions
Tests test-unit e2e, Functional. Integration, Unit Tests

Getting Started

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

Built With:

  • [] .NET 7
  • [] Microservices (and Clean Architecture)
  • [] Vertical Slice Architecture
  • [] Domain Driven Design (DDD) to implement all business processes in microservices.
  • [] Fluent Validation and a Validation Pipeline Behaviour on top of MediatR.
  • [] Built-In Containerization for Docker 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

Not implemented yet / In Progress:

  • A Scraper which takes listings from real sites
  • HangFire for task scheduling / background execution
  • Consul - Service Discovery
  • Grafana + Prometheus - Monitoring
  • Sieve - Sorting and Filtering
  • Spectre Console
  • Zipkin - distributed tracing
  • SignalR for on-page notifications/messaging

Future plans:

  • Camunda - Orchestration and BPMN Engine
  • Aggregator service - Data from multiple DBs / Microservices and transformations
  • Token Handler Middleware which is used for the Keycloak Auth
  • MVC Versioning API
  • opentelemetry-dotnet

(Testing)

  • MyTested.AspNetCore.Mvc
  • Moq (incl inMemory DB)
  • xunit and NUnit
  • coverlet / CodeCov

Roles : Guest, User, Agent, Admin (Editable in the Keycloak client)

Services / Utilities and where to find them:

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