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ć?
- Przejdź do zakładki Profil (klikając w swój awatar i wybierając Ustawienia profilu).
- W odpowiednich sekcjach zaktualizuj swoje dane (dane osobowe, kontakt).
- 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/.
- Główny formularz (
UserProfileForm.tsx): Formularz zbudowany przy pomocy bibliotekireact-hook-formintegrujący wszystkie podsekcje edycji danych. - 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_idmające statusOczekująca(pending) lubZaległ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)
sequenceDiagram
participant Client
participant UI as PrivacySettingsModern
participant Server as deleteOwnAccount
participant DB as Cloudflare D1
participant Auth0
Client->>UI: Kliknięcie "Usuń konto" i potwierdzenie alertu
UI->>Server: Wywołanie deleteOwnAccount()
Server->>DB: Sprawdzenie płatności klienta ze statusem Oczekująca/Zaległa
alt Posiada zaległości finansowe
DB-->>Server: Zwraca tablicę zaległych płatności
Server-->>UI: { success: false, reason: 'unpaid_payments' }
UI-->>Client: Toast Error: "Musisz uregulować płatności..."
else Brak zaległości
DB-->>Server: Zwraca pustą tablicę (brak długów)
Server->>Auth0: DELETE /api/v2/users/{id}
Auth0-->>Server: 204 No Content
Server-->>UI: { success: true }
UI->>Client: Przekierowanie do /auth/logout
end
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.jsonmessages/en.json
Podczas modyfikacji komunikatów na frontendzie należy bezwzględnie aktualizować również pliki z tłumaczeniami.