p11
    Preparing search index...

    p11

    Tests Coverage Status

    ⚔️ API REST La Posada del Lobo Blanco ⚔️

    Este sistema se encarga de gestionar el inventario de la Posada del Lobo Blanco, del mundo de The Witcher. Su objetivo es facilitar la administración de recursos, permitiendo el registro, consulta y control de bienes, mercaderes, clientes y transacciones.
    Se utilizará la extensión de Visual Studio POSTMAN para realizar las HTTP Requests
    Se hace uso de MongoDB para ofrecer una base de datos en la que almacenar los diferentes objetos.

    Un bien consta de los siguientes atributos:

    • Un ID único que permita identificarlo.
    • Su nombre.
    • Una descripción que refleje la historia y utilidad del bien.
    • El material de que está hecho:
      • Steel
      • Wood
      • Stone
      • Iron
      • Leather
      • Cloth
      • Glass
      • Bronze
      • Silver
      • Gold
      • Unknown
    • Su peso.
    • Su valor en coronas.

    Un cliente tiene los siguientes atributos:

    • Su nombre.
    • Su raza:
      • Human
      • Elf
      • Dwarf
      • Orc
      • Sorcerer
      • Mage
      • Warrior
      • Hunter
      • Barbarian
      • Cleric
      • Assassin
      • Unknown
    • La ubicación en la que se encuentra.

    Un mercader tiene los siguientes atributos:

    • Su nombre.
    • Su tipo:
      • General
      • Alchemist
      • Blacksmith
      • Gunsmith
      • Craftman
      • Tailor
      • Jeweler
      • Mage
      • Unknown
    • La ubicación en la que se encuentra.

    Una transacción deberá contemplar los siguientes atributos:

    • El tipo de transacción. Podemos diferenciar 2 tipos:
      • Venta realizada de un mercader.
      • Compra realizada de un cliente.
    • La fecha en la que se realiza la transacción.
    • La lista de bienes intercambiados.
    • La cantidad de coronas involucradas en la transacción.
    • El involucrado, siendo este el mercader en caso de compra o el cliente en caso de venta.

    Antes de proceder con la instalación, asegúrate de contar con los siguientes requisitos:

    Requisito Versión Recomendada
    🟢 Node.js >= 22.0.0
    🔴 npm >= 9.0.0
    🔵 TypeScript >= 5.0.0

    Para obtener el código fuente debes clonar este repositorio, para ello ejecuta el siguiente comando:

    git clone https://github.com/ULL-ESIT-INF-DSI-2425/prct11-witcher-api-groupg.git
    cd prct11-witcher-api-groupg

    Este programa necesita una serie de dependencias para funcionar, entre ellas se encuentran: TSDoc, Inquirer.js, Vitest, LowDB, entre otras. Ejecuta el siguiente comando para instalar todas las dependencias necesarias:

    npm install
    

    Utilizaremos un cluster en Mongo Atlas para al almacenar los bienes, los mercaderes, los clientes y las transacciones.

    Para compilar y ejecutar el sistema ejecuta el siguiente comando:

    tsc
    npm run dev

    POST /goods

    Crea un nuevo bien.

    {
    "name": "Sword",
    "description": "Long sword",
    "material": "Silver",
    "weight": 5,
    "stock": 2,
    "value": 500
    }
    • 201 Created: Retorna bien creado.
    • 501 Not Implemented: Retorna error.

    Obtiene bienes filtrados por parámetros opcionales.

    • name: nombre del bien.
    • description: descripción del bien.
    • material: material del bien.
    • 200 OK: Retorna lista de bienes que cumplen con los filtros.
    • 404 Not Found: No hay bienes que cumplan.
    • 500: Retorna error.

    Obtiene un bien por su ID.

    • id: ID del bien a buscar.
    • 200 OK: Retorna el bien solicitado.
    • 404 Not Found: Bien no encontrado.
    • 500: Retorna error.

    Actualiza un bien por su nombre.

    • name: nombre del bien.
    {
    "name": "Sword",
    "stock": 2,
    "value": 500
    }
    • 200 OK: Retorna el bien actualizado.
    • 400 Bad Request: Actualización no válida o falta el nombre.
    • 404 Not Found: No hay bien con el nombre especificado.
    • 500: Retorna error.

    Actualiza un bien por su ID.

    • id: ID del bien.
    {
    "name": "Sword",
    "stock": 2,
    "value": 500
    }
    • 200 OK: Retorna el bien actualizado.
    • 400 Bad Request: Actualización no válida.
    • 404 Not Found: Bien no encontrado.
    • 500: Retorna error.

    Elimina bienes por filtros opcionales.

    • name
    • description
    • material
    • 200 OK: Retorna lista de bienes eliminados.
    • 404 Not Found: No hay bienes que cumplan.
    • 500: Retorna error.

    Elimina un bien por su ID.

    • id: ID del bien a eliminar.
    • 200 OK: Retorna lista de bienes eliminados.
    • 404 Not Found: Bien no encontrado.
    • 500: Retorna error.

    POST /hunters

    Crea un nuevo cazador.

    {
    "name": "Yennefer of Vengerberg",
    "race": "Sorcerer",
    "location": "Novigrad",
    }
    • 201 Created: Retorna cazador creado.
    • 501 Not Implemented: Retorna error.

    Obtiene cazadores filtrados por parámetros opcionales.

    • name: nombre del cazador.
    • race: raza del cazador.
    • location: ubicación del cazador.
    • 200 OK: Retorna lista de cazadores que cumplen con los filtros.
    • 404 Not Found: No hay cazadores que cumplan.
    • 500: Retorna error.

    Obtiene un cazador por su ID.

    • id: ID del cazador a buscar.
    • 200 OK: Retorna el cazador solicitado.
    • 404 Not Found: Cazador no encontrado.
    • 500: Retorna error.

    Actualiza un cazador por su nombre.

    • name: nombre del cazador.
    {
    "name": "Yennefer of Vengerberg",
    "race": "Sorcerer",
    "location": "Novigrad",
    }
    • 200 OK: Retorna el cazador actualizado.
    • 400 Bad Request: Actualización no válida o falta el nombre.
    • 404 Not Found: No hay cazador con el nombre especificado.
    • 500: Retorna error.

    Actualiza un cazador por su ID.

    • id: ID del cazador.
    {
    "name": "Yennefer of Vengerberg",
    "race": "Sorcerer",
    "location": "Novigrad",
    }
    • 200 OK: Retorna el cazador actualizado.
    • 400 Bad Request: Actualización no válida.
    • 404 Not Found: Cazador no encontrado.
    • 500: Retorna error.

    Elimina cazadores por filtros opcionales.

    • name
    • race
    • location
    • 200 OK: Retorna lista de cazadores eliminados.
    • 404 Not Found: No hay cazadores que cumplan.
    • 500: Retorna error.

    Elimina un cazador por su ID.

    • id: ID del cazador a eliminar.
    • 200 OK: Retorna lista de cazadores eliminados.
    • 404 Not Found: Cazador no encontrado.
    • 500: Retorna error.

    POST /merchants

    Crea un nuevo mercader.

    {
    "name": "Hattori",
    "type": "Blacksmith",
    "location": "Novigrad"
    }
    • 201 Created: Retorna mercader creado.
    • 501 Not Implemented: Retorna error.

    Obtiene mercaderes filtrados por parámetros opcionales.

    • name: nombre del mercader.
    • type: tipo del mercader.
    • location: ubicación del mercader.
    • 200 OK: Retorna lista de mercaderes que cumplen con los filtros.
    • 404 Not Found: No hay mercaderes que cumplan.
    • 500: Retorna error.

    Obtiene un mercader por su ID.

    • id: ID del mercader a buscar.
    • 200 OK: Retorna el mercader solicitado.
    • 404 Not Found: Mercader no encontrado.
    • 500: Retorna error.

    Actualiza un mercader por su nombre.

    • name: nombre del mercader.
    {
    "name": "Hattori",
    "type": "Blacksmith",
    "location": "Novigrad"
    }
    • 200 OK: Retorna el mercader actualizado.
    • 400 Bad Request: Actualización no válida o falta el nombre.
    • 404 Not Found: No hay mercader con el nombre especificado.
    • 500: Retorna error.

    Actualiza un mercader por su ID.

    • id: ID del mercader.
    {
    "name": "Hattori",
    "type": "Blacksmith",
    "location": "Novigrad"
    }
    • 200 OK: Retorna el mercader actualizado.
    • 400 Bad Request: Actualización no válida.
    • 404 Not Found: Mercader no encontrado.
    • 500: Retorna error.

    Elimina mercaderes por filtros opcionales.

    • name
    • type
    • location
    • 200 OK: Retorna lista de mercaderes eliminados.
    • 404 Not Found: No hay mercaderes que cumplan.
    • 500: Retorna error.

    Elimina un mercader por su ID.

    • id: ID del mercader a eliminar.
    • 200 OK: Retorna lista de mercaderes eliminados.
    • 404 Not Found: Mercader no encontrado.
    • 500: Retorna error.

    POST /transactions

    De los bienes especificados se meterán en la transaccion los que existan o los que tengan stock, el resto se ignorarán, si no hay stock de ninguno o ninguno existe se mostrará un error.

    {
    "goods": [
    {
    "name": "Sword",
    "amount": 20
    },
    {
    "name": "Shield",
    "amount": 1
    }
    ],
    "involvedName": "XX",
    "involvedType": "Hunter",
    "type": "Buy"
    }

    Obtiene todas las transacciones con filtros opcionales.

    ####🔸 Parámetros (opcionales):

    • type: Tipo de transacción (Buy/Sell).

    🔸 Responses:

    • 200 OK: Retorna lista de transacciones.

    • 500: Retorna error.


    Obtiene transacciones filtradas por nombre del involucrado (Hunter/Merchants).

    🔸 Parámetros (opcionales):

    • name: Nombre del Hunter/Merchant.

    🔸 Responses:

    • 200 OK: Retorna lista de transacciones.

    • 404 Not Found: No se encontró el involucrado.

    • 500: Retorna error.


    Obtiene transacciones filtradas por rango de fechas y tipo.

    🔸 Parámetros (requeridos):

    • startDate: Fecha de inicio (YYYY-MM-DD).

    • endDate: Fecha de fin (YYYY-MM-DD).

    • type: Tipo de transacción (Buy/Sell/Both).

    🔸 Responses:

    • 200 OK: Retorna lista de transacciones.

    • 400 Bad Request: Faltan parámetros o son inválidos.

    • 404 Not Found: No hay transacciones en el rango.

    • 500: Retorna error.


    Obtiene una transacción por su ID.

    🔸 Parámetros:

    • id: ID de la transacción.

    🔸 Responses:

    • 200 OK: Retorna la transacción solicitada.

    • 404 Not Found: Transacción no encontrada.

    • 500: Retorna error.


    Actualiza una transacción por su ID (modifica cantidades de bienes). Solo modifica la cantidad de bienes involucrados en la transacción si es posible.

    🔸 Parámetros:

    • id: ID de la transacción.

    🔸 Body:

    {
    "goods": [
    {
    "name": "Sword",
    "amount": 20
    },
    {
    "name": "Shield",
    "amount": 1
    }
    ],
    }

    🔸 Responses:

    • 200 OK: Retorna la transacción actualizada.

    • 400 Bad Request: No hay stock suficiente o bienes no válidos.

    • 404 Not Found: Transacción no encontrada.

    • 500: Retorna error.


    Elimina una transacción por su ID (revierte cambios en stock).

    🔸 Parámetros:

    • id: ID de la transacción.

    🔸 Responses:

    • 200 OK: Retorna la transacción eliminada.

    • 400 Bad Request: No se puede revertir el stock.

    • 404 Not Found: Transacción no encontrada.

    • 500: Retorna error.