Skip to content

Luiggi-piero/konecta-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KONECTA

License: MIT
API Rest desarrollada en Java con Spring Boot para la gestión de usuarios(login y registro), roles, desafíos, evaluaciones, categorias y proyectos.

Índice

  1. Funcionalidades
  2. Requerimientos previos
  3. Configuración
  4. Swagger
  5. Tecnologías utilizadas
  6. Estructura del proyecto
  7. Modelo entidad-relación
  8. Licencia

Funcionalidades

🔐 Autenticación
Método Endpoint Reglas de negocio
POST /login Inicia sesión y obtiene un Token JWT.
👤 Usuarios
Método Endpoint Reglas de negocio
POST /users/register - Verificar si todos los campos obligatorios se están ingresando correctamente.
- La API no debe permitir el registro de usuarios duplicados (con el mismo correo) y debe tener al menos un número y una letra mayúscula.
- Asignar el rol USER por defecto.
- La API debe retornar la información del nuevo usuario y el token.
- Si elige el rol MENTOR, la propiedad mentor es necesaria y de forma similar para el rol MENTEE con la propiedad mentee.
- Si el correo ya existe retornar un código HTTP 409.
- Si la contraseña tiene menos de 8 o más de 15 caracteres retornar un 400.
- Si la contraseña no tiene al menos un letra mayúscula y un número retornar un 400.
GET /users - Retornar los primeros 10 resultados ordenados por id.
- Devolver todos los atributos menos la contraseña.
- Obtener la respuesta con paginación para controlar el volumen de los datos.
- Solo el rol ADMIN puede obtener todos los usuarios.
GET /users/{id} - Retornar el usuario que coincida con el id y que además se encuentre habilitado.
- Si no encuentra el usuario retornar un 404.
- Solo el rol ADMIN puede buscar usuarios.
UPDATE /users/{id} - Si no se completan los campos obligatorios retorna un 400.
- Si no encuentra el usuario retornar un 404.
- Solo el rol ADMIN puede actualizar usuarios.
- Si elige el rol MENTOR, la propiedad mentor es necesaria y de forma similar para el rol MENTEE con la propiedad mentee.
- Si el correo ya existe retornar un código HTTP 409.
- Si la contraseña tiene menos de 8 o más de 15 caracteres retornar un 400.
- Si la contraseña no tiene al menos un letra mayúscula y un número retornar un 400.
DELETE /users/{id} - Si la eliminación es exitosa retornar un 204.
- Si no encuentra el usuario retornar un 404.
- Solo el rol ADMIN puede eliminar usuarios.
🗂️ Categorías de Proyectos
Método Endpoint Reglas de negocio
POST /categories - Retornar la información de la categoría creada.
- En el header retorna el path para obtener la categoría.
- Si el nombre no se completa mostrar un error 400.
- Si la creación fue exitosa retornar un 201.
GET /categories - Lectura paginada de los registros.
- Por defecto el tamaño de la página es de 10.
- Por defecto el ordenamiento es por id.
GET /categories/{id} - Si la categoría no existe retornar un 404.
UPDATE /categories/{id} - Si la categoría no existe retornar un 404.
- Si el nombre no se completa mostrar un error 400.
DELETE /categories/{id} - Si la categoría no existe retornar un un código HTTP 404.
- Si la eliminación fue exitosa retornar un código HTTP 204 No Content.
- Realizar una eliminación lógica.
🎯 Desafíos
Método Endpoint Reglas de negocio
POST /challenges - Si algún campo obligatorio no se completa retornar un código HTTP 400.
- Si el id del creador no existe retornar un código HTTP 404.
- Retornar la información del desafío creado.
- En el header retorna el path para obtener el desafío.
- Solo el rol MENTOR puede crear un desafío.
- Si la creación fue exitosa retornar un 201.
GET /challenges - Retorno paginado.
- Por defecto el tamaño de la página es de 10.
- Por defecto el ordenamiento es por el id.
GET /challenges/{id} - Si el desafío no existe retornar un código HTTP 404.
UPDATE /challenges/{id} - Si el desafío no existe retornar un código HTTP 404.
- Si algún campo obligatorio no se completa retornar un 400.
- Si el usuario relacionado al id del creador no existe retornar un 404.
DELETE /challenges/{id} - Si el desafío no existe retornar un código HTTP 404.
- Si la eliminación es exitosa retornar un 204.
- Realizar una eliminación lógica.
📝 Evaluaciones
Método Endpoint Reglas de negocio
POST /evaluations - Si algún campo obligatorio no se completa retornar un código HTTP 400.
- El puntaje debe estar en el rango de 1 a 5.
- Si el usuario relacionado al id del evaluador no existe retornar un 404.
- Si el usuario relacionado al id del evaluado no existe retornar un 404.
- Si el desafío relacionado al id del mismo no existe retornar un 404.
- Si la creación fue exitosa retornar la información de la evaluación.
- Si la creación fue exitosa en la cabecera indicar la URI al nuevo recurso.
- Si la creación fue exitosa retornar un 201.
GET /evaluations - Retorno paginado.
- Por defecto el tamaño de la página es de 10.
- Por defecto el ordenamiento es por el id.
GET /evaluations/{id} - Si la evaluación no existe retornar un 404.
UPDATE /evaluations/{id} - Si algún campo obligatorio no se completa retornar un código HTTP 400.
- El puntaje debe estar en el rango de 1 a 5.
- Si la evaluación no existe retornar un 404.
- Si el usuario relacionado al id del evaluador no existe retornar un 404.
- Si el usuario relacionado al id del evaluado no existe retornar un 404.
- Si el desafío relacionado al id del mismo no existe retornar un 404.
- Si la edición fue exitosa retornar la información de la evaluación.
DELETE /evaluations/{id} - Si la evaluación no existe retornar un código HTTP 404.
- Si la eliminación es exitosa retornar un 204.
- Realizar una eliminación lógica.
💼 Proyectos
Método Endpoint Reglas de negocio
POST /projects - Si algún campo obligatorio no se completa mostrar un error 400.
- Si el usuario relacionado al id del creador no existe retornar un 404.
- Si algún correo del lista de miembros no existe como aprendiz retornar un 404.
- Si algún id del lista de categorías no existe retornar un 404.
- Si la creación fue exitosa retornar un 201.
- Si la creación fue exitosa en la cabecera indicar la URI al nuevo recurso.
GET /projects - Retorno paginado.
- Por defecto el tamaño de la página es de 10.
- Por defecto el ordenamiento es por el id.
GET /projects/{id} - Si el proyecto no existe retornar un 404.
UPDATE /projects/{id} - Si el proyecto no existe retornar un 404.
- Si algún campo obligatorio no se completa mostrar un error 400.
- Si el usuario relacionado al id del creador no existe retornar un 404.
- Si algún correo del lista de miembros no existe retornar un 404.
- Si algún id del lista de categorías no existe retornar un 404.
DELETE /projects/{id} - Si el proyecto no existe retornar un código HTTP 404.
- Si la eliminación es exitosa retornar un 204.
- Realizar una eliminación lógica.

Requerimientos previos

  • JDK: Java 21 o superior
  • Gestor de dependencias: Maven 4.0.0
  • Spring Boot 3.3.5
  • Base de datos MySQL o PostgreSQL (cambiar la configuración de application.properties)

Configuración

  1. Clona el repositorio

    git clone https://github.com/Luiggi-piero/konecta-backend.git
    cd konecta-backend
  2. Configura las variables de entorno para la conexión a la base de datos desde application-prod.yml

    spring:
     datasource:
       url: ${DB_URL:jdbc:postgresql://localhost:5432/konecta}
       username: ${DB_USER}
       password: ${DB_PASS}
       driver-class-name: org.postgresql.Driver
     jpa:
    
       hibernate:
         ddl-auto: update
       show-sql: true
    
     server:
       port: 8080
    
     konecta:
       cors:
         allowed-origins: "*"
         allowed-methods: "GET,POST,PUT,DELETE,OPTIONS"
         allowed-headers: "*"
    
     security:
       secret: ${JWT_SECRET}  # Get from env vars
       expiration-ms: ${JWT_EXPIRATION_MS:86400000}
    
  3. Crea un base de datos vacía con el nombre konecta

  4. Ejecuta el proyecto

  5. La aplicación estará disponible en: http://localhost:8080

Swagger

Swagger está configurado para generar documentación de la API automáticamente. Puedes acceder a la interfaz de Swagger en la siguiente URL cuando el servidor esté en funcionamiento:

http://localhost:8080/swagger-ui/index.html

image

Tecnologías utilizadas

  • Spring Boot: Desarrollo rápido y robusto de aplicaciones.
  • Spring Security y JWT: Autenticación segura.
  • MySQL y postgreSQL: Sistema de gestión de bases de datos relacional.

Estructura del proyecto

Arquitectura basada en paquetes funcionales, se organizan las carpetas de acuerdo con las características o módulos de la aplicación (por ejemplo, auth, category, challenge), es un diseño entre aspectos funcionales y principios de Clean Architecture y este tipo de arquitectura agrupa cada módulo con sus propios componentes como controladores, servicios, repositorios y modelos.

  src
  └── main
      ├── java/com/example/skilllinkbackend
      │   ├── config       
      │   |   ├── exceptions       -> Exception handling.
      |   |   ├── responses        -> Response format.
      |   |   ├── security         -> Security settings.
      |   |   └── springdoc        -> Spring doc configuration.
      │   ├── features
      │   |   ├── auth             -> Authentication.
      |   |   ├── category
      |   |   |   ├── controller   -> REST controllers.
      |   |   |   ├── dto          -> Data transfer object layer.
      |   |   |   ├── model        -> Domain feature layer.
      |   |   |   ├── repository   -> Data persistence layer.
      |   |   |   └── service      -> Business logic layer.
      |   |   ├── challenge   
      |   |   ├── evaluation  
      |   |   ├── project
      |   |   |   ├── controller   -> REST controllers.
      |   |   |   ├── dto          -> Data transfer object layer.
      |   |   |   ├── model        -> Domain feature layer.
      |   |   |   ├── repository   -> Data persistence layer.
      |   |   |   ├── service      -> Business logic layer. 
      |   |   |   └── validations  -> Creation and editing validations.
      |   |   ├── mentor 
      |   |   ├── mentee 
      |   |   ├── role   
      |   |   └── usuario 
      |   └── shared                     
      │      ├── roledeletionhandler
      |      ├── roleregistrationhandler        
      |      └── util             -> Reusable items.
      └── resources
          └── application.properties -> Configuration app.

Modelo Entidad Relación

Image

Licencia

Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.

Important

  • Con sql crea los roles: ADMIN, USER, MENTEE y MENTOR en la tabla roles
  • Cambia a enabled 1 todos los roles
  • Registra un usuario
  • Modifica la tabla users_roles: agrega un registro para asignar al usuario creado el rol ADMIN
  • Agrega la configuración de la bd en application-prod.yml
  • Para aquellos que no tienen la zona horaria GMT-5 modificar el archivo ...TokenService (para indicar la expiración del token)

About

Aplicación educativa Backend encargada de gestionar usuarios, desafíos, proyectos, categorías entre otros. Los roles como MENTOR y MENTEE tienen su propia tabla.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages