Przejdź do głównej zawartości

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).

  1. Pobieranie miasta: System pobiera adres email zalogowanego użytkownika z sesji Auth0.
  2. Weryfikacja metadanych: Funkcja getUserCity(userEmail) pobiera preferred_city z metadanych użytkownika w Auth0.
  3. 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 city dla zapewnienia spójności i łatwości filtrowania.