Este proyecto es una aplicación que interactúa con la API de Marvel para obtener información sobre personajes y cómics. A continuación, se proporciona una descripción general de las principales componentes y funcionalidades del proyecto.
El proyecto de prueba técnica para desarrollador backend consiste en el desarrollo de una API con tecnología Java utilizando el framework Spring Boot. Esta API tiene como objetivo consumir la API de Marvel, cuya documentación se encuentra en este enlace. A continuación, se detallan las principales características de este proyecto:
-
Consumo de la API de Marvel: La aplicación desarrollada se encarga de consumir la API de Marvel, obteniendo información relevante sobre personajes, cómics, series y más.
-
Almacenamiento en Base de Datos: Se implementa un esquema de base de datos, preferiblemente MySQL, para almacenar toda la información necesaria. Esto incluye datos relacionados con personajes, cómics y series.
-
API de Suministro de Información: Se crea una API que ofrece diversas funcionalidades para obtener información de Marvel, incluyendo:
- Búsqueda de personajes de Marvel por nombre, historietas y series.
- Obtención del listado de cómics asociados a un personaje específico.
- Acceso a la imagen y descripción de un personaje en particular.
- Listado completo de cómics disponibles.
- Filtrado de cómics por identificador.
- Visualización de búsquedas relacionadas a historietas realizadas por cualquier usuario.
- Registro de búsquedas específicas de un usuario particular.
-
Autenticación con Spring Security: La API implementa un medio y esquema de autenticación utilizando Spring Security. Esto permite identificar qué usuario está realizando búsquedas de información de Marvel.
-
Scripts de Base de Datos: El archivo README de la aplicación incluye scripts de base de datos, que contienen datos iniciales necesarios para ejecutar las APIs en su primer uso.
Antes de ejecutar la aplicación, es necesario configurar las siguientes propiedades en el archivo application.properties:
integration.marvel.public-key=<Tu clave pública de Marvel>
integration.marvel.private-key=<Tu clave privada de Marvel>Asegúrate de obtener estas claves de la API de Marvel (click para obtener) y reemplazar <Tu clave pública de Marvel> y <Tu clave privada de Marvel> con tus propias claves.
Además se debe de configurar en el archivo application-dev.properties las propiedades correspondientes para MySQL:
spring.datasource.url=jdbc:mysql://<Tu host>:<Tu puerto>/<Tu base de datos>
spring.datasource.username=<Tu username>
spring.datasource.password=<Tu password>
spring.datasource.driverClassName=com.mysql.cj.jdbc.DriverEl proyecto está organizado en los siguientes paquetes:
com.marvel.test.dto.response: Contiene clases DTO para respuestas.com.marvel.test.exception: Incluye clases relacionadas con excepciones personalizadas.com.marvel.test.mapper: Contiene mapeadores para convertir entre entidades y DTO.com.marvel.test.util: Ofrece utilidades genéricas.com.marvel.test.persistence.entity: Define entidades de la base de datos.com.marvel.test.persistence.integration.marvel: Gestiona la integración con la API de Marvel.com.marvel.test.persistence.integration.marvel.dto: Define DTO específicos para la integración con Marvel.com.marvel.test.persistence.integration.marvel.mapper: Mapea objetos desde la API de Marvel a objetos locales.com.marvel.test.persistence.integration.marvel.util: Contiene utilidades para la integración con Marvel.com.marvel.test.persistence.repository: Define repositorios para acceder a la base de datos.com.marvel.test.security: Contiene configuraciones de seguridad y autenticación.com.marvel.test.security.validator: Contiene validadores de seguridad.com.marvel.test.service: Define interfaces de servicio.com.marvel.test.service.impl: Implementaciones de servicios.com.marvel.test.web.controller: Controladores web para manejar las solicitudes de la API.com.marvel.test.web.filter: Filtros para interceptar solicitudes web.com.marvel.test.web.interceptor: Interceptores de solicitudes web.
A continuación, se describen algunas de las clases principales del proyecto:
- Clase de configuración que se encarga de proporcionar la clave pública y privada de Marvel y gestionar la autenticación en las solicitudes a la API de Marvel.
- Repositorio que interactúa con la API de Marvel para obtener información sobre cómics. Proporciona métodos para buscar cómics relacionados con personajes y buscar cómics por ID.
- Repositorio que se conecta a la API de Marvel para obtener información sobre personajes. Contiene métodos para buscar personajes por criterios y obtener información detallada de un personaje por ID.
- Servicio para la generación y validación de tokens JWT. Utilizado para la autenticación en la aplicación.
- Interfaces de servicio que definen operaciones relacionadas con cómics y personajes. Sus implementaciones se encuentran en
ComicServiceImplyCharacterServiceImpl, respectivamente.
- Los controladores, como
ComicController,CharacterController, yAuthenticationController, gestionan las solicitudes HTTP y responden con datos a los clientes.
- Los filtros e interceptores, como
JwtAuthenticationFilteryUserInteractionInterceptor, agregan funcionalidad de seguridad y registro a la aplicación.
- La entidad
UserInteractionLogy su repositorio gestionan los registros de las interacciones de los usuarios con la aplicación.
El proyecto incluye un sistema de manejo de excepciones que garantiza una respuesta adecuada a diferentes tipos de errores, como errores de autenticación y errores en las solicitudes a la API de Marvel. El manejo de excepciones se realiza a través de la clase GlobalExceptionHandler.
El proyecto incluye la configuración necesaria para que las tablas se creen automaticamente al ejecutar el proyecto. Por defecto esta configuración se encuentra comentada pero basta con descomentar las siguientes propiedades para que se creen las tablas:
spring.jpa.hibernate.ddl-auto=updateTambién se puede ejecutar los scripts individualmente:
Los scripts incluyen la creación de dos roles y dos usuarios. Estos roles son "CUSTOMER" y "AUDITOR" y los dos usuarios son "lmarquez" y "gcanas" con las contraseñas "contrasena123" y "contrasena456" respectivamente. Los permisos del role "CUSTOMER" son:
- character:read-all
- character:read-detail
- comic:read-all
- comic:read-by-id
- user-interaction:read-my-interactions
Los permisos del role "AUDITOR" son:
- character:read-all
- character:read-detail
- comic:read-all
- comic:read-by-id
- user-interaction:read-my-interactions
- user-interaction:read-all
- user-interaction:read-by-username
Si se desea, se puede utilizar la siguiente colección para ser importada en postman y así tomar los test del autor como punto de partida. Click aquí para ver colección de postman
Este documento proporciona una visión general de la estructura del proyecto, sus componentes clave y cómo configurar las claves de la API de Marvel. Asegúrate de configurar correctamente las claves antes de ejecutar la aplicación para que funcione correctamente.