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 cliente tiene los siguientes atributos:
Un mercader tiene los siguientes atributos:
Una transacción deberá contemplar los siguientes atributos:
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
/goodsCrea 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./goods?name=xxx&description=xxx&material=xxxObtiene 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./goods/:idObtiene 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./goods?name=xxxActualiza 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./goods/:idActualiza 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./goods?name=xxx&description=xxx&material=xxxElimina bienes por filtros opcionales.
namedescriptionmaterial200 OK: Retorna lista de bienes eliminados.404 Not Found: No hay bienes que cumplan.500: Retorna error./goods/:idElimina 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./huntersCrea un nuevo cazador.
{
"name": "Yennefer of Vengerberg",
"race": "Sorcerer",
"location": "Novigrad",
}
201 Created: Retorna cazador creado.501 Not Implemented: Retorna error./hunters?name=xxx&race=xxx&location=xxxObtiene 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./hunters/:idObtiene 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./hunters?name=xxxActualiza 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./hunters/:idActualiza 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./hunters?name=xxx&race=xxx&location=xxxElimina cazadores por filtros opcionales.
nameracelocation200 OK: Retorna lista de cazadores eliminados.404 Not Found: No hay cazadores que cumplan.500: Retorna error./hunters/:idElimina 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./merchantsCrea un nuevo mercader.
{
"name": "Hattori",
"type": "Blacksmith",
"location": "Novigrad"
}
201 Created: Retorna mercader creado.501 Not Implemented: Retorna error./merchants?name=xxx&type=xxx&location=xxxObtiene 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./merchants/:idObtiene 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./merchants?name=xxxActualiza 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./merchants/:idActualiza 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./merchants?name=xxx&type=xxx&location=xxxElimina mercaderes por filtros opcionales.
nametypelocation200 OK: Retorna lista de mercaderes eliminados.404 Not Found: No hay mercaderes que cumplan.500: Retorna error./merchants/:idElimina 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./transactionsDe 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"
}
/transactions?type=xxxObtiene 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.
/transactions/by-name?name=xxxObtiene 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.
/transactions/by-date?startDate=xxx&endDate=xxx&type=xxxObtiene 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.
/transactions/:idObtiene 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.
/transactions/:idActualiza 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.
/transactions/:idElimina 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.