Jednoduché RESTful API zamerané na správu objednávok v gastre. Primárnym účelom tohto API je správa položiek, objednávok a stolov v rámci reštaurácie, generovanie QR kódov pre jednotlivé stoly a platobné rozhranie pre jednotlivé objednávky.
Projekt je dockerizovaný a v docker-compose.yaml
sú definované všetky potrebné závislosti.
sudo docker-compose up -d --build
Aby sme mohli projekt úspešne spustiť, je potrebné vytvoriť .env
súbor v zložke api/. Najjednoduchšie je skopírovať .env.example a prispôsobiť ho podľa potreby.
Je možné, že rôzne docker nastavenie na rôznych operačných systémoch budú generovať DNS mená jednotlivých služieb rozlične. DNS mená definované v súbore .env.example sú určené podľa mojej DNS docker siete, čiže je možné, že nebudú fungovať. Preto je potrebné skontrolovať reálne DNS meno kontajnera v rámci docker siete pomocou príkazu:
docker container ls
Problémové premenné môžu byť:
REDIS_HOST
DB_HOST
Súčasťou aplikácie je aj backpack admin rozhranie dostupné na adrese:
GET /admin
Prístup do admin rozhrania je umožnený výlučne superuserom. Toho vytvoríme pomocou príkazu:
php artisan make:superuser <meno> <mail> <heslo>
Dokumentácia je generovaná pomocou Swagger a OpenAPI špecifikácie.
Dokumentácia je dostupná na adrese
GET /api/documentation
composer generate-swagger
Telá požiadavok sa definujú v Request
objektoch.
Schémy modelov definujeme v Resource
objektoch.
Každá odpoveď musí byť obalená schémov #/components/schemas/ApiResponse
Každá listovacia odpoveď musí byť navyše obalená schémov #/components/schemas/BaseCollection
Testy sú rozdelené na jednotkové(unit) a integračné(feature).
Unit testy sú plne mockované a nemajú žiadnu interakciu s databázou
Feature testy bežia nad testovaciou databázou, kt. sa vždy automaticky premigruje.
Aby som zabezpečil správny chod aplikácie, testujem ju na dvoch úrovniach.
Unit testami testujem jednotlivé services a biznis logiku aplikácie.
Feature testami testujem správnu komunikáciu modelov s databázou(môže sa to zdať zbytočné, ale pomohlo mi to odhaliť niekoľko základných problémov) a E2E testovanie API, kde kontrolujem validácie, permissions, správne formátovanie odpovedí a správne fungovanie jednotlivých endpointov.
Testy spúšťame pomocou composer
príkazu, nakoľko len tam zabezpečím správne nastavenie testovacieho prostredia.
composer test:unit
composer test:feature
Prečistenie konfigurácie:
composer recache
PHPCS + autofix:
composer lint
PHPStan:
composer inspect
Generovanie IDE Helpers:
composer generate-helpers