Aplikacja udostępnia REST API do zarządzania zadaniami TODO.
Główne funkcje:
- dodawanie zadań,
- pobieranie listy zadań,
- pobieranie pojedynczego zadania po
id, - edycja zadania,
- usuwanie zadania.
Model zadania:
id(UUID),title(String),description(String, pole opcjonalne),status(NEW,IN_PROGRESS,DONE),createdAt(znacznik czasuLocalDateTime).
- Zbuduj i uruchom kontener:
docker compose up --build- API będzie dostępne pod adresem:
http://localhost:8080
-
Dane H2 są zapisywane w wolumenie Dockera
todo-data(katalog/app/dataw kontenerze). -
Zatrzymanie środowiska:
docker compose downDomyślna konfiguracja:
- URL:
jdbc:h2:file:./data/todo_db;AUTO_SERVER=TRUE, - użytkownik:
admin, - hasło:
admin.
Konsola H2:
http://localhost:8080/h2-console
Dokumentacja API jest generowana automatycznie przez SpringDoc.
- Swagger UI:
http://localhost:8080/docs - Specyfikacja OpenAPI (JSON):
http://localhost:8080/v3/api-docs
Dodatkowo w repozytorium znajduje się przykładowy plik eksportu specyfikacji:
openapi.json
Bazowy URL: http://localhost:8080/api/tasks
POST /api/tasks
Tworzy nowe zadanie.
Przykładowe żądanie:
{
"title": "Kup mleko",
"description": "2 litry",
"status": "NEW"
}-
GET /api/tasks
Zwraca listę wszystkich zadań. -
GET /api/tasks/{id}
Zwraca jedno zadanie na podstawie UUID. -
PUT /api/tasks/{id}
Aktualizuje dane zadania.
Przykładowe żądanie:
{
"title": "Kup mleko i chleb",
"description": "2 litry + chleb pełnoziarnisty",
"status": "IN_PROGRESS"
}DELETE /api/tasks/{id}
Usuwa zadanie i zwraca status204 No Content.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Kup mleko",
"description": "2 litry",
"status": "NEW",
"createdAt": "2026-03-05T15:30:00"
}Aplikacja zwraca spójny format błędów JSON z poziomu GlobalExceptionHandler.
Przykładowe kody:
400 Bad Requestdla błędnych danych wejściowych,404 Not Foundgdy zadanie nie istnieje,500 Internal Server Errordla nieoczekiwanych błędów.
Przykład błędu walidacji (400):
{
"timestamp": "2026-03-05T15:30:00Z",
"status": 400,
"error": "Bad Request",
"message": "Validation failed",
"path": "/api/tasks",
"validationErrors": {
"title": "Title is required",
"status": "Status is required"
}
}