API REST construida con Spring Boot para gestionar proyectos, hitos y tareas, e incluir un endpoint de analisis que resume el avance de un proyecto. Este README se basa en la definicion del contrato v0.0.1.
- CRUD completo para proyectos, hitos y tareas.
- Analisis de avance por proyecto con detalle por hitos y tareas.
- Contratos claros: comandos de alta/actualizacion separados de los recursos.
- Estructura simple lista para evolucionar hacia una arquitectura por capas.
graph TD
Client[Cliente REST] -->|HTTP| Controllers[Controllers]
Controllers --> Services[Servicios]
Services --> Repositories[Repositorios]
graph TD
A[src/main/java/com/project_manager]
A --> B[AwesomeProjectManagerApplication.java]
A --> C[...code...]
D[src/main/resources]
D --> D1[application.properties]
- Java 21 (Temurin recomendado).
- Maven 3.9+ o el wrapper
./mvnw.
./mvnw clean package
./mvnw spring-boot:runLa aplicacion escucha en http://localhost:8080.
Parametros por defecto (src/main/resources/application.properties):
spring.application.name=awesomeProjectManager| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /project | Lista proyectos |
| POST | /project | Crea un proyecto |
| GET | /project/{projectUuid} | Recupera un proyecto |
| PUT | /project/{projectUuid} | Actualiza un proyecto |
| DELETE | /project/{projectUuid} | Borra un proyecto |
| GET | /project/{projectUuid}/milestone | Lista hitos |
| POST | /project/{projectUuid}/milestone | Anade un hito |
| GET | /project/{projectUuid}/milestone/{milestoneUuid} | Recupera un hito |
| PUT | /project/{projectUuid}/milestone/{milestoneUuid} | Actualiza un hito |
| DELETE | /project/{projectUuid}/milestone/{milestoneUuid} | Borra un hito |
| GET | /project/{projectUuid}/task | Lista tareas |
| POST | /project/{projectUuid}/task | Crea una tarea |
| GET | /project/{projectUuid}/task/{taskUuid} | Recupera una tarea |
| PUT | /project/{projectUuid}/task/{taskUuid} | Actualiza una tarea |
| DELETE | /project/{projectUuid}/task/{taskUuid} | Borra una tarea |
| GET | /project/{projectUuid}/analysis | Analisis del proyecto |
export interface DateType {
year: number; // YYYY
month: number; // 0-11
week: number; // 0-3
}
export interface Project {
uuid: string;
title: string;
description?: string;
startDate: DateType;
endDate: DateType;
additionalFields?: Record<string, string>;
}
export interface Milestone {
uuid: string;
projectUuid: string;
title: string;
date: DateType;
description?: string;
}
export interface Task {
uuid: string;
projectUuid: string;
title: string;
description?: string;
durationWeeks: number;
startDate: DateType;
}
export interface UpsertProjectCommand {
title: string;
description?: string;
startDate: DateType;
endDate: DateType;
additionalFields?: Record<string, string>;
}
export interface UpsertMilestoneCommand {
title: string;
date: DateType;
description?: string;
}
export interface UpsertTaskCommand {
title: string;
description?: string;
durationWeeks: number;
startDate: DateType;
}POST /project Content-Type: application/json
{
"title": "Lanzamiento Q4",
"description": "Plan de entrega de producto",
"startDate": { "year": 2025, "month": 9, "week": 0 },
"endDate": { "year": 2025, "month": 11, "week": 2 },
"additionalFields": {
"owner": "equipo-producto",
"priority": "alta"
}
}export interface Error {
type: string;
description: string;
}- Haz un fork del repositorio.
- Crea una rama feature:
git checkout -b feature/nueva-funcionalidadque cuelgue de la rama develop. - Asegurate de pasar los tests y respeta el estilo del proyecto.
- Envia un pull request explicando claramente el cambio.