Użytkownik wchodzi na stronę /auth, gdzie wyświetla się okno logowania lub rejestracji (komponent AuthPage). Użytkownik podaje dane wymagane do założenia konta:
# Register Input
displayName: string;
email: string;
password: string;
Po kliknięciu przycisku rejestracji wywoływana jest mutacja w hooku useRegister, która wykorzystuje metodę createUserWithEmailAndPassword z Firebase. Ta część kodu obsługuje dane wrażliwe, takie jak adres email oraz hasło.
Po pomyślnym wykonaniu mutacji, uruchamiana jest kolejna mutacja, w hooku useSaveUserToFirestore, która dodaje pozostałe dane użytkownika do bazy danych. Dane te mają strukturę Person:
# Person Type
displayName: string;
email: string;
createdAt: string;
userId: string;
coupleId?: string;
partnerId?: string;
//Tutaj mogą znajdować się także dane takie jak np:
//Hogwart House, zaimki albo inne funny dane.
Wartość userId otrzymuje uid użytkownika z Firebase. Pola coupleId oraz partnerId pozostają puste. Dane są zapisywane w kolekcji users jako dokument o nazwie userId.
Użytkownik bez pary wchodzi na dashboard na stronę /dashboard, gdzie znajduje się przycisk “Zaproś użytkownika do pary” oraz pole tekstowe, gdzie należy wpisać uid drugiego użytkownika. Po kliknięciu przycisku wywoływana jest mutacja w hooku useSendPairRequest, która dodaje dokument do kolekcji pairRequests, zawierający następujące dane:
from: string;
to: string;
Wartość from to uid użytkownika, wysyłającego zaproszenie. Pole to zawiera wartość pola tekstowego, do którego wpisana została wartość uid drugiego użytkownika.
Hook usePairRequests zwraca wszystkie zaproszenia, które otrzymał użytkownik. Baza danych wykonuje select szukając czy na dane userId zostało wysłane zaproszenie, które posiada pole status o wartości pending. Struktura danych wygląda w ten sposób:
#parRequests
createdAt: string;
from: string;
to: string;
status: "accepted" | "pending" | "rejected";
Nazwa dokumentu jest najważniejsza, jest to string który potrzebny jest w procesie odpowiedzi na zaproszenie. W przypadku kilku zaproszeń, zwrócona zostanie tablica typu string.