Półkolonie
Kompleksowy przewodnik po module półkolonii, w tym zarządzanie sezonami, turnusami oraz automatyczne filtrowanie i personalizacja dla klientów.
🎯 Przegląd
Moduł półkolonii pozwala na organizację i sprzedaż wakacyjnych oraz zimowych zajęć dla dzieci i młodzieży. System automatycznie dostosowuje ofertę do lokalizacji klienta, zapewniając przejrzystość i wygodę zapisu.
👤 Instrukcja dla Użytkownika (Klient)
Filtrowanie według miasta
System automatycznie filtruje listę dostępnych półkolonii na podstawie Twojego preferowanego miasta, które jest ustawione w Twoim profilu.
- Jeśli jesteś z Opola, zobaczysz tylko półkolonie organizowane w Opolu.
- Jeśli jesteś z Legionowa, zobaczysz tylko ofertę z Legionowa.
- Dzięki temu nie musisz przeszukiwać całej listy w poszukiwaniu zajęć w Twojej okolicy.
Personalizacja nazewnictwa (Branding)
W zależności od miasta, system może stosować inne nazewnictwo dla zajęć:
- W większości miast zajęcia widoczne są jako "Półkolonie".
- W Legionowie oraz Lublinie zajęcia te są prezentowane jako "Zajęcia wakacyjne" lub "Zajęcia tenisowe". Wszystkie funkcjonalności (zapisy, płatności) pozostają identyczne niezależnie od nazwy.
🛠️ Dokumentacja Techniczna (Deweloper)
Logika filtrowania miast
Filtrowanie odbywa się na poziomie serwera w komponencie strony oferty (CampOfferPage).
- Pobieranie miasta: System pobiera adres email zalogowanego użytkownika z sesji Auth0.
- Weryfikacja metadanych: Funkcja
getUserCity(userEmail)pobierapreferred_cityz metadanych użytkownika w Auth0. - Filtrowanie bazy danych: Akcja
getCampSeasons({ city: userCity })przesyła parametr miasta do zapytania SQL, ograniczając wyniki do wybranej lokalizacji.
// Przykład implementacji w CampOfferPage
const userCity = await getUserCity(userEmail);
const seasons = await getCampSeasons(
!isAdmin && userCity ? { city: userCity } : undefined
);
Zabezpieczenie dostępu bezpośredniego
Nawet jeśli użytkownik posiada bezpośredni link do turnusu w innym mieście, system weryfikuje uprawnienia na stronie zapisu (CampRegisterPage). Jeśli miasto turnusu nie zgadza się z preferowanym miastem klienta (i użytkownik nie jest administratorem), następuje przekierowanie do ogólnej oferty.
Transformacja tekstu
Za personalizację nazw odpowiadają funkcje transformText oraz transformObject w lib/utils/user-city.ts.
- isSpecialCity(city): Sprawdza, czy miasto to Legionowo lub Lublin.
- transformText(text, city): Zamienia frazy "półkolonie" na "zajęcia wakacyjne" i "Półkolonie Tenisowe" na "Zajęcia tenisowe".
Modele danych
- camp_season: Tabela przechowująca sezony (np. "Lato 2024"). Zawiera pole
city. - camp_term: Tabela przechowująca konkretne turnusy w ramach sezonu. Również zawiera pole
citydla zapewnienia spójności i łatwości filtrowania.