Skip to content

skalskidaniel/todo-app

Repository files navigation

TODO App (Spring Boot + H2)

Opis projektu

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 czasu LocalDateTime).

Uruchomienie w Dockerze

  1. Zbuduj i uruchom kontener:
docker compose up --build
  1. API będzie dostępne pod adresem:
http://localhost:8080
  1. Dane H2 są zapisywane w wolumenie Dockera todo-data (katalog /app/data w kontenerze).

  2. Zatrzymanie środowiska:

docker compose down

Konfiguracja bazy H2

Domyś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

OpenAPI i Swagger UI

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

Endpointy REST

Bazowy URL: http://localhost:8080/api/tasks

  1. POST /api/tasks
    Tworzy nowe zadanie.

Przykładowe żądanie:

{
  "title": "Kup mleko",
  "description": "2 litry",
  "status": "NEW"
}
  1. GET /api/tasks
    Zwraca listę wszystkich zadań.

  2. GET /api/tasks/{id}
    Zwraca jedno zadanie na podstawie UUID.

  3. PUT /api/tasks/{id}
    Aktualizuje dane zadania.

Przykładowe żądanie:

{
  "title": "Kup mleko i chleb",
  "description": "2 litry + chleb pełnoziarnisty",
  "status": "IN_PROGRESS"
}
  1. DELETE /api/tasks/{id}
    Usuwa zadanie i zwraca status 204 No Content.

Przykładowa odpowiedź

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Kup mleko",
  "description": "2 litry",
  "status": "NEW",
  "createdAt": "2026-03-05T15:30:00"
}

Obsługa błędów

Aplikacja zwraca spójny format błędów JSON z poziomu GlobalExceptionHandler.

Przykładowe kody:

  • 400 Bad Request dla błędnych danych wejściowych,
  • 404 Not Found gdy zadanie nie istnieje,
  • 500 Internal Server Error dla 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"
  }
}

About

Spring boot todo app backend

Resources

Stars

Watchers

Forks

Contributors