Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

(\ (\
( • •)  
━∪∪━━━━ 
ᵇʸ ᴬˡᵉᶠᵘᵉⁿᵗᵉˢ

Stefanini Task Manager - Fullstack Challenge

𖥔


Solución integral para la gestión de tareas desarrollada para el proceso técnico de Stefanini (Brasilia). Este proyecto demuestra la implementación de arquitecturas modernas, principios de Clean Code y una esteira de CI/CD automatizada.

🏛️ Arquitectura del Sistema

Backend (Java 21 + Spring Boot 3.5)

Se ha implementado una Arquitectura Hexagonal (Ports & Adapters) combinada con DDD (Domain-Driven Design) para garantizar el desacoplamiento total de la lógica de negocio.

  • Domain Layer: Entidades puras y contratos de interfaces (Ports).
  • Application Layer: Servicios de orquestación y casos de uso.
  • Infrastructure Layer: Adaptadores para SQL Server (JPA), Clientes API (WebClient) y Documentación (OpenAPI).

Frontend (Angular 20)

Interfaz vanguardista utilizando el motor Zoneless y Signals para una reactividad de alto rendimiento.

  • Standalone Components: Eliminación de NgModules para un bundle más ligero.
  • Tailwind CSS: Diseño responsivo con estética de producto comercial (SaaS).
  • Vite Proxy: Configuración de comunicación transparente con el backend.

Tecnologías Utilizadas

  • Lenguajes: Java 21, TypeScript.
  • Frameworks: Spring Boot 3.5, Angular 20.
  • Persistencia: MS SQL Server 2022 + Flyway (Migrations).
  • DevOps: GitHub Actions, Docker, Docker Compose.
  • Calidad: JUnit 5, Mockito, MockMvc, AssertJ.

Guía de Inicio Rápido

☕︎ ˖ Verifique que las dependencias están instaladas en su entorno de trabajo/teste.

  1. Clone o repositório:

    git clone https://github.com/ale-fuentes-ar/stefanini-task-manager.git
    cd stefanini-task-manager
  2. Requisitos Previos

    • Docker & Docker Desktop.
    • JDK 21.
    • Node.js 20+.
  3. Infraestructura (Docker) Levanta la base de datos SQL Server y servicios secundarios:

    docker-compose up -d
  4. Ejecución Backend

    cd backend
    ./mvnw spring-boot:run

    API disponible en: http://localhost:8081 | Swagger: /swagger-ui/index.html

  5. Ejecución Frontend

    cd frontend
    npm install
    npm start

    App disponible en: http://localhost:4200


Uso de Inteligencia Artificial (IA)

En cumplimiento con los requisitos de Stefanini, se documenta el uso de IA durante el desarrollo:

  • Herramienta: ChatGPT/Claude (Modelo GPT-4o).
  • Uso: Asistencia en la definición de la estructura hexagonal, generación de boilerplate para migraciones SQL y configuración del pipeline de GitHub Actions para SQL Server.
  • Validación: Cada fragmento de código fue revisado, refactorizado para cumplir con SOLID y testeado manualmente para asegurar la integridad del sistema.

Metodología de Trabajo

Se utilizó GitFlow estrictamente para la gestión de ramas:

  • main: Versión estable de producción.
  • develop: Integración continua.
  • feature/*: Desarrollo de funcionalidades aisladas (CRUD, UI, CI/CD).

Diagramas

  • Arquitectura (Hexagonal / Ports & Adapters): Diagrama de alto nivel que muestra las capas y adaptadores principales del proyecto.
graph TD
    subgraph Frontend
        A[Angular Frontend]
    end
    subgraph Backend
        direction TB
        C[Controllers / REST API]
        S["Application Services (Use Cases)"]
        D["Domain (Entities & Ports)"]
        I[Infrastructure Adapters]
        R["Repositories (JPA / SQL)"]
    end
    subgraph External
        DB[(SQL Server)]
        F[Flyway Migrations]
        SW["Swagger / OpenAPI"]
    end

    A -->|HTTP JSON| C
    C --> S
    S --> D
    D --> I
    I --> R
    R --> DB
    F --> R
    C -->|Docs| SW

    classDef infra fill:#f9f,stroke:#333,stroke-width:1px;
    class I,R,DB,F infra;
Loading
  • Flujo de datos (ej. crear una tarea): Secuencia desde la UI hasta la persistencia y respuesta.
sequenceDiagram
    participant FE as Frontend (Angular)
    participant API as REST Controller
    participant APP as Application Service
    participant DOM as Domain (Entity/Port)
    participant REP as Repository (JPA)
    participant DB as SQL Server

    FE->>API: POST /tasks {taskDto}
    API->>APP: mapToCommand(taskDto)
    APP->>DOM: executeCreate(command)
    DOM->>REP: save(entity)
    REP->>DB: INSERT task
    DB-->>REP: generated id
    REP-->>DOM: entity with id
    DOM-->>APP: domain event / dto
    APP-->>API: response dto (201 Created)
    API-->>FE: 201 Created (Location + body)
Loading
  • CI github: Secuencia ao publicar codigo nas branch main e develop.
graph TD
    %% Definición de Estilos (Clases)
    classDef trigger fill:#1E293B,stroke:#0F172A,stroke-width:2px,color:#FFFFFF;
    classDef runner fill:#F8FAFC,stroke:#CBD5E1,stroke-width:2px,color:#0F172A;
    classDef infra fill:#C2410C,stroke:#9A3412,stroke-width:2px,color:#FFFFFF;
    classDef maven fill:#1E40AF,stroke:#1E3A8A,stroke-width:2px,color:#FFFFFF;
    classDef success fill:#15803D,stroke:#14532D,stroke-width:2px,color:#FFFFFF;
    classDef failure fill:#B91C1C,stroke:#7F1D1D,stroke-width:2px,color:#FFFFFF;
    classDef decision fill:#374151,stroke:#111827,stroke-width:2px,color:#FFFFFF;

    %% Nodos y Flujo
    Start([Push / Pull Request]):::trigger --> Trigger{Branch?}:::decision
    
    Trigger -->|main / develop / feature/*| Runner[GitHub Hosted Runner: Ubuntu]:::runner

    subgraph GitHubRunner[Entorno Virtual - GitHub Runner]
        direction TB
        SetupJDK[Set up JDK 21 Temurin]:::maven
        Perms[Chmod +x mvnw]:::maven
        
        subgraph DockerServices[Servicios de Infraestructura - Docker]
            SQL[(MS SQL Server 2022)]:::infra
            HealthCheck{Health Check: sqlcmd}:::decision
            SQL --- HealthCheck
        end
        
        subgraph MavenCycle[Ciclo de Maven]
            CreateDB[docker exec: CREATE DATABASE stefaninidb]:::maven
            Build[./mvnw package]:::maven
            Tests[./mvnw test]:::maven
        end
    end

    %% Conexiones
    Runner --> SetupJDK
    SetupJDK --> Perms
    Perms --> HealthCheck
    HealthCheck -->|Healthy| CreateDB
    CreateDB --> Build
    Build --> Tests
    
    %% Resultado Final
    Tests --> Result{Status?}:::decision
    Result -->|Success| Green[Check Verde: Merge OK]:::success
    Result -->|Failure| Red[Check Rojo: Notificar Error]:::failure
Loading

About

Enterprise Task Manager: Fullstack solution built with Java 21 (Spring Boot 3.5) and Angular 20. Implementing Hexagonal Architecture, DDD, Kafka messaging, and Prometheus observability. Fully automated with GitHub Actions.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages