docs: establish project documentation baseline
This commit is contained in:
99
docs/features/001-user-selection.md
Normal file
99
docs/features/001-user-selection.md
Normal file
@ -0,0 +1,99 @@
|
||||
# Feature 1 – Användarval
|
||||
|
||||
## Status
|
||||
|
||||
Färdig och mergad till `main`.
|
||||
|
||||
## Bakgrund
|
||||
|
||||
HemHub behövde centralt lagrade användare och ett enkelt sätt att välja vem som
|
||||
använder applikationen, utan att införa autentisering.
|
||||
|
||||
## Mål
|
||||
|
||||
Göra det möjligt att lista och skapa användare, välja en aktiv användare,
|
||||
återanvända valet i samma browser och lämna den aktiva vyn.
|
||||
|
||||
## Omfattning
|
||||
|
||||
- persistens, API och validering för användare;
|
||||
- startflöden för tom och befintlig användarlista;
|
||||
- lokalt lagrad aktiv användare;
|
||||
- användarval, skapande och felhantering;
|
||||
- automatiserade backend- och frontendtester.
|
||||
|
||||
## Avgränsningar
|
||||
|
||||
Ingen autentisering, lösenord, roll, behörighet, e-post, avatar,
|
||||
hushållsrelation, redigering eller radering infördes.
|
||||
|
||||
## Beslut
|
||||
|
||||
Backend är slutlig auktoritet för namnvalidering. Namn normaliseras separat för
|
||||
skiftlägesokänslig unikhet. Frontend lagrar endast UUID under
|
||||
`hemhub.activeUserId` och verifierar det mot den hämtade användarlistan.
|
||||
|
||||
## Implementerad lösning
|
||||
|
||||
Vid appstart hämtar frontend alltid användarna. En tom lista leder direkt till
|
||||
formuläret Skapa användare. Om användare finns men inget giltigt lokalt val
|
||||
finns visas Vem är du?.
|
||||
|
||||
Val eller lyckat skapande sparar användarens id och aktiverar användaren. Ett
|
||||
ogiltigt lagrat id rensas utan tekniskt fel. Feature 1:s tillfälliga startsida
|
||||
och kontrollen Byt användare ersattes i Feature 2 av uppgiftsbrädan och
|
||||
kontrollen Logga ut; lagringsmekanismen är oförändrad.
|
||||
|
||||
## API-förändringar
|
||||
|
||||
- `GET /api/users` returnerar alla användare.
|
||||
- `POST /api/users` skapar en användare och returnerar `201 Created`.
|
||||
|
||||
API-responsen innehåller `id`, `name` och `createdAt`. `normalizedName` exponeras
|
||||
inte.
|
||||
|
||||
Tomt namn eller namn längre än 50 Unicode-kodpunkter ger `400` med
|
||||
`INVALID_USER_NAME`. Ett dubblettnamn utan hänsyn till stora och små bokstäver
|
||||
ger `409` med `USER_NAME_ALREADY_EXISTS`.
|
||||
|
||||
## Databasförändringar
|
||||
|
||||
Flyway-migreringen `V1__create_users.sql` skapade tabellen `app_user`:
|
||||
|
||||
- UUID som primärnyckel;
|
||||
- `name VARCHAR(50)`;
|
||||
- unikt `normalized_name VARCHAR(150)`;
|
||||
- `created_at TIMESTAMP WITH TIME ZONE`.
|
||||
|
||||
Lokalt används filbaserad H2 och i tester H2 in-memory. Backend genererar UUID
|
||||
och `createdAt` med en UTC-klocka.
|
||||
|
||||
## Frontendförändringar
|
||||
|
||||
Frontend fick laddnings-, fel-, användarvals- och användarskapandevyer.
|
||||
Skapandeformuläret trimmar namnet, gör en enkel längdkontroll, blockerar
|
||||
dubbelsubmit och behåller inmatningen vid fel.
|
||||
|
||||
Nuvarande utloggning tar bort `hemhub.activeUserId`, rensar aktiv användare och
|
||||
visar Vem är du? även om endast en användare finns.
|
||||
|
||||
## Tester och verifiering
|
||||
|
||||
Backendens integrationstester verifierar tom lista, skapande och listning,
|
||||
trimning, ogiltiga namn, skiftlägesokänsliga dubbletter och alfabetisk
|
||||
sortering.
|
||||
|
||||
Frontendtesterna verifierar tom lista, användarval, automatisk aktivering efter
|
||||
skapande, bevarad inmatning vid fel, hämtfel med återförsök, ogiltigt lagrat id
|
||||
och utloggning. API-anropen mockas.
|
||||
|
||||
## Kända begränsningar
|
||||
|
||||
Aktiv användare är ett lokalt gränssnittsval, inte säker autentisering. Valet
|
||||
synkroniseras inte mellan browsers eller enheter. Användare kan inte redigeras
|
||||
eller raderas.
|
||||
|
||||
## Relaterade commits
|
||||
|
||||
- `1ec7a729085d456d3185a1c74d02f99f40de0e8d` – `feat: add user selection flow`
|
||||
- `050f248857a01db2dc236a0ca35982fd70dab3d6` – merge till `main`
|
||||
Reference in New Issue
Block a user