Skip to content

MateoGurrea02/domus-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Node.js + Sequelize - API-REST-EFI

Este proyecto es una API construida con Node.js, Express, Sequelize y MySQL.

Requisitos previos

  • Node.js instalado
  • MySQL en ejecución

Instalación

  1. Clona este repositorio y navega a la carpeta del proyecto:
git clone <URL-del-repositorio>
cd API-REST-EFI

2. Instala las dependencias

npm install

3. Crea un archivo .env en la raíz del proyecto con la configuración de la base de datos:

DB_USERNAME = root - usuario de mysql personal  
DB_PASSWORD = root1234 - contraseña de mysql personal  
DB_DATABASE = nombre_de_tu_db - nombre de base de datos de mysql personal   
DB_HOST = 127.0.0.1    
PORT = 4000
JWT_SECRET = 'secret'

4. Crea la base de datos en MySQL:

Ubicados dentro de la carpeta del proyecto ejecutamos cd src y luego node createDatabase.js

5. Ejecutar Migraciones

Ejecuta las migraciones para crear las tablas en la base de datos desde el directorio src:
npx sequelize-cli db:migrate

6. Ejecutar seeders

npx sequelize-cli db:seed:all

7. Ejecutar el Servidor

Inicia el servidor con el siguiente comando:
npm start

Estructura del Proyecto

├── src
│ ├── config
│ │ └── config.json # Configuración de la base de datos para Sequelize
│ ├── controllers
│ │ └── userController.js # Controlador para manejar los usuarios
│ ├── migrations
│ │ └── [timestamp]-create-user.js # Migración para crear la tabla de usuarios
│ ├── models
│ │ ├── index.js # Configuración de la conexión de Sequelize
│ │ └── model.js # Definición de cada modelo │ ├── routes
│ │ └── userRoutes.js # Rutas para la API de usuarios
├── .env # Variables de entorno (DB credentials, etc.)
├── createDatabase.js # Crear database a traves de un archivo.js
├── package.json # Dependencias del proyecto y scripts
└── server.js # Configuración del servidor Express

Endpoints

Para todos los endpoints de la API usaremos la dirección 127.0.0.1:*nuestropuerto*/api/ o localhost:*nuestropuerto*/api/.

En las rutas que necesitemos un token para acceder lo enviaremos mediante el header Authorization

1. Usuarios
1. POST '/register' para registrar un usuario. Necesitamos lo siguiente en el body: "name", "email", "password", "type" (Clave foránea del tipo de usuario).

2. POST '/login' para recibir nuestro token de sesión. Necesitamos enviar lo siguiente en el body: "email", "password".

3. GET '/users' para recibir un listado de todos los usuarios. Necesitamos enviar un token de usuario tipo admin.

4. GET '/users/:id' para recibir los datos de un usuario. Necesitamos enviar un token de usuario tipo admin.

5. GET '/verifyToken' para recibir la información de nuestro token. Necesitamos enviar un token de cualquier tipo de usuario.
2. Clientes
1. POST '/clients' para registrar un nuevo cliente. Necesitamos enviar un token de usuario tipo admin o agente y lo siguiente en el body: "dni", "phoneNumber", "user" (Clave foránea del usuario).

2. GET '/clients' para recibir un listado de todos los clientes. Necesitamos token de usuario tipo admin o de agente.

3. GET '/clients/:id' para recibir los datos de un cliente en específico.

4. PUT '/clients/update' para actualizar la información de un cliente. Necesitamos enviar un token de tipo admin y enviar lo siguiente en el body: "id", "dni", "phoneNumber", "name", "email".

5. DELETE '/clients/:id' para borrar un cliente. Necesitamos enviar un token de tipo admin.
3. Agentes
1. POST '/agents' para registrar un nuevo agente. Necesitamos enviar un token de tipo admin lo siguiente en el body: "user" (Clave foranea del usuario).

2. GET '/agents' para recibir un listado de todos los agentes. Nececsitamos enviar un token de tipo admin.

3. GET '/agents/:id' para recibir los datos de un agente.

4. DELETE '/agents/:id' para borrar un agente.
4. Propiedades
1. POST '/properties' para registrar una nueva propiedad. Necesitamos enviar un token de tipo agente y lo siguiente en el body: "address", "propertyType" (Clave foránea del tipo de propiedad), "price", "status" (Clave foránea al estado de la propiedad), "description", "size", "title", "rating", "bedrooms", "bathrooms", "maxResidents".

2. POST '/properties/filter' para recibir un listado filtrado de propiedades. Podemos enviar lo siguiente en el body:
"price" Enviamos un JSON con los siguientes atributos: "gte" para precio mínimo y "lte" para precio máximo.
"type" El tipo de propiedad.
"size" Enviamos un JSON con los siguientes atributos: "gte" para tamaño mínimo y "lte" para tamaño máximo.

3. GET '/properties' para recibir un listado de todas las propiedades.

4. GET '/properties/find/:id' para recibir los datos de una propiedad.

5. GET '/properties/agent' para recibir un listado de las propiedades del agente actual. Nececsitamos enviar un token de tipo agente.

6. PUT '/properties/update/:id' para actualizar una propiedad. Necesitamos enviar un token de tipo agente, el cual debe ser el dueño de la propiedad y lo siguiente en el body: "address", "propertyType" (Clave foránea del tipo de propiedad), "price", "status" (Clave foránea al estado de la propiedad), "description", "size".

7. DELETE 'properties/:propertyId' para borrar una propiedad. Necesitamos enviar un token de tipo agente, el cual debe ser el dueño de la propiedad.

8. GET '/properties/user/:id' para recibir un listado de las propiedades compradas por el cliente seleccionado, el id a pasar es el del usuario del cliente.
5. Alquileres
1. POST '/rents' para registrar un nuevo alquiler. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad que elijamos y lo siguiente en el body: "property" (Clave foránea de la propiedad), "client" (Clave foránea del cliente), startDate, finishDate, monthlyAmount, status (Clave foránea al estado del alquiler).

2. GET '/rents' para recibir un listado de todos los alquileres'.

3. GET '/rents/find/:id' para recibir los datos de un alquiler en particular.

4. GET '/rents/agent' para recibir un listado de los alquileres del agente actual. Necesitamos enviar un token de tipo agente.

5. PUT '/rents/:id' para actualizar un alquiler. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad que elijamos y a la que la cambiemos y lo siguiente en el body: "property" (Clave foránea de la propiedad), "client" (Clave foránea del cliente), startDate, finishDate, monthlyAmount, status (Clave foránea al estado del alquiler).

6. DELETE '/rents/:id' para borrar un alquiler. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad del alquiler que elijamos.
6. Ventas
1. POST '/sales' para registrar una nueva venta. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad que elijamos y lo siguiente en el body: "property" (Clave foránea de la propiedad), "client" (Clave foránea del cliente), amount, status (Clave foránea al estado de la venta).

2. GET '/sales' para recibir un listado de todas las ventas.

3. GET '/sales/find/:id' para recibir los datos de una venta en particular.

4. GET '/sales/agent' para recibir un listado de las ventas del agente actual. Necesitamos enviar un token de tipo agente.

5. PUT '/sales/:id' para actualizar una venta. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad que elijamos y a la que la cambiemos y lo siguiente en el body: "property" (Clave foránea de la propiedad), "client" (Clave foránea del cliente), date, amount, status (Clave foránea del estado de la venta).

6. DELETE '/sales/:id' para borrar un alquiler. Necesitamos enviar un token de tipo agente, el cual debe ser dueño de la propiedad de la venta que elijamos.
7. Tipos
1. GET '/propertyType' para recibir un listado de todos los tipos de propiedades.

2. GET '/userType' para recibir un listado de todos los tipos de usuarios.
8. Estados
1. GET '/propertyStatus' para recibir un listado de todos los estados de propiedades.

2. GET '/rentStatus' para recibir un listado de todos los estados de alquileres.

3. GET '/saleStatus' para recibir un listado de todos los estados de ventas.
9. Imagenes
1. POST '/image' para cargar una imagen a una propiedad. Necesitamos enviar un token de tipo admin o agente y lo siguiente en el body: property (Clave foranea a la propiedad que carguemos la imagen) e image (La imagen que carguemos)

2. GET '/image/:property' para recibir un listado de enlaces de imágenes asociadas a una propiedad en particular.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published