Najlepszy Java Developer – Zadanie 8: Wielbłądy

Zadanie

Ostatnio zajmowaliśmy się wakacjami – tym razem… wielbłądami. W skrócie zadanie polega na konsumowaniu API transportu wielbłądziego – kolejny raz się nie przesłyszałeś: wielbłądy. Dodatkowo również musimy wykonać kilka operacji i obliczeń na otrzymanych danych. Już tłumaczę dokładniej.

W tym repozytorium znajduję się aplikacja springowa, jeśli ją uruchomimy to będziemy mieli możliwość do wysyłania zapytań do API z wielbłądami. Właśnie na podstawie tego API trzeba wykonać poniższe zadania:

  1. Zwróć listę przejazdów wielbłądów,
  2. Zwróć listę przejazdów z podanego miasta,
  3. Zwróć listę przejazdów z do podanego miasta,
  4. Zwróć listę przejazdów danego wielbłąda,
  5. Zwróć listę przejazdów, gdzie dana wyjazdu mieści się w podanym zakresie dat,
  6. Zwróć listę przejazdów dla podanej daty wyjazdu,
  7. Zwróć listę przejazdów z podanego miasta, lecz tylko te, w których udźwig wielbłąda jest większy niż ten podany,
  8. Zwróć listę miast, które podany wielbłąd odwiedził,
  9. Zwróć listę miasta dla podanego państwa,
  10. Zwróć wielbłądy starsze od podanego wieku,
  11. Zwróć wielbłądy młodsze od podanego wieku,
  12. Zwróć wielbłądy ze względu na płeć,
  13. Zwróć wielbłąda po nazwie,
  14. Zwróć czas pracy danego wielbłąda.

Wszystkie te powyższe zadania są zapisane jako metody w interfejsie CamelTransportService w tym repozytorium. W swoim rozwiązaniu musisz po prostu go zaimplementować.

Dokumentację całego restowego API znajdziesz tutaj.

Jak uruchomić aplikację

  1. Sklonuj repozytorium gita,
  2. Wejdź do katalogu projektu oraz w konsoli wpisz: mvn install
  3. Jeśli projekt się zbudujesz przejdź do folderu target i wpisz komendę
java -jar Camel-0.0.1-SNAPSHOT.jar

Po chwili aplikacja powinna się uruchomić pod adresem: localhost:8090. Aplikacja może również zostać uruchomiona bezpośrednio w IntelliJ Idea klikając Run na klasie CamelApplication.

Jeśli chcesz zmienić port, na którym ma wystartować aplikacja to wystarczy wejść w plik /src/main/resource/application.properties oraz zmienić poniższą linię:

server.port=8090

Po zmianie portu należy wykonać powyższe kroki ponownie.

Pamiętaj, że po zmianie portu należy też zmienić port podczas wysyłania zapytań – adres z dokumentacji nie będzie już aktualny!

Punktacja

Przygotowane jest 30 testów, za każdy test otrzymasz 100 punktów. Łącznie można zyskać 3000 punktów.

Porady

  • Zacznij od napisania modeli na podstawie dokumentacji API,
  • Mając modele napisz testy jednostkowe – zewnętrzny serwis powinnien być zmockowany (zaślepiony), na podstawie dokumentacji możesz zaaranzować swój scenariusz co API ma zwracać podczas testów,
  • Do mockowania warto użyć biblioteki Mockito (jest już załączona w pom.xml),
  • Zwróć uwagę na przypadki, gdy zasób nie zostanie znaleziony (Http status code 404),
  • Jeśli zamierzasz mockować zewnętrzny serwis to musisz zastosować Dependency Injection, aby w prosty sposób wstrzyknąć swojego mocka podczas tworzenia obiektu,
  • Rozpoczynając implementację warto na początku zaimplementować uderzanie do wszystkich potrzebnych nam end pointów restowego API,
  • Zapytania do API łatwo się buduje przy użyciu RestTemplate,
  • Warto przetestować sobie end pointy API w przeglądarce lub Postmanie – w przypadku przeglądarki warto pobrać sobie rozszerzenie do json np. Json Formatter,
  • W razie pytań pytaj 😉

Przydatne linki

  1. Mockito
  2. Dokumentacja API
  3. Aplikacja z API 
  4. Szablon rozwiązania
  5. Rest Template

Czas

Zadanie zostało opublikowane 16 lutego, a jego rozwiązania można przesyłać do 24 lutego do godziny 23.59. Zadania wysłane później będą automatycznie usuwane.

Format

Zadanie należy wysłać na email: njd@1024kb.pl z tematem: TWÓJ-NICK_CAMEL.

Zadanie przesyłamy jako repozytorium Git – może być hostowany na GitHub, GitLab, Bitbucket – gdzie tylko chcesz. W wiadomości podajemy tylko link do repozytorium projektu. 😉

Pamiętajcie, aby do pliku .gitignore dodać:

  • /target
  • /out
  • /.idea
  • *.iml

I inne pliki/katalogi, które nie powinny być na zdalnym repozytorium.

W razie jakichkolwiek wątpliwości pytajcie jak ma wyglądać finalna aplikacja. 😉

Rozwiązanie

Rozwiązanie zadania można znaleźć w tym repozytorium.