john-bartu / todo-app-java

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ToDo Application

Aplikacja do zarządzania zadaniami

Zadanie

Przedmiotem zadania jest zaimplementowanie aplikacji internetowej do zarządzania zadaniami. Aplikacja umożliwia tworzenie użytkowników oraz zarządzanie prostymi zadaniami (tworzenie, wyświetlanie, usuwanie, ...)

Wymagania

  1. Aplikacja powinna udostępniać zasoby i funkcjonalność poprzez REST API

  2. Aplikacja powinna być dostępona pod adresem http://localhost:8080

  3. Aplikacja powinna obsługiwać treści żądań w formacie JSON

  4. Aplikacja powinna zwracać treści odpowiedzi w formacie JSON

  5. Aplikacja powinna obsługiwać następujące żądania HTTP

    • metoda - metoda HTTP żądania,
    • adres - ścieżka adresu URL żądanego zasobu,
    • nagłówki - zmienne wysyłane w nagłówku żądania,
    • parametry - zmienne wysyłane w ścieżce zasobu,
    • treść - przykład ewentualnej treści żądania,
    • odpowiedzi - obsługiwane kody statusu oraz przykład ewentualnej treści odpowiedzi
    metoda adres nagłówki parametry ciało odpowiedzi
    POST /todo/user
    {
    "username": "janKowalski",
    "password": "am!sK#123"
    }
    • 201
    • 400
    • 409
    POST /todo/task auth
    {
    "description": "Kup mleko",
    "due": "2021-06-30"
    }
    • 201
      {
      "id": "237e9877-e79b-12d4-a765-321741963000"
      }
    • 400
    • 401
      GET /todo/task auth
      • 200
        [
        {
        "id": "237e9877-e79b-12d4-a765-321741963000",
        "description": "Kup mleko",
        "due": "2021-06-30"
        }
        ]
      • 400
      • 401
      GET /todo/task/{id} auth id
      • 200
        {
        "id": "237e9877-e79b-12d4-a765-321741963000",
        "description": "Kup mleko",
        "due": "2021-06-30"
        }
      • 400
      • 401
      • 403
      • 404
      PUT /todo/task/{id} auth id
      {
      "description": "Kup mleko",
      "due": "2021-06-30"
      }
      • 200
        {
        "id": "237e9877-e79b-12d4-a765-321741963000",
        "description": "Kup mleko",
        "due": "2021-06-30"
        }
      • 400
      • 401
      • 403
      • 404
      DELETE /todo/task/{id} auth id
      • 200
      • 400
      • 401
      • 403
      • 404
      • auth - ciąg znaków 'base64(username):base64(password)', gdzie base64() oznacza funkcję kodującą algorytmem Base64. Np., dla użytkownika { "username": "janKowalski", "password": "am!sK#123" }, auth będzie równe amFuS293YWxza2k=:YW0hc0sjMTIz
      • id - unikalny identyfikator zadania w formacie UUID

      ⚠️ Informacje o tym, które nagłówki, parametry lub pola w dokumentach JSON są wymagane, znajdują się w szczegółowej dokumenatcji Swagger API aplikacji

    • Aplikacja powinna zwracać odpowiedź z kodem 404 (HTTP Not Found) dla nieobsługiwanych adresów

    • Zadania i użytkownicy stworzeni przy użyciu żądań, powinni być pamiętane w ramach jednokrotnego uruchomienia aplikacji

    • Implementacja powinna zawierać testy jednostkowe sprawdzające wszystkie obsługiwane żądania

    • Testy jednostkowe powinny sprawdzać wszystkie scenariusze użycia wyspecyfikowane w dokumentacji (zwracanie wszystkich możliwych odpowiedzi)

    • Aplikacja powinna logować najważniejsze informacje w trakcie działania aplikacji

    Dozwolone rozszerzenia

    • Treści żądań i odpowiedzi mogą być serializowane oraz deserializowane przy użyciu klas z zewnętrznych bibliotek, np. Gson lub Jackson
    • Logowanie może być zaimplementowane przy użyciu zewnętrznych bibliotek, np. Logback lub Log4J

    Ograniczenia

    • Główna klasa powinna nazywać się ToDoApplication
    • Klasa główna powinna znajdować się w pakiecie efs.task.todoapp
    • Klasa główna powinna posiadać bezparametrowy konstruktor z dostępem conajmniej pakietowym
    • W klasie głównej powinna znajdywać się zaimplementowana metoda
      public HttpServer createServer();
      
    • Aplikacja powinna być zaimplementowana wyłącznie z użyciem klas z JDK z wyjątkiem bibliotek wymienionych w powyższym punkcie

    Ocena rozwiązania

    Przy ocenie zadania pod uwagę będą brane następujące elementy:

    • wynik uruchomienia automatycznych testów
    • opinia prowadzącego na temat zaimplementowanego kodu
    • opinia prowadzącego na temat zaimplementowanych testów
    • rozwiązanie ewentualnych uwag prowadzącego do rozwiązania umieszczonych w repozytorium

    Możliwe zmiany wymagań

    Aplikacja powinna być zaimplementowane w sposób umożliwiający łatwe rozszerzanie bądź zmianę funkcjonalności.

    Jako element ćwiczenia, można spodziewać się zmiany wymagań np.:

    • inicjalizowanie aplikacji danymi wczytywanymi z pliku
    • logi z aplikacji zapisywane do pliku
    • aplikacja powinna obsługiwać treści żądań w formacie XML
    • dodanie pola status w zadaniach
    • wyświetlanie zaległych zadań

    Materiały

    Materiały, z którymi należy się zapoznać przed zajęciami

    1. API
    2. REST
    3. HTTP Methods
    4. HTTP Response Status Codes
    5. JSON
    6. UUID
    7. Kodowanie Base64
    8. Introduction to Java Logging

    Materiały, które mogą być pomocne podczas rozwiązywania zadania

    1. REST API Tutorial
    2. How to use Swagger UI
    3. Jackson vs Gson
    4. The Repository Pattern Explained

    About


    Languages

    Language:Java 100.0%