Skip to content

Propstg206/baronette-api

Repository files navigation

Baronette Data API

Esta API es parte de un sistema que conecta una aplicación web con una base de datos PostgreSQL. Permite la gestión de usuarios, incluyendo registro, login y verificación de privilegios de administrador. Está construida utilizando Node.js con Express, y la base de datos es administrada con PostgreSQL. Se ha desarrollado bajo un marco REST, para facilitar su despliegue, mantenimiento y escalabilidad.


Tabla de contenidos

  1. Estructura del proyecto
  2. Instalación y configuración
  3. Endpoints
  4. Modelo de Base de Datos
  5. Despliegue
  6. Dependencias
  7. Licencia

1. Estructura del proyecto

baronette-api/
├── src/
│   ├── app.js................... Punto de entrada de la aplicación
│   ├── routes/
│   │   └── userRoutes.js........ Definición de las rutas relacionadas con los usuarios
│   ├── controllers/
│   │   └── userController.js.... Lógica de control para las solicitudes de los usuarios
│   ├── models/
│   │   └── userModel.js......... Consultas a la base de datos y procesamiento de la información
│   └── config/
│       └── database.js.......... Configuración de la conexión a PostgreSQL
├── docker-compose.yml........... Configuración de Docker para levantar la API
├── Dockerfile................... Archivo Docker para crear la imagen de la API
├── .env......................... Archivo de configuración de variables de entorno
├── package.json................. Dependencias y scripts del proyecto
├── package-lock.json............ Archivo de lock de dependencias

2. Instalación y configuración

  1. Requisitos previos:

    • Node.js (se recomienda usar una versión LTS para asegurar la estabilidad)
    • Docker (para desplegar el servicio de forma independiente)
    • Servicio de PostgreSQL instalado o acceso a una base de datos remota
  2. Clonar el repositorio:

    git clone https://github.com/propstg/baronette-api.git
    cd baronette-api
  3. Configuración de las variables de entorno:

    Crea un archivo .env en la raíz del proyecto con las siguientes variables:
    # Puerto donde corre la API
    PORT=3000
    
    # Configuración de la base de datos PostgreSQL
    DB_USER=tu_usuario
    DB_HOST=localhost
    DB_NAME=nombre_base_datos
    DB_PASSWORD=tu_contraseña
    DB_PORT=5432 # Puerto por defecto para servicios PostgreSQL
  4. Instalación de dependencias

    Ejecuta el siguiente comando para instalar las dependencias del proyecto:
    npm install
  5. Levantar la aplicación

    • Con Docker

      docker compose up -d --build
      Esto construirá la imagen Docker y levantará un contenedor con la API escuchando en el puerto 3000 en segundo plano.
    • Sin Docker

      Si prefieres ejecutar la aplicación directamente:
      npm src/app.js

3. Endpoints

POST /api/login

Realiza el login de un usuario.

  • Body:
    {
        "username": "usuario",
        "user_password": "contraseña"
    }
  • Respuestas:
    • 200 OK: El usuario ha accedido correctamente.
    • 401 Unauthorized: Contraseña incorrecta.
    • 404 Not Found: Usuario no encontrado.
    • 403 Forbidden: Usuario no verificado por un administrador.

POST /api/register

Registra un usuario.

  • Body:
    {
        "first_name": "nombre",
        "last_name_1": "apellido1",
        "last_name_2": "apellido2",
        "username": "usuario",
        "user_password": "contraseña",
        "email": "[email protected]"
    }
  • Respuestas:
    • 201 Created: Usuario registrado correctamente.
    • 400 Bad request: El nombre de usuario o correo ya están en uso.

POST /api/settings

Verifica si un usuario es administrador.

  • Body:
    {
        "user_id": "id_usuario"
    }
  • Respuestas:
    • 200 OK: El usuario es administrador o no.
    • 500 Internal Server Error: Error al verificar el estatus del usuario.

4. Modelo de Base de Datos

La API se conecta a una base de datos con las siguientes características:

  • Servicio: PostgreSQL (se recomienda usar la versión PSQL16.3)
  • Codificación de los datos en UTF-8
  • Un esquema public con dos tablas:
    • Tabla user_list

      Esta tabla contiene la información de los usuarios:

      Campo Tipo Descripción
      id SERIAL Identificador único de usuario uuid4 (clave primaria)
      first_name VARCHAR Nombre (real) del usuario
      last_name_1 VARCHAR Primer apellido del usuario
      last_name_2 VARCHAR Segundo apellido del usuario (opcional)
      username VARCHAR Nombre de usuario en la aplicación (único)
      user_password VARCHAR Contraseña (hasheada) del usuario
      email VARCHAR Correo electrónico del usuario
      verified BOOLEAN Indica si el usuario está verificado
    • Tabla admin_list

      Esta tabla contiene los identificadores de los usuarios que son administradores:

      Campo Tipo Descripción
      admin_id SERIAL Identificador único de administrador uuid4 (clave primaria)
      user_id SERIAL Identificador único de usuario uuid4 (clave foránea [user_list])

5. Despliegue

Si deseas desplegar la API en un servidor, asegúrate de que las variables de entorno estén configuradas correctamente en el servidor y que la base de datos PostgreSQL esté accesible desde la ubicación del servidor.

  1. Construir la imagen de Docker:

    docker build -t baronette-data-api .
  2. Ejecutar el contenedor:

    docker run -d -p 3000:3000 --env-file .env baronette-data-api

También es posible ejecutar el comando explicado anteriormente: docker compose up -d --build. Hay que tener el cuenta que antes de ejecutarlo se deben hacer las modificaciones necesarias en el archivo docker-compose.yml


6. Dependencias

  • Express: Framework de Node.js para desarrollar servidores web.
  • bcrypt: Middleware para encriptar y verificar datos sensibles.
  • body-parser: Middleware para procesar datos en formato JSON.
  • CORS: Middleware para habilitar Cross-Origin Resource Sharing.
  • dotenv: Middleware para cargar variables de entorno desde un archivo env.
  • pg: Cliente de Node.js para PostgreSQL.

7. Licencia

Este proyecto está licenciado bajo la licencia MIT:

MIT License

Copyright (c) 2024 Propstg

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published