Skip to content

driques/arriendacheck-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ArriendaCheck Backend

API REST en Spring Boot para gestionar propiedades de arriendo, contratos y reseñas con capacidades geoespaciales usando PostgreSQL + PostGIS.

Inicio Rapido

Requisitos

  • Java 17+
  • Docker y Docker Compose
  • Maven (o usar el incluido mvnw)

Instalacion

# 1. Iniciar PostgreSQL con PostGIS
docker-compose up -d

# 2. Ejecutar la aplicacion
./mvnw spring-boot:run

La API estara disponible en http://localhost:8080


Stack Tecnologico

Tecnologia Proposito
Spring Boot 3.2.2 Framework
PostgreSQL + PostGIS Base de datos con soporte geoespacial
Hibernate 6 + JTS ORM con tipos geometricos
Jackson Serializacion JSON
Lombok Reduccion de boilerplate

Endpoints de la API

Propiedades /api/properties

Metodo Endpoint Descripcion
GET / Listar todas las propiedades
GET /{id} Obtener propiedad por ID
GET /nearby?latitude=&longitude=&radius= Buscar propiedades cercanas
POST / Crear propiedad
PUT /{id} Actualizar propiedad
DELETE /{id} Eliminar propiedad

Ejemplo crear propiedad:

POST /api/properties
{
  "ownerId": 1,
  "addressText": "Av. Providencia 1234",
  "description": "Departamento 2D1B",
  "latitude": -33.4289,
  "longitude": -70.6100
}

Busqueda por cercania:

GET /api/properties/nearby?latitude=-33.4289&longitude=-70.6100&radius=0.01

radius=0.01 grados = aproximadamente 1.1 km


Arriendos /api/tenancies

Metodo Endpoint Descripcion
GET / Listar todos los arriendos
GET /{id} Obtener arriendo por ID
GET /by-property/{propertyId} Obtener por propiedad
GET /by-tenant/{tenantId} Obtener por arrendatario
GET /by-owner/{ownerId} Obtener por propietario
POST / Crear arriendo
PUT /{id} Actualizar arriendo
DELETE /{id} Eliminar arriendo

Ejemplo crear arriendo:

POST /api/tenancies
{
  "propertyId": 1,
  "tenantId": 3,
  "status": "ACTIVE",
  "startDate": "2024-01-15"
}

Estados de arriendo: INVITED, ACCEPTED, ACTIVE, ENDED, REJECTED


Resenas /api/reviews

Metodo Endpoint Descripcion
GET / Listar todas las resenas
GET /{id} Obtener resena por ID
GET /by-author/{authorId} Resenas escritas por usuario
GET /by-target/{targetId} Resenas sobre usuario
GET /nearby?latitude=&longitude=&radius= Buscar resenas en zona
GET /average-rating/{userId} Rating promedio del usuario
POST / Crear resena
PUT /{id} Actualizar resena
DELETE /{id} Eliminar resena

Ejemplo crear resena con factores de riesgo:

POST /api/reviews
{
  "authorId": 1,
  "targetId": 3,
  "tenancyId": 1,
  "rating": 5,
  "comment": "Excelente arrendatario!",
  "latitude": -33.4289,
  "longitude": -70.6100,
  "riskFactors": [
    { "factor": "PAYS_ON_TIME", "value": true, "note": "Siempre paga antes del 5" },
    { "factor": "PROPERTY_CARE", "value": true },
    { "factor": "GOOD_COMMUNICATION", "value": true }
  ]
}

Usuarios /api/users

Metodo Endpoint Descripcion
GET / Listar todos los usuarios
GET /{id} Obtener usuario por ID
GET /by-email?email= Buscar usuario por email

Factores de Riesgo

Factores de riesgo tipados para evaluar arrendatarios y propietarios:

Para evaluar Arrendatarios

Factor Descripcion
PAYS_ON_TIME Paga el arriendo a tiempo
PROPERTY_CARE Cuida la propiedad
NOISE_COMPLAINTS Causa ruidos molestos
GOOD_COMMUNICATION Se comunica bien
RESPECTS_LEASE Respeta los terminos del contrato
LEFT_IN_GOOD_CONDITION Dejo la propiedad en buen estado
PROPERTY_DAMAGE Causo danos a la propiedad
UNAUTHORIZED_OCCUPANTS Tuvo ocupantes no autorizados
UNAUTHORIZED_PETS Tuvo mascotas no autorizadas

Para evaluar Propietarios

Factor Descripcion
RESPONDS_QUICKLY Responde rapido a problemas
DOES_MAINTENANCE Realiza mantenimiento regular
RETURNS_DEPOSIT Devuelve la garantia correctamente
MATCHES_DESCRIPTION La propiedad coincide con el anuncio
RESPECTS_PRIVACY Respeta la privacidad del arrendatario
PROPER_DOCUMENTATION Entrega documentacion correcta
ILLEGAL_DEDUCTIONS Hace deducciones ilegales
ENTERS_WITHOUT_NOTICE Entra sin aviso previo

Flujo de Arriendos

flowchart LR
    A[Propietario crea Propiedad] --> B[Propietario invita Arrendatario]
    B --> C{Tiene cuenta?}
    C -->|Si| D[INVITED con tenantId]
    C -->|No| E[INVITED con email]
    D --> F[Arrendatario acepta]
    E --> G[Arrendatario se registra y acepta]
    F --> H[ACTIVE]
    G --> H
    H --> I[Contrato termina]
    I --> J[ENDED]
    J --> K[Ambos pueden dejar Resenas]
Loading
Estado Descripcion
INVITED Invitacion enviada, esperando respuesta
ACCEPTED Arrendatario acepto la invitacion
ACTIVE Arriendo en curso
ENDED Arriendo terminado
REJECTED Arrendatario rechazo la invitacion

Datos de Prueba

La aplicacion carga datos de prueba automaticamente al iniciar.

Usuarios

ID Email Rol Nombre
1 propietario1@arriendacheck.com LANDLORD Carlos Perez
2 propietario2@arriendacheck.com LANDLORD Maria Gonzalez
3 arrendatario1@arriendacheck.com TENANT Juan Silva
4 arrendatario2@arriendacheck.com TENANT Ana Rodriguez
5 arrendatario3@arriendacheck.com TENANT Pedro Martinez

Propiedades (Santiago, Chile)

ID Direccion Dueno Coordenadas
1 Av. Providencia 1234 Carlos -33.4289, -70.6100
2 Las Condes 5678 Carlos -33.4100, -70.5500
3 Vicuna Mackenna 910, Nunoa Maria -33.4530, -70.5980
4 Av. Italia 2345 Maria -33.4400, -70.6200
5 Gran Avenida 6789, San Miguel Carlos -33.4900, -70.6500

Arriendos

Propiedad Arrendatario Estado Fechas
Providencia 1234 Juan ACTIVE 2024-01-15 - presente
Las Condes 5678 Ana ACTIVE 2024-03-01 - presente
Nunoa Pedro ENDED 2023 - 2024
Av. Italia Juan ENDED 2022 - 2023
San Miguel (invitado) INVITED pendiente

Resenas

Autor Rating Evaluado Comentario
Carlos 5 Juan "Excelente arrendatario"
Juan 4 Carlos "Buen propietario"
Maria 2 Pedro "Pagos atrasados"
Pedro 3 Maria "Regular"
Carlos 5 Juan "Impecable como siempre"

Pruebas Rapidas

PowerShell

# Listar propiedades
Invoke-RestMethod http://localhost:8080/api/properties

# Buscar propiedades cercanas
Invoke-RestMethod "http://localhost:8080/api/properties/nearby?latitude=-33.4289&longitude=-70.6100&radius=0.02"

# Ver resenas de Juan (ID=3)
Invoke-RestMethod http://localhost:8080/api/reviews/by-target/3

# Rating promedio de Juan
Invoke-RestMethod http://localhost:8080/api/reviews/average-rating/3

# Arriendos de Carlos como propietario
Invoke-RestMethod http://localhost:8080/api/tenancies/by-owner/1

cURL

# Listar propiedades
curl http://localhost:8080/api/properties

# Crear propiedad
curl -X POST http://localhost:8080/api/properties \
  -H "Content-Type: application/json" \
  -d '{"ownerId":1,"addressText":"Nueva Direccion","latitude":-33.45,"longitude":-70.65}'

Estructura del Proyecto

src/main/java/com/arriendaCheck/demo/
├── config/          # Configuracion de Jackson y Security
├── controller/      # Controladores REST
├── domain/
│   ├── entity/      # Entidades JPA
│   └── enums/       # Role, TenancyStatus, RiskFactor
├── dto/             # DTOs de Request/Response
├── repository/      # Repositorios JPA
└── service/         # Logica de negocio

Configuracion

Configuraciones principales en application.properties:

# Base de datos
spring.datasource.url=jdbc:postgresql://localhost:5432/arriendacheck_db
spring.datasource.username=arriendacheck
spring.datasource.password=arriendacheck

# JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

# Datos de prueba se cargan automaticamente al iniciar
spring.sql.init.mode=always

Licencia

MIT

Releases

No releases published

Packages

 
 
 

Contributors

Languages