Skip to content

SHuan004/Hito5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HITO 5: Proyecto API REST con Implementación de JWT

Descripción del Proyecto

Este proyecto desarrolla una API REST con seguridad basada en JSON Web Token (JWT) para autenticación y autorización. Incluye múltiples modelos y CRUD completos protegidos mediante validaciones y JWT.


Funcionalidades Principales

  1. Seguridad con JWT

    • Registro y Login con generación de tokens.
    • Validación de tokens para endpoints protegidos.
  2. CRUD de Modelos

    • Tipos de Usuario
    • Medicamentos
    • Lotes
    • Movimientos de Inventario
    • Usuarios
  3. Relaciones entre Modelos

    • Lotes se relaciona con Medicamentos.
    • MovimientosInventario se relaciona con Lotes y Usuarios.

Configuración del Proyecto

1. Requisitos Previos

  • Node.js v14 o superior.
  • PostgreSQL o cualquier base de datos soportada por Sequelize.
  • Postman (opcional para pruebas).

2. Instalación y Configuración

Clonar el Repositorio

git clone https://github.com/SHuan004/Hito5
cd Hito5

Instalar Dependencias

npm install

Configurar Variables de Entorno

Crea un archivo .env con:

PORT=3000
JWT_SECRET="secret"
DATABASE_URL="postgres://postgres:root@localhost:5436/db_Hito5"

Iniciar el Proyecto

npm run dev

La API estará disponible en: http://localhost:3000


Endpoints Clave

Autenticación

Registro (POST /auth/register)

  • Entrada:
    {
      "rut": "12345678-9",
      "username": "usuario123",
      "nombre": "Juan",
      "apellido": "Pérez",
      "email": "juan.perez@example.com",
      "password": "securepassword123",
      "id_tipo_usuario": "id valido (Hay un seder de creacion de tipo de usuario en carpeta config)"
    }

Login (POST /auth/#)

  • Entrada:
    {
      "email": "juan.perez@example.com",
      "password": "securepassword123"
    }
  • Respuesta:
    {
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    }

CRUD: TiposUsuario

  • Nota: Todos los endpoints de este CRUD requieren un token JWT en el encabezado Authorization:

    Authorization: Bearer <token>
    
  • Crear (POST /tipos-usuario):

    {
      "nombre": "Administrador"
    }
  • Leer Todos (GET /tipos-usuario): Respuesta:

    [
      {
        "id_tipo_usuario": "12345",
        "nombre": "Administrador"
      }
    ]
  • Leer por ID (GET /tipos-usuario/:id): Respuesta:

    {
      "id_tipo_usuario": "12345",
      "nombre": "Administrador"
    }
  • Actualizar (PUT /tipos-usuario/:id):

    {
      "nombre": "Usuario Regular"
    }
  • Eliminar (DELETE /tipos-usuario/:id): Respuesta:

    {
      "message": "Tipo de usuario eliminado."
    }

CRUD: Medicamentos

  • Nota: Todos los endpoints de este CRUD requieren un token JWT en el encabezado Authorization:

    Authorization: Bearer <token>
    
  • Crear (POST /medicamentos):

    {
      "nombre": "Paracetamol",
      "descripcion": "Medicamento para el dolor y fiebre.",
      "presentacion": "Tabletas",
      "concentracion": "500mg"
    }
  • Leer Todos (GET /medicamentos): Respuesta:

    [
      {
        "id_medicamento": "12345",
        "nombre": "Paracetamol",
        "descripcion": "Medicamento para el dolor y fiebre.",
        "presentacion": "Tabletas",
        "concentracion": "500mg"
      }
    ]
  • Leer por ID (GET /medicamentos/:id): Respuesta:

    {
      "id_medicamento": "12345",
      "nombre": "Paracetamol",
      "descripcion": "Medicamento para el dolor y fiebre.",
      "presentacion": "Tabletas",
      "concentracion": "500mg"
    }
  • Actualizar (PUT /medicamentos/:id):

    {
      "descripcion": "Medicamento usado para fiebre."
    }
  • Eliminar (DELETE /medicamentos/:id): Respuesta:

    {
      "message": "Medicamento eliminado."
    }

CRUD: Lotes

  • Nota: Todos los endpoints de este CRUD requieren un token JWT en el encabezado Authorization:

    Authorization: Bearer <token>
    
  • Crear (POST /lotes):

    {
      "id_medicamento": "12345",
      "codigo_lote": "L001",
      "fecha_vencimiento": "2025-12-31",
      "cantidad_cajas": 50,
      "unidades_por_caja": 20,
      "stock_actual": 1000
    }
  • Leer Todos (GET /lotes): Respuesta:

    [
      {
        "id_lote": "67890",
        "id_medicamento": "12345",
        "codigo_lote": "L001",
        "fecha_vencimiento": "2025-12-31",
        "cantidad_cajas": 50,
        "unidades_por_caja": 20,
        "stock_actual": 1000
      }
    ]
  • Leer por ID (GET /lotes/:id): Respuesta:

    {
      "id_lote": "67890",
      "id_medicamento": "12345",
      "codigo_lote": "L001",
      "fecha_vencimiento": "2025-12-31",
      "cantidad_cajas": 50,
      "unidades_por_caja": 20,
      "stock_actual": 1000
    }
  • Actualizar (PUT /lotes/:id):

    {
      "stock_actual": 900
    }
  • Eliminar (DELETE /lotes/:id): Respuesta:

    {
      "message": "Lote eliminado."
    }

CRUD: MovimientosInventario

  • Nota: Todos los endpoints de este CRUD requieren un token JWT en el encabezado Authorization:

    Authorization: Bearer <token>
    
  • Crear (POST /movimientos-inventario):

    {
      "id_lote": "67890",
      "fecha_movimiento": "2025-01-25",
      "tipo_movimiento": "INGRESO",
      "cantidad": 200,
      "id_usuario": "54321",
      "rut_usuario": "12345678-9",
      "username_usuario": "usuario123"
    }
  • Leer Todos (GET /movimientos-inventario): Respuesta:

    [
      {
        "id_movimiento": "11111",
        "id_lote": "67890",
        "fecha_movimiento": "2025-01-25",
        "tipo_movimiento": "INGRESO",
        "cantidad": 200,
        "id_usuario": "54321",
        "rut_usuario": "12345678-9",
        "username_usuario": "usuario123"
      }
    ]
  • Leer por ID (GET /movimientos-inventario/:id): Respuesta:

    {
      "id_movimiento": "11111",
      "id_lote": "67890",
      "fecha_movimiento": "2025-01-25",
      "tipo_movimiento": "INGRESO",
      "cantidad": 200,
      "id_usuario": "54321",
      "rut_usuario": "12345678-9",
      "username_usuario": "usuario123"
    }
  • Actualizar (PUT /movimientos-inventario/:id):

    {
      "cantidad": 250
    }
  • Eliminar (DELETE /movimientos-inventario/:id): Respuesta:

    {
      "message": "Movimiento de inventario eliminado."
    }

Recursos

  1. Dependencias Principales:

    • jsonwebtoken: Manejo de tokens JWT.
    • bcrypt: Encriptación de contraseñas.
    • sequelize: ORM para base de datos.
    • joi: Validación de datos de entrada.
  2. Documentación:


Autor

Este proyecto forma parte del Hito 5 del curso de Desarrollo Backend.


About

Hito 5 Desafio Latam Type

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published