2.2 KiB
2.2 KiB
Zadanie rekrutacyjne
Opis projektu
Aplikacja służy do przetwarzania zgłoszeń serwisowych z pliku JSON, ich klasyfikacji (Przeglądy vs. Awarie) oraz walidacji danych. Wynikiem działania są trzy pliki JSON podzielone według typu oraz poprawności danych.
Kluczowe funkcjonalności:
- Klasyfikacja: Automatyczne rozróżnianie typu zgłoszenia na podstawie fraz w opisie.
- Logika Priorytetów: Dynamiczne przypisywanie priorytetów (krytyczny, wysoki, normalny) na podstawie treści zgłoszenia.
- Obsługa Dat: Obliczanie numeru tygodnia ISO dla przeglądów oraz ustalanie statusów na podstawie dostępności daty.
- Walidacja: Restrykcyjne podejście do formatu numerów telefonów i poprawności dat.
- Obsługa Duplikatów: Pomijanie powtarzających się zgłoszeń o tym samym opisie.
- Logging: Dedykowany kanał logów storage/logs/parser.log dla błędów procesowania.
Architektura
Projekt został przygotowany zgodnie z zasadami SOLID i czystego kodu:
- InputEntity (DTO): Warstwa walidacji i czyszczenia surowych danych wejściowych.
- Service Layer: Centralne miejsce logiki biznesowej, niezależne od interfejsu (CLI).
- Entities: Obiekty Inspection i FailureReport hermetyzują logikę specyficzną dla danego typu zgłoszenia.
- Enums: Wykorzystanie PHP Enums dla statusów i priorytetów (bezpieczeństwo typów).
Wymagania
- Docker & Docker Compose (zalecany Docker Desktop v2.x)
- Alternatywnie: PHP 8.3+, Composer
Uruchomienie (Docker - zalecane)
-
Budowa obrazu: docker compose build
-
Przetworzenie pliku: Umieść plik źródłowy w katalogu projektu i uruchom: docker compose run --rm app php artisan app:parse-entries {nazwa_pliku.json} Wyniki pojawią się w katalogu ./output/.
-
Uruchomienie testów: docker compose run --rm app php artisan test
Uruchomienie lokalne
- composer install
- php artisan app:parse-entries {path_to_file.json}
- php artisan test
Testy
Projekt posiada wysokie pokrycie testami, podzielone na:
- Unit Tests: Walidacja pól, logika priorytetów, obliczanie tygodni roku.
- Feature Tests: Procesowanie plików przez komendę Artisan, obsługa błędów pliku, generowanie wyników output/.