Zadanie Rekrutacyjne 2Colors

Zadanie Rekrutacyjne 2Colors



Opis projektu

Projekt został wykonany w oparciu o własny klasyczny motyw WordPress z użyciem Bootstrap 5 do szybkiego stylowania oraz obsługi interfejsu (m.in. taby, akordeony).

Dane pochodzą z API Sejmu, a ich integracja została zrealizowana w formie dedykowanej wtyczki. Na potrzeby projektu stworzyłem dwa Custom Post Types (CPT): poslowie i partie.

🔄 Synchronizacja z API

Pobieranie danych z API zrealizowałem asynchronicznie (AJAX) – dzięki temu możliwe było wyeliminowanie problemów z przekroczeniem czasu wykonania (np. 120s timeout, critical error) przy większych zbiorach danych.

Wtyczka obsługuje dynamiczne ładowanie z loaderem postępu, który pokazuje, ile danych zostało do pobrania. Dane posłów i partii pobierane są poprzez dwa własne endpointy REST API:

Zabezpieczenia realizuję poprzez permission_callback, który dopuszcza tylko administratora.

⚙️ Przetwarzanie danych

Dane pobieram za pomocą file_get_contents() — choć nie jest to najlepsze rozwiązanie do środowiska produkcyjnego, na potrzeby zadania rekrutacyjnego było szybkie i skuteczne.

Przetwarzanie danych odbywa się w dwóch funkcjach:

Jeśli poseł lub partia już istnieje, dane są aktualizowane. W przeciwnym razie tworzony jest nowy wpis.

👤 Strona posła

Strona pojedynczego posła to najważniejszy element systemu. Oprócz danych podstawowych i przynależności do partii, wyświetlam również:

Nie zastosowałem dla tych elementów osobnych CPT – dane są pobierane serwerowo po ID posła, co daje pełen server-side rendering i korzystnie wpływa na SEO.

Dodatkowo, szczegóły głosowań są ładowane dopiero przy potrzebie (on demand) za pomocą fetch(), co znacząco przyspiesza czas ładowania strony.

🏛️ Strona partii

Każda partia posiada dwa pola: identyfikator oraz repeater z członkami – czyli listę posłów przypisanych do tej partii, generowaną dynamicznie na podstawie relacji z CPT poslowie.

Dziękuje za poświęcony czas :D