Skip to content

Repositório Desafío Foro Alura del Challenge Back End - ONE

Notifications You must be signed in to change notification settings

CMZhn/Foro_Alura_ONE_G5

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Challenge Back End Java - Foro Alura

Cuarto reto de Alura + Oracle Next Education grupo 5.

Este reto cosiste en aplicar los conocimientos adquiridos en el programa ONE sobre Spring Boot 3 - JAVA API Rest y Spring Security - JWT . Este proyecto se enfoco a nivel de back end para replicar los procesos de la administracion de topicos de un foro, utilizando la arquitectura de software conocido como REST. Mediante del uso de HTTP Request la API respondera a las diferentes acciones de CRUD (CREATE, READ, UPDATE, DELETE), finalmente la API aplica conceptos de Spring Security mediante el uso de token JWT (JOSON WEB TOKEN).

Acerca del reto

El reto cosiste en crear una API Rest con Spring Boot 3, que repique a nivel de back end parte de los procesos de un Foro. Este reto se divide en dos partes, la primera es sobre la aplicación del CRUD en la creación de Tópicos, y la segunda sobre autenticación y seguridad.

La primera parte - Spring 1

Esta parte consiste en que la API debe de permitir a los usuarios realizar las siguientes acciones:
  1. Crear un nuevo tópico
  2. Mostrar todos los tópicos creados
  3. Mostrar un tópico específico
  4. Actualizar un tópico
  5. Eliminar un tópico
También la API deberá cumplir con las siguientes reglas de negocio para cada una de estas acciones:
  • Registro de un nuevo tópico mediante un POST al URI /topicos de un JSON con el titulo, mensaje, autor y curso en el body.
    1. Todos los campos del JSON son obligatorios.
    2. La API no debe permitirlos registros duplicados (que contengan el mismo el mismo título y mensaje).
  • Listar todos los topicos mediante un GET al URI /topicos, cuyo retornó será una lista de JSON con titulo, mensaje, fecha de creación, estado, autor y curso en el body.
  • Actualizacón de un tópico mediante un PUT al URI /topicos de un JSON con el id, titulo, mensaje, autor y curso en el body.
    1. El campo de id y autor son obligatorios.
    2. El autor no se debe acturalizar.
    3. Solo el autor del topico puede actualizar el titulo, mensaje y curso.
    4. Los campos que llegen nullos o en blanco no se debe de actualizar.
    5. La API no debe permitirlos registros duplicados (que contengan el mismo el mismo título y mensaje).
  • Detalle de un tópico mediante un GET al URI /topicos/{id}, cuyo retornó será un JSON con titulo, mensaje, fecha de creación, estado, autor y curso en el body.
  • Eliminación de un tópico mediante un DELETE al URI /topicos/{id}, cuya accion elimnará el topico del la base de datos.

  • La egunda parte - Spring 2

    Esta parte consiste en la seguridad de la API con Spring Boot Segurity, también incluye la documentación de la misma con Swagger, para esta parte la API de de cumplir con los siguientes requisitos:
  • Seguridad de la API.
    1. Debe de existir un endpoint publico para la autenticación de los Usuarios, con un JSON con el nombre del usuario y su contraseña.
    2. Después de la autenticación, si esta es exitosa (OK 200), la solicitud debe retornar con un JWT.
    3. Para acceder a las operaciones de los controladores se debe autenticar por medio del un JWT en le Header del la solicitud HTTP.
  • Documentación.
    1. La API debe implementar una interfaz facil amigable y accesible, con la cual el usuario mediante un explorador Web podra tener acceso a las operaciones de la API (SpringFox Swagger).
    2. Agregar una descripción a las operaciones de los controladores.
    3. Configurar los accesos para que la interfaz de Swagger sea accesible.
    4. Configurar Swagger para con esta interfaz el usuario pueda autenticarse.
  • Tecnologías utilizadas

    Para el desarrollo de este proyecto se utilizó las siguientes tecnologías:
    1. Eclipse 2023-06 (4.28.0).
    2. MySQL 8.0.34.
    3. Spring Boot 3.0.6.
    4. Maven 4.0.0.
    5. Lombok 1.18.30 (eclipse plugin).
    6. JDK 17.
    7. JAVA-JWT Auth0 4.2.0.
    8. Spring Doc Open API -Swagger 2.1.0.

    Spring boot dependecies:

    1. Spring Web.
    2. Spring Boot DevTools.
    3. Lombok.
    4. Spring Data JPA.
    5. Flyway Migration.
    6. MySQL Driver.
    7. Validation.
    8. Spring Security
    9. auth0 java-jwt
    10. Springdoc Openapi

    Funcionamiento del proyecto

    Preparando el ambiente

    Para probar el funcionamiento de la API de este repository, primero debe de tener instalado el JDK y un IDE para proyectos Java Maven.

    Despues de descargar y descomprimir en su PC el proyecto de este repositorio, importelo a su IDE, despues actualice el pom.xml, para que se descargen todas las dependencias del proyecto.

    Nota

    La version de Sring framework boot puede cambiar, por lo que si tienen problemas con la actualizacion del pom.xml, visite Spring Boot Initializer y cambie la version por la mas cercana a la utilizada en este proyecto.


    Después de instalar las dependencias y preparar el entorno del IDE, instsle MySQL workbench 8, y cree la base de datos con el siguienete SQL:
    CREATE DATABASE foro_alura;
    

    Luego diríjase a las propiedades de la aplicación en archivo application.properties en \src\main\resources, en este achivo configure las propiedades de conexión a la base de datos URL, Usuario y contraseña.

    spring.datasource.url=jdbc:mysql://localhost:3306/foro_alura
    spring.datasource.username= usuario
    spring.datasource.password= contraseña
    

    Por defecto la API, si no exite la tabla Usuarios, esta se creara con el usuario Admin con contraseña 1234. Si desea modificar este usuario, antes de ejecutar por primera vez la API, debe modificar el SQL V1 en \src\main\resources\db\migration. recuede que la contraseña debe de estar encriptada, para esto puede utilizar este el Bcrypt Generator.

    El usuario configurado lo puede cambiar modificando los valores del siguiente del SQL V1:

    INSERT INTO Usuarios (nombre, email, contrasena) 
    VALUES ('Admin', 'admin@g.com', '$2a$10$aga6Mf8jeIvEW/EWuC969e8NnQhVFP1wm8k.pnRf/x/1uBmkDC3vG');
    

    Nota

    Al ejecutar por primera vez Flyway automaticamente realizara la migracion a la base que usted haya configurado en las propiedades de la aplicacion. Si ya ejecuto el servidor y no modifico el usuario por defecto, debe ir al la base de datos y realizar alli las actualizaciones, o bien deteniendo el servidor, y agregando un SQL al la migracion.

    Finalmente dirijase a la clase principal ForoInicialApplication en el paquete com.alura.foro, ejecutela para iniciar el servidor.

    Realizacion de HTTP Request (Utilizando la API)


    Para utilizar esta API pueden utilizar Postman o Insomnia, que son herramientas para probar HTTP request:
  • Postman
  • Insomnia

  • Tambien puede probar esta API con su explorador WEB, ya que este proyecto incluye la interfaz grafica de Springdoc Openapi.

    Algunas prubas de Funcionalidad con Springdoc Openapi

    1. Autenticación y generación de JWT

    En su explorador acceda al URI de Swagger en la direccion de su servidor, en este caso es http://localhost:8080/swagger-ui/index.html#/, después acceda a la opcion de Autenticacion y realice la solicitud Htpp:

    Despues de ejecutar la solicitud, la API le retornara el JWT si el usuario es valido y esta en la Base de datos:

    Utelice este JWT para obtener el acceso a las demas funcionalidades de la API, accediendo a Authorize e ingresando el toquen en el campo Value:

    1. Registrando primer curso
      Dirijase a la opcion curso-controller en la operacion POST/cursos, y ejecute la siguiente request body:
    {
      "nombre": "Spring Boot 3",
      "categoria": "Programacion"
    }
    

    Si la consulta es exitosa le retornara el JSON con el curso creado:

    {
      "id": 1,
      "nombre": "Spring Boot 3",
      "categoria": "Programacion"
    }
    
    1. Registrando primer topico

    Nota Para poder realizar esta operacion, debe de tener registrado al menos un curso.

    Dirijase a la opcion topicos-controller en la operacion POST/topicos, y ejecute la siguiente request body:

    {
       "titulo":"Pagina blanca Error",
       "mensaje":"Al crear controller Hola",
       "id_autor":"1",
       "id_curso":"1"
    }
    

    Si la consulta es exitosa le retornara el JSON con el topico creado:

    {
      "id": 1,
      "titulo": "Pagina blanca Error",
      "mensaje": "Al crear controller Hola",
      "fechaCreacion": "2023-09-28T19:57:51.0443519",
      "estado": "NO_RESPONDIDO",
      "id_autor": 1,
      "autor": "Admin",
      "id_curso": 1,
      "curso": "Spring Boot 3"
    }
    
    1. Mostrar todos los topicos.
      Dirijase a la opcion topicos-controller en la operacion GET/topicos, y ejecute el HTTP.después del envio se retornará una lista de JSON como la siguiente:
    [
      {
        "id": 1,
        "titulo": "Pagina blanca Error",
        "mensaje": "Al crear controller Hola",
        "fechaCreacion": "2023-09-28T00:00:00",
        "estado": "NO_RESPONDIDO",
        "id_autor": 1,
        "autor": "Admin",
        "id_curso": 1,
        "curso": "Spring Boot 3"
      },
      {
        "id": 2,
        "titulo": "Problema de servidor",
        "mensaje": "Al iniciar el servidor falla la migracion",
        "fechaCreacion": "2023-09-28T00:00:00",
        "estado": "NO_RESPONDIDO",
        "id_autor": 1,
        "autor": "Admin",
        "id_curso": 1,
        "curso": "Spring Boot 3"
      }
    ]
    

    Autor

    Carlos Melgar

    2023

    About

    Repositório Desafío Foro Alura del Challenge Back End - ONE

    Topics

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages

    • Java 100.0%