# Aplikacja wieloosobowa — projekt

Aplikacja obsługuje dziś jedną osobę: właściciela, który wprowadza wszystkie
mecze i widzi wszystko. Ten dokument opisuje otwarcie jej na pozostałych
graczy.

## 1. Cel

Koledzy właściciela mają móc wejść na stronę, wskazać swoją drużynę FPL i sami
dodawać swoje mecze — pojedynki i duety — a potem oglądać ich przebieg. Każdy
widzi wyłącznie mecze, w których gra.

Właściciel przestaje być pośrednikiem wprowadzającym cudze mecze.

## 2. Tożsamość

**Numerem drużyny FPL identyfikuje się użytkownik i to jest cały klucz.** Nie
ma kont, haseł ani dodatkowych sekretów.

Przy pierwszym wejściu użytkownik podaje numer drużyny albo jej nazwę —
nazwę aplikacja rozstrzyga w katalogu drużyn, tak jak dziś robi to formularz
meczu. Wybrana tożsamość zostaje zapamiętana w sesji przeglądarki, aż do
wyjścia.

**Świadomie przyjęta konsekwencja:** numery drużyn są jawne na stronie FPL,
więc kto zna czyjś numer, może oglądać i dodawać jego mecze. Właściciel
zaakceptował to wprost — aplikacja służy zamkniętemu gronu znajomych i nie
udaje, że daje prywatność.

## 3. Widoczność przez udział

Mecz widzi każdy, czyja drużyna stoi po którejkolwiek ze stron. Nie liczy się,
kto go wprowadził.

To jest istotniejsze niż wygląda: gdy rywal doda Wasz wspólny pojedynek,
pojawia się on od razu u obu stron. Nikt nie musi wprowadzać tego samego meczu
dwa razy ani prosić drugiej strony o dostęp.

Zasada obejmuje właściciela tak samo jak pozostałych — on też widzi wyłącznie
mecze, w których gra.

## 4. Uprawnienia

| Kto | Może dodać | Widzi |
|---|---|---|
| Użytkownik z wybraną drużyną | pojedynek, duety — wyłącznie ze swoją drużyną po jednej ze stron | mecze, w których jego drużyna gra |
| Właściciel | wszystkie formaty, w tym trójki i 4x4 | mecze, w których gra; po podszyciu się — cudze |

Ograniczenie „wyłącznie ze swoją drużyną po jednej ze stron" jest konieczne:
bez niego dowolna osoba dopisywałaby mecze między obcymi drużynami.

Trójki i 4x4 zostają przy właścicielu, bo trójki wymagają wskazania par, a 4x4
opiera się na stałej czwórce, która jest ustawieniem właściciela.

## 5. Podszywanie się

Właściciel — po wpisaniu kodu, który dziś chroni ustawienia — może wybrać
dowolną drużynę z katalogu i oglądać aplikację jej oczami. Służy to
sprawdzeniu, jak wygląda ona u innych.

Tryb podszycia jest **widoczny na każdej stronie** i wychodzi się z niego
jednym kliknięciem. Niewidoczne podszycie byłoby pułapką: właściciel
zapomniałby, czyimi oczami patrzy, i zgłaszał błędy, których nie ma.

W trybie podszycia właściciel **nie dodaje meczów** — ogląda. Dodawanie w
cudzym imieniu zostawiałoby w bazie mecze bez jasnego autorstwa.

## 6. Adresy meczów

Adres `/fixture/{numer}` zastępuje klucz nieodgadywalny, na przykład
`/mecz/k7f3qm2x9d`. Klucz powstaje raz, przy tworzeniu meczu, i zostaje z nim
na stałe.

Powód nie jest kosmetyczny: kolejne numery pozwalają obcemu przejść po
wszystkich meczach w aplikacji i policzyć, ile ich jest. Ochrona po stronie
serwera i tak obowiązuje — klucz zdejmuje samą zachętę do zgadywania.

## 7. Strona kolejki

Przestaje być wspólna. Każdy widzi na niej mecze, w których gra.

Osoba bez wybranej tożsamości widzi zaproszenie do wskazania swojej drużyny,
a nie pustą listę.

## 8. Co się dzieje z dzisiejszymi kodami dostępu

Kod, który dziś otwiera dodawanie meczu, traci sens — dodawać może każdy, kto
wskazał swoją drużynę. Kod właściciela zostaje i chroni: ustawienia stałej
czwórki, dodawanie trójek i 4x4, podszywanie się oraz wyszukiwarkę zawodnika.

## 9. Czego ta zmiana nie obejmuje

- Kont z hasłem i odzyskiwania dostępu.
- Zaproszeń, powiadomień i jakiejkolwiek komunikacji między użytkownikami.
- Edycji i kasowania meczów — nadal nie ma ich w aplikacji.
- Tabel ligowych obejmujących osoby spoza meczów.

## 10. Ryzyka

**Aplikacja staje się realnie publiczna.** Dotąd jej treść oglądał właściciel;
teraz adres krąży po grupie. HTTPS przestaje być formalnością.

**Podszycie się jest jednym kliknięciem od zwykłego oglądania.** Stąd wymóg
stałej widoczności tego trybu i zakaz dodawania meczów w nim.

**Numer jako jedyny klucz** oznacza brak prywatności między znajomymi. Gdyby
kiedyś przestało to wystarczać, naturalnym krokiem jest dołożenie klucza
generowanego przy pierwszym wejściu — model danych tego nie blokuje.

## 11. Testowanie

Widoczność dostaje testy na wszystkie warianty: mecz z moją drużyną po mojej
stronie, po stronie rywala, mecz bez mojej drużyny, brak wybranej tożsamości.

Dodawanie dostaje testy na próbę zapisania meczu bez własnej drużyny, na próbę
dodania trójek i 4x4 bez kodu właściciela oraz na dodanie pojedynku i duetów
przez zwykłego użytkownika.

Podszycie dostaje testy na widoczność oznaczenia, na wyjście z trybu i na to,
że dodawanie meczu jest w nim niedostępne.

Adresy dostają test na to, że klucz meczu nie daje się odgadnąć z numeru, oraz
że mecz spoza moich jest niedostępny nawet ze znanym kluczem.
