Do uruchomienia wymagany jest docker
- Zbuduj obrazy dockera
docker compose build
- Zainstaluj zależności
docker compose run --rm php composer install
. - Zainicjalizuj bazę danych
docker compose run --rm php php bin/console doctrine:schema:create
. - Zainicjalizuj kolejkę Messengera
docker compose run --rm php php bin/console messenger:setup-transports
. - Uruchom serwis za pomocą
docker compose up -d
.
Jeśli wszystko poszło dobrze, serwis powinien być dostępny pod adresem https://localhost.
Przykładowe zapytania (jak komunikować się z serwisem) znajdziesz w requests.http.
Testy uruchamia polecenie docker compose run --rm php php bin/phpunit
Serwis realizuje obsługę katalogu produktów oraz koszyka. Klient serwisu powinien móc:
- dodać produkt do katalogu,
- usunąć produkt z katalogu,
- wyświetlić produkty z katalogu jako stronicowaną listę o co najwyżej 3 produktach na stronie,
- utworzyć koszyk,
- dodać produkt do koszyka, przy czym koszyk może zawierać maksymalnie 3 produkty,
- usunąć produkt z koszyka,
- wyświetlić produkty w koszyku, wraz z ich całkowitą wartością.
Kod, który masz przed sobą, stara się implementować te wymagania z pomocą Symfony 6.0
.
Użytkownicy i testerzy serwisu zgłosili następujące problemy i prośby:
- Chcemy móc dodawać do koszyka ten sam produkt kilka razy, o ile nie zostanie przekroczony sumaryczny limit sztuk produktów. Teraz to nie działa.
- Limit koszyka nie zawsze działa. Wprawdzie, gdy podczas naszych testów dodajemy czwarty produkt do koszyka to dostajemy komunikat
Cart is full.
, ale pomimo tego i tak niektóre koszyki w bazie danych mają po cztery produkty. - Najnowsze (ostatnio dodane) produkty powinny być dostępne na początkowych stronach listy produktów.
- Musimy mieć możliwość edycji produktów. Czasami w nazwach są literówki, innym razem cena jest nieaktualna.
Prosimy o naprawienie / implementację.
PS. Prawdziwym celem zadania jest oczywiście kawałek kodu, który możemy ocenić, a potem porozmawiać o nim w czasie interview "twarzą w twarz". Przy czym pamiętaj, że liczy się nie tylko napisany kod PHP, ale także umiejętność przedstawienia czytelnego rozwiązania, użycia odpowiednich narzędzi (chociażby systemu wersjonowania), udowodnienia poprawności rozwiązania (testy) itd.
To Twoja okazja na pokazanie umiejętności, więc jeśli uważasz, że w kodzie jest coś nie tak, widzisz więcej błędów, coś powinno być zaimplementowane inaczej, możesz do listy zadań dodać opcjonalny refactoring, albo krótko wynotować swoje spostrzeżenia (może przeprowadzić coś w rodzaju code review?).
Powodzenia!