Skip to content

Repository files navigation

🏡 Real Estate App & API

A robust, enterprise-level Real Estate Management System built with .NET 9 and Clean Architecture.

.NET 9.0 EF Core 9 C# Docker Swagger Clean Architecture


📖 Acerca del Proyecto

Real Estate App es una plataforma integral diseñada para la gestión inmobiliaria. Permite a agentes, clientes y administradores interactuar en un ecosistema donde se pueden publicar propiedades, gestionar favoritos, realizar ofertas y enviar mensajes.

El sistema está dividido en dos interfaces principales:

  1. WebApp (MVC): Aplicación orientada a usuarios finales, agentes y administradores con interfaces renderizadas del lado del servidor.
  2. Web API: Interfaz RESTful securizada con JWT, diseñada para ser consumida por aplicaciones móviles o clientes de terceros.

✨ Características Principales

  • 🏢 Gestión de Propiedades: CRUD completo de propiedades con soporte para múltiples imágenes (Galería).
  • 🏷️ Categorización: Clasificación por Tipos de Propiedad (Casas, Apartamentos, etc.), Tipos de Venta (Venta, Alquiler) y Mejoras (Piscina, Gimnasio).
  • ❤️ Favoritos: Los usuarios pueden marcar propiedades como favoritas para su seguimiento.
  • 💬 Mensajería Interna: Sistema de comunicación integrado entre clientes y agentes.
  • 🤝 Ofertas: Sistema de negociación que permite a los clientes realizar ofertas formales por las propiedades.
  • 🔐 Autenticación y Autorización: Roles definidos (Administrador, Agente, Cliente) utilizando ASP.NET Core Identity y JWT.
  • 🐋 Docker Ready: Preparado para ser desplegado fácilmente en contenedores (Ej: Render, AWS, Azure).

🏗️ Arquitectura (Clean Architecture)

El proyecto sigue rigurosamente los principios de Clean Architecture, asegurando que el dominio central sea independiente de los frameworks y la infraestructura.

RealStateApp/
├── Core/
│   ├── RealEstateApp.Core.Domain       # Entidades (Property, Message, Offer, etc.), Interfaces
│   └── RealEstateApp.Core.Application  # Casos de uso, DTOs, Mappers, Servicios, Interfaces
├── Infrastructure/
│   ├── RealEstateApp.Infrastructure.Persistence # EF Core DbContext, Repositorios, Migraciones
│   ├── RealEstateApp.Infrastructure.Identity    # Autenticación, Usuarios, Roles (Identity/JWT)
│   └── RealEstateApp.Infrastructure.Shared      # Servicios externos (Email, Uploads, etc.)
└── Presentation/
    ├── RealEstateApi                   # API RESTful, Controladores, Swagger
    └── RealEstateApp                   # Aplicación Web MVC (Vistas, Controladores UI)

🛠️ Tecnologías y Patrones

  • Backend: .NET 9 (C# 13)
  • ORM: Entity Framework Core 9.0
  • Base de Datos: SQL Server
  • Arquitectura: Clean Architecture, Repository Pattern, Dependency Injection.
  • Autenticación: ASP.NET Core Identity & JWT Bearer Tokens.
  • Documentación API: Swagger / OpenAPI.

🚀 Empezando (Getting Started)

Prerrequisitos

Configuración Local

  1. Clonar el repositorio:

    git clone https://github.com/Johanvasquezdev/RealStateApp.git
    cd RealStateApp
  2. Configurar Cadena de Conexión: Actualiza el archivo appsettings.json o appsettings.Development.json en los proyectos RealEstateApp y RealEstateApi con tu cadena de conexión local.

  3. Aplicar Migraciones y Poblar BD: Abre la consola del Administrador de Paquetes en Visual Studio (o usa el CLI) apuntando a Infrastructure.Persistence:

    dotnet ef database update --project RealEstateApp.Infrastructure.Persistence --startup-project RealEstateApp/RealEstateApp.csproj
  4. Ejecutar: Puedes establecer RealEstateApp o RealEstateApi como proyecto de inicio y ejecutarlo.


🐳 Despliegue en Render (Docker)

El proyecto incluye dos archivos Docker en la raíz, optimizados para desplegar en servicios como Render:

  1. Aplicación Web (MVC): Utiliza el archivo Dockerfile.
  2. Web API: Utiliza el archivo Dockerfile.Api.

Pasos en Render:

  1. Crea un nuevo Web Service.
  2. Conecta este repositorio.
  3. Selecciona el entorno Docker.
  4. En Dockerfile Path, ingresa Dockerfile (para la Web) o Dockerfile.Api (para la API).
  5. Agrega tus variables de entorno necesarias (ej. ConnectionStrings__DefaultConnection apuntando a tu base de datos en la nube).

Render automáticamente detectará la exposición del puerto 8080 e inyectará su propio balanceador de carga, por lo que no hace falta mapear puertos extra.


Desarrollado con ❤️ por Johan Vasquez

About

Plataforma de Bienes Raices y Gestion Immobiliaria

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages