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": "[email protected]",
...
}
- 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": "[email protected]",
...
},
...
]
- 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.