Este proyecto consiste en una API REST construida con Spring Boot para gestionar informaci贸n de manga. Proporciona puntos finales para registrar y recuperar detalles de manga, manejar autenticaci贸n de usuario y gestionar detalles de alquiler de manga. La API est谩 asegurada mediante JSON Web Tokens (JWT) para garantizar un control de acceso adecuado.
Para ejecutar el proyecto localmente, sigue estos pasos:
git clone https://github.com/DeiviHerreraDiaz09/ApiRestSpringBoot.git
- Punto final: POST /api/mangas/add
- Descripci贸n: Registra un nuevo manga.
- Par谩metros de solicitud:
- file (MultipartFile): Archivo de imagen del manga.
- title (String): T铆tulo del manga.
- description (String): Descripci贸n del manga.
- amount (Integer): Cantidad de manga.
- price (Integer): Precio del manga.
- Encabezado de autorizaci贸n: Token con el rol "administrador" requerido.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
"Manga creado exitosamente"
- Punto final: GET /api/mangas/list
- Descripci贸n: Recupera una lista de todos los mangas.
- Ejemplo de solicitud usando Postman:
Ejemplo de respuesta:
[
{
"id": 1,
"title": "Mi Manga",
"description": "Historia emocionante",
"amount": 10,
"price": 5,
"image": "manga_image.jpg"
},
...
]
- Punto final: GET /api/mangas/image/{imageName}
- Descripci贸n: Recupera la imagen de un manga espec铆fico.
- Variable de ruta:
- imageName (String): Nombre del archivo de imagen del manga.
- Ejemplo de solicitud usando Postman:
Respuesta: Descarga del archivo de imagen.
- Punto final: POST /api/users/add
- Descripci贸n: Registra un nuevo usuario.
- Cuerpo de la solicitud: Objeto de usuario con correo electr贸nico, contrase帽a, etc.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
{
"idUsuario": 1,
"email": "user@example.com",
...
}
- Punto final: GET /api/users/list
- Descripci贸n: Recupera una lista de todos los usuarios.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
[
{
"idUsuario": 1,
"email": "user@example.com",
...
},
...
]
- Punto final: POST /api/users/login
- Descripci贸n: Autentica a un usuario y genera un token JWT.
- Cuerpo de la solicitud: Objeto de usuario con correo electr贸nico y contrase帽a.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
[
1,
"eyJhbGciOiJIUzI1NiJ9...",
"user"
]
- Punto final: GET /api/users/verificar
- Descripci贸n: Verifica la validez de un token JWT.
- Encabezado de autorizaci贸n: Token JWT.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
{
"status": "El token es v谩lido"
}
- Punto final: POST /api/details/add
- Descripci贸n: A帽ade detalles para el alquiler de manga.
- Cuerpo de la solicitud: Objeto de detalles de manga.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
{
"id": 1,
"fechaAlquiler": "2023-01-01",
...
}
- Punto final: GET /api/details/list
- Descripci贸n: Recupera una lista de todos los detalles de manga.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
[
{
"id": 1,
"fechaAlquiler": "2023-01-01",
"idUserFK": 1,
"idMangaFK": 1,
"idUserFKName": "John Doe",
"idMangaFKName": "Mi Manga"
},
...
]
- Punto final: PUT /api/details/{id}
- Descripci贸n: Actualiza detalles para un alquiler espec铆fico de manga.
- Variable de ruta:
- id (Integer): ID de detalles de manga.
- Cuerpo de la solicitud: Objeto actualizado de detalles de manga.
- Ejemplo de solicitud usando Postman: Ejemplo de respuesta:
{
"id": 1,
"fechaAlquiler": "2023-01-01",
"fecha_devolucion": "2023-01-10",
...
}
Hemos implementado triggers para gestionar el inventario de mangas de manera incremental y decremental. Estos triggers se encargan de actualizar autom谩ticamente la cantidad de mangas disponibles al agregar nuevos detalles de alquiler o actualizar los detalles existentes.
DELIMITER $$
CREATE TRIGGER after_insert_detail_manga
AFTER INSERT ON detail_manga
FOR EACH ROW
BEGIN
UPDATE manga
SET amount = amount - 1
WHERE id_manga = NEW.id_mangafk;
END;
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER after_update_detail_manga
AFTER UPDATE ON detail_manga
FOR EACH ROW
BEGIN
IF NEW.fecha_devolucion IS NOT NULL THEN
UPDATE manga
SET amount = amount + 1
WHERE id_manga = NEW.id_mangafk;
END IF;
END;
$$
DELIMITER ;
Estos triggers aseguran que la cantidad de mangas disponibles se actualice autom谩ticamente seg煤n las transacciones de alquiler.