docs: establish project documentation baseline
This commit is contained in:
108
docs/features/002-task-creation.md
Normal file
108
docs/features/002-task-creation.md
Normal file
@ -0,0 +1,108 @@
|
||||
# Feature 2 – Skapa uppgifter
|
||||
|
||||
## Status
|
||||
|
||||
Färdig och mergad till `main`.
|
||||
|
||||
## Bakgrund
|
||||
|
||||
Efter införandet av aktiv användare behövde HemHub en första gemensam
|
||||
uppgiftsmodell och en enkel bräda för att skapa och visa uppgifter.
|
||||
|
||||
## Mål
|
||||
|
||||
Låta en aktiv användare se tre statuskolumner, skapa en uppgift med titel och
|
||||
valfri beskrivning samt se den sparade uppgiften efter omladdning.
|
||||
|
||||
## Omfattning
|
||||
|
||||
- persistent uppgiftsmodell och Flyway-migrering;
|
||||
- API för att skapa och lista uppgifter;
|
||||
- bräda med Väntande, Pågående och Klart;
|
||||
- modal för att skapa uppgifter;
|
||||
- laddnings-, validerings- och felhantering;
|
||||
- automatiserade backend- och frontendtester.
|
||||
|
||||
## Avgränsningar
|
||||
|
||||
Ingen ändring av status, drag-and-drop, tilldelning, användarrelation, poäng,
|
||||
deadline, återkommande uppgift, redigering, radering, sökning, filtrering eller
|
||||
paginering infördes.
|
||||
|
||||
## Beslut
|
||||
|
||||
Alla användare ser samma uppgifter; uppgiftsmodellen har ingen relation till en
|
||||
användare. Backend väljer alltid status `WAITING` vid skapande. Listningen
|
||||
sorteras i backend efter `createdAt ASC, id ASC`, och frontend bevarar den
|
||||
ordningen.
|
||||
|
||||
## Implementerad lösning
|
||||
|
||||
JPA-entiteten `Task` innehåller UUID, titel, valfri beskrivning, status och
|
||||
skapandetid. Backend genererar UUID och `createdAt` med en UTC-klocka.
|
||||
|
||||
Frontend visar uppgiftsbrädan när ett giltigt aktivt användarval finns. Uppgifter
|
||||
hämtas vid montering, grupperas efter status och visas med endast titel och
|
||||
eventuell beskrivning. Tomma kolumner saknar tomlägestext.
|
||||
|
||||
## API-förändringar
|
||||
|
||||
- `GET /api/tasks` returnerar samtliga uppgifter, äldst först och med UUID som
|
||||
sekundär sorteringsnyckel.
|
||||
- `POST /api/tasks` skapar en uppgift och returnerar `201 Created`.
|
||||
|
||||
Titel trimmas, är obligatorisk och får omfatta högst 100 Unicode-kodpunkter.
|
||||
Beskrivning trimmas, får omfatta högst 500 Unicode-kodpunkter och lagras som
|
||||
`null` om den är tom. Ogiltiga anrop ger `400` med felkoden `INVALID_TASK`.
|
||||
|
||||
## Databasförändringar
|
||||
|
||||
Flyway-migreringen `V2__create_tasks.sql` skapade tabellen `task`:
|
||||
|
||||
- `id UUID PRIMARY KEY`;
|
||||
- `title VARCHAR(100) NOT NULL`;
|
||||
- `description VARCHAR(500)`;
|
||||
- `status VARCHAR(20) NOT NULL`;
|
||||
- `created_at TIMESTAMP WITH TIME ZONE NOT NULL`.
|
||||
|
||||
Status lagras som text genom `@Enumerated(EnumType.STRING)`. Databasen har ingen
|
||||
check constraint för enumvärden.
|
||||
|
||||
## Frontendförändringar
|
||||
|
||||
Feature 1:s tillfälliga aktiva vy ersattes med uppgiftsbrädan. Sidhuvudet visar
|
||||
aktiv användares namn, Logga ut och Ny uppgift.
|
||||
|
||||
Skapandemodalen innehåller titel och valfri beskrivning. Titelfältet får fokus
|
||||
när modalen öppnas. När inget submit-anrop pågår kan den stängas med kryss,
|
||||
Escape eller klick på bakgrunden. Normal stängning avmonterar komponenten och
|
||||
nollställer därmed formuläret.
|
||||
|
||||
Vid submit gör frontend samma grundläggande längdkontroller, skickar trimmade
|
||||
värden och blockerar uppenbara dubbelsubmit. Vid fel stannar modalen öppen med
|
||||
bevarad inmatning. Vid framgång läggs API-svaret sist i den befintliga listan,
|
||||
vilket placerar den nya `WAITING`-uppgiften längst ned i Väntande utan att
|
||||
sortera om backendens ordning.
|
||||
|
||||
## Tester och verifiering
|
||||
|
||||
Backendens integrationstester verifierar skapande, `WAITING`, trimning, tom
|
||||
beskrivning som `null`, längdvalidering samt sorteringen `createdAt ASC, id ASC`.
|
||||
|
||||
Frontendtesterna verifierar bräda och statusgruppering, tomma kolumner,
|
||||
modalöppning och fokus, skapande, ordning efter skapande, bevarad formulärdata
|
||||
vid API-fel samt utloggning. Parametriserade testfall verifierar också stängning
|
||||
med kryss, Escape och bakgrundsklick samt att formuläret är rensat när modalen
|
||||
öppnas igen.
|
||||
|
||||
## Kända begränsningar
|
||||
|
||||
Statusvärden utöver `WAITING` kan visas om de redan finns i databasen, men inget
|
||||
nuvarande API eller gränssnitt kan flytta en uppgift mellan kolumnerna. Det
|
||||
finns ingen koppling mellan uppgifter och skapande eller aktiv användare.
|
||||
Modalen har ingen fokusfälla eller explicit fokusåterställning.
|
||||
|
||||
## Relaterade commits
|
||||
|
||||
- `3f152eecccdd88f840066543bf9321b81b4cead8` – `feat: add task creation board`
|
||||
- `2f7b99fb21c57c2e9c5f019a2b5073458e41c939` – merge till `main`
|
||||
Reference in New Issue
Block a user