Skip to content

Andres-develope/Java_Spring-Boot-Assessment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Gestión de Proyectos y Tareas

Sistema desarrollado con Java 17 + Spring Boot 3 aplicando Clean Architecture (Hexagonal).

📁 Estructura del Proyecto

Prueba_Assessment/
├── backend/                # API REST con Spring Boot
│   ├── src/
│   │   ├── main/java/com/assessment/projectmanagement/
│   │   │   ├── domain/           # Entidades de dominio (sin frameworks)
│   │   │   ├── application/      # Casos de uso y puertos
│   │   │   ├── infrastructure/   # Adaptadores (JPA, Security, Config)
│   │   │   └── presentation/     # Controllers REST
│   │   └── test/                 # Pruebas unitarias
│   ├── Dockerfile
│   └── pom.xml
├── frontend/               # Interfaz de usuario
│   ├── index.html         # Aplicación HTML + JavaScript
│   └── nginx.conf         # Configuración de Nginx
├── docker-compose.yml
└── README.md

🏗️ Arquitectura Hexagonal (Backend)

backend/src/main/java/com/assessment/projectmanagement/
├── domain/                 # Entidades y excepciones de dominio (sin dependencias de frameworks)
│   ├── model/             # User, Project, Task, ProjectStatus
│   └── exception/         # DomainException, BusinessRuleException, etc.
├── application/           # Casos de uso y puertos
│   ├── port/
│   │   ├── in/           # Puertos de entrada (casos de uso)
│   │   └── out/          # Puertos de salida (repositorios, audit, notification)
│   └── service/          # Implementación de casos de uso
├── infrastructure/        # Adaptadores e implementaciones
│   ├── adapter/          # AuditLogAdapter, NotificationAdapter
│   ├── config/           # SecurityConfig, OpenApiConfig, UseCaseConfig
│   ├── persistence/      # JPA entities, repositories, adapters
│   └── security/         # JWT, CurrentUserAdapter
└── presentation/          # Controladores REST
    ├── controller/       # AuthController, ProjectController, TaskController
    ├── dto/              # Request/Response DTOs
    └── exception/        # GlobalExceptionHandler

🚀 Ejecución con Docker

docker compose up

La aplicación estará disponible en:

🔧 Ejecución Local (Desarrollo)

# Con Maven
./mvnw spring-boot:run

# O compilar y ejecutar
./mvnw clean package
java -jar target/project-management-1.0.0.jar

📋 Credenciales de Prueba

Usuario pre-cargado en la base de datos:

  • Email: admin@example.com
  • Password: admin123

O registra un nuevo usuario desde el frontend o usando la API:

# Registrar usuario
curl -X POST http://localhost:8080/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","email":"test@example.com","password":"admin123"}'

# Login
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@example.com","password":"admin123"}'

🔐 Endpoints API

Autenticación

  • POST /api/auth/register - Registrar usuario
  • POST /api/auth/login - Login (retorna JWT)

Proyectos (requiere JWT)

  • POST /api/projects - Crear proyecto
  • GET /api/projects - Listar proyectos del usuario
  • PATCH /api/projects/{id}/activate - Activar proyecto

Tareas (requiere JWT)

  • POST /api/projects/{projectId}/tasks - Crear tarea
  • GET /api/projects/{projectId}/tasks - Listar tareas
  • PATCH /api/tasks/{id}/complete - Completar tarea

📜 Reglas de Negocio

  1. Un proyecto solo puede activarse si tiene al menos una tarea activa
  2. Solo el propietario puede modificar un proyecto o sus tareas
  3. Una tarea completada no puede modificarse
  4. Todas las eliminaciones son lógicas (soft delete)
  5. La activación de proyectos y la finalización de tareas generan auditoría y notificación

🧪 Pruebas Unitarias

cd backend && mvn test

Las pruebas cubren los casos críticos:

  • ActivateProject_WithTasks_ShouldSucceed
  • ActivateProject_WithoutTasks_ShouldFail
  • ActivateProject_ByNonOwner_ShouldFail
  • CompleteTask_AlreadyCompleted_ShouldFail
  • CompleteTask_ShouldGenerateAuditAndNotification

🛠️ Decisiones Técnicas

  1. Arquitectura Hexagonal: El dominio es completamente independiente de frameworks. Los casos de uso definen puertos que son implementados por adaptadores.

  2. JWT Stateless: Autenticación sin estado usando tokens JWT. No se almacenan sesiones.

  3. Soft Delete: Las eliminaciones son lógicas (campo deleted) para mantener trazabilidad.

  4. PostgreSQL en Docker: Base de datos relacional para producción, H2 embebida para desarrollo local.

  5. Swagger/OpenAPI: Documentación automática de la API con soporte para autenticación JWT.

  6. Frontend Simple: HTML + JavaScript vanilla para demostrar la integración sin agregar complejidad innecesaria.

📦 Stack Tecnológico

  • Java 17
  • Spring Boot 3.2
  • Spring Security + JWT
  • Spring Data JPA
  • PostgreSQL / H2
  • Springdoc OpenAPI (Swagger)
  • JUnit 5 + Mockito
  • Docker + Docker Compose

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published