https://github.com/luiggi-piero/roles-prueba2
Backend para la administración de usuarios, roles, categorias, proyectos, desafios y evaluaciones
https://github.com/luiggi-piero/roles-prueba2
java-21 postgresql spring-boot
Last synced: 3 months ago
JSON representation
Backend para la administración de usuarios, roles, categorias, proyectos, desafios y evaluaciones
- Host: GitHub
- URL: https://github.com/luiggi-piero/roles-prueba2
- Owner: Luiggi-piero
- Created: 2025-06-30T17:53:11.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-30T23:28:27.000Z (about 1 year ago)
- Last Synced: 2025-06-30T23:32:12.924Z (about 1 year ago)
- Topics: java-21, postgresql, spring-boot
- Language: Java
- Homepage:
- Size: 36.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
##
ROLES PRUEBA 2
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](#Funcionalidades)
2. [Requerimientos previos](#requerimientos-previos)
3. [Configuración](#configuración)
4. [Tecnologías utilizadas](#tecnologías-utilizadas)
5. [Estructura del proyecto](#estructura-del-proyecto)
6. [Modelo entidad-relación](#modelo-entidad-relación)
## 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` | - Todos los campos son obligatorios, por lo tanto, es necesario verificar si todos los campos 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. |
| 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. |
🗂️ 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 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. |
| POST | `/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 17 o superior**
- **Gestor de dependencias: Maven 4.0.0**
- **Spring Boot 3.5.0**
- **Base de datos MySQL o PostgreSQL (cambiar la configuración de application.properties)**
## Configuración
1. Clona el repositorio
```bash
git clone https://github.com/Luiggi-piero/roles-prueba2.git
cd roles-prueba2
2. Configura las variables de entorno para la conexión a la base de datos
```yaml
spring.application.name=rolesprueba
spring.jpa.hibernate.ddl-auto=update
#spring.datasource.url=jdbc:mysql://localhost:3306/rolesprueba?useSSL=false&serverTimezone=UTC
#conexion con postgresql
spring.datasource.url=jdbc:postgresql://localhost:5432/rolesprueba2_db
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
api.security.secret=${JWT_SECRET}
3. Crea un base de datos vacía con el nombre rolesprueba2_db
4. Ejecuta el proyecto
5. La aplicación estará disponible en: http://localhost:8080
## 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.
│ ├── 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.
| | ├── role
| | └── usuario
└── resources
└── application.properties -> Configuration app.
## Modelo Entidad Relación

> [!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.properties
> * Para aquellos que no tienen la zona horaria GMT-5 modificar el archivo ...TokenService (para indicar la expiración del token)