https://github.com/grmvoid/interview-audioteka
https://github.com/grmvoid/interview-audioteka
Last synced: 12 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/grmvoid/interview-audioteka
- Owner: grmvoid
- Created: 2024-06-06T15:42:21.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-06-09T17:49:41.000Z (over 1 year ago)
- Last Synced: 2025-02-01T14:35:22.264Z (about 1 year ago)
- Language: PHP
- Size: 105 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Audioteka: zadanie rekrutacyjne
## Instalacja
Do uruchomienia wymagany jest `docker`
1. Zbuduj obrazy dockera `docker compose build`
1. Zainstaluj zależności `docker compose run --rm php composer install`.
1. Zainicjalizuj bazę danych `docker compose run --rm php php bin/console doctrine:schema:create`.
1. Zainicjalizuj kolejkę Messengera `docker compose run --rm php php bin/console messenger:setup-transports`.
1. Uruchom serwis za pomocą `docker compose up -d`.
Jeśli wszystko poszło dobrze, serwis powinien być dostępny pod adresem
[https://localhost](https://localhost).
Przykładowe zapytania (jak komunikować się z serwisem) znajdziesz w [requests.http](requests.http).
Testy uruchamia polecenie `docker compose run --rm php php bin/phpunit`
## Oryginalne wymagania dotyczące serwisu
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`.
## Zadanie
Użytkownicy i testerzy serwisu zgłosili następujące problemy i prośby:
- [x] 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.
- [x] 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.
- [x] Najnowsze (ostatnio dodane) produkty powinny być dostępne na początkowych stronach listy produktów.
- [x] 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!