Przejdź do głównej zawartości

Profil klienta

Moduł profilu klienta pozwala użytkownikom na samodzielne zarządzanie swoimi danymi osobowymi, preferencjami, a także na kontrolę nad swoimi danymi w systemie AcePark.

👤 Instrukcja dla użytkownika​

🎯 O systemie profilu​

W panelu profilu klienci mogą na bieżąco aktualizować swoje informacje, co pozwala na poprawne fakturowanie, kontakt oraz bezpieczny udział w zajęciach.

Funkcjonalności profilu klienta:

  • Podstawowe dane: Zmiana imienia, nazwiska oraz numeru telefonu.

  • Preferencje: Wybór domyślnego miasta, w którym klient odbywa zajęcia.

  • Prywatność i Zgody:

    • Przegląd i akceptacja regulaminów systemowych.
    • Możliwość wglądu w wyrażone zgody.
    • Usuwanie konta: Użytkownik ma pełne prawo do samodzielnego usunięcia swojego konta. Opcja ta znajduje się w zakładce ustawień prywatności.

    [!WARNING] Aby usunąć konto, klient nie może posiadać żadnych nieopłaconych, zaległych lub oczekujących płatności w systemie. Jeżeli takie płatności istnieją, proces usuwania konta zostanie automatycznie zablokowany, a system poprosi Cię o uregulowanie należności przed ponowną próbą.

🚀 Jak korzystać?​

  1. Przejdź do zakładki Profil (klikając w swój awatar i wybierając Ustawienia profilu).
  2. W odpowiednich sekcjach zaktualizuj swoje dane (dane osobowe, kontakt).
  3. W sekcji "Ustawienia prywatności" możesz zarządzać swoimi zgodami, przeglądać aktualne regulaminy, a także - w razie potrzeby - zainicjować proces trwałego usuwania konta.

🛠️ Dokumentacja techniczna​

Poniższa sekcja przeznaczona jest dla programistów zajmujących się utrzymaniem i rozwojem modułu profilu klienta.

Architektura i komponenty​

Interfejs profilu klienta opiera się na komponentach zlokalizowanych w katalogu components/forms/userProfile/.

  1. Główny formularz (UserProfileForm.tsx): Formularz zbudowany przy pomocy biblioteki react-hook-form integrujący wszystkie podsekcje edycji danych.
  2. Ustawienia prywatności (PrivacySettingsModern.tsx):
    • Wyświetla aktualne wersje regulaminów polityki prywatności.
    • Posiada nową sekcję Usuwanie konta zaimplementowaną z myślą o spełnieniu restrykcyjnych wymogów sklepów mobilnych (np. Apple App Store Guidelines). Zastosowano tu komponent AlertDialog (z Shadcn UI) w celu wymuszenia dwuetapowego potwierdzenia intencji ("Czy na pewno chcesz usunąć konto?").

Usuwanie konta (Logika biznesowa)​

Aplikacja wspiera pełne usunięcie konta przez użytkownika (!employee). Mechanizm jest obwarowany blokadą dla dłużników.

Server Action: deleteOwnAccount (lokalizacja: lib/actions/users.ts)

  • Walidacja przed usunięciem: Akcja sprawdza najpierw w bazie Cloudflare D1 czy w tabeli płatności nie widnieją wpisy przypisane do danego user_id mające status Oczekująca (pending) lub Zaległa (overdue).
  • Zabezpieczenie przed ucieczką dłużników: Jeśli funkcja znajdzie nieopłacone należności, odrzuca transakcję i zwraca precyzyjny błąd z flagą reason: 'unpaid_payments'.
  • Prezentacja błędu: Frontend łapie odpowiedź i w przypadku zidentyfikowania unpaid_payments, wyświetla dedykowany komunikat typu Toast z jasną instrukcją o wymogu uiszczenia opłat przed usunięciem konta.
  • Pomyślne usunięcie (Właściwa akcja Auth0): Jeśli walidacja przechodzi pomyślnie, system wykonuje żądanie wymazania profilu przez Auth0 Management API (DELETE /api/v2/users/{id}). Po udanej operacji użytkownik na frontendzie przekierowywany jest pod adres wylogowania (/auth/logout), co niszczy sesję w przeglądarce klienta.

Flow Usuwania Konta (Mermaid Diagram)​

Internacjonalizacja i Tłumaczenia (i18n)​

Wszystkie frazy tekstowe obsługujące profil klienta (w tym notyfikacje sukcesu i błędów) są w pełni zlokalizowane w systemie next-intl. Znajdują się one pod kluczem profile w plikach systemowych:

  • messages/pl.json
  • messages/en.json

Podczas modyfikacji komunikatów na frontendzie należy bezwzględnie aktualizować również pliki z tłumaczeniami.