Att göra-listan
YtaSamlar allt som ska göras i projektet, från mötena och det som kommer upp mellan dem, så att teamet ser vem som gör vad och vad varje möte ledde till – och kan hålla listan aktuell själv.
källa: apps/projekt/src/app/(projekt)/att-gorauppdaterad:
Ansvar
- Visa alla uppgifter på /att-gora som en lista per läge – att göra, pågår, inte avstämt, klart – med en rad per uppgift som fälls ut med ett klick, och antalet per läge och per ansvarig överst.
- Koppla varje uppgift till mötet där den kom upp, och visa mötets uppgifter på mötets sida med länk till platsen i listan.
- Ge varje uppgift ett fast ankare, /att-gora#<id>. En uppgift tas aldrig bort, den blir klar.
- Låta projektgruppen, inloggad med egna konton, lägga till uppgifter, ändra dem och byta läge på sidan (ADR-036, ADR-039), och en agent göra detsamma med API:t och skrivnyckeln (planen fas 7, A1). Servern prövar varje skrivning själv och säger vem som gjorde den.
- Spara uppgifterna så att de överlever en omdeploy: en SQLite-fil i datavolymen, fylld med startdatan i uppgifter.ts.
- Vara öppen att läsa, med redigeringen bakom ett konto och vem som ändrade synligt bara för inloggade.
Filer
| Sökväg | Roll |
|---|---|
| app/(projekt)/att-gora/uppgifter.ts | Typerna, lägena, LOPANDE, uppgiftHref och startuppgifter – startdatan som läggs in i databasen när den saknas. Med tester på id, möten, länkar, spärren och namn. |
| attgora/regler.ts | provaUppgift (zod, strikt) och reglerna: möte med egen sida eller löpande och länk från roten. nyttId bildar ett läsbart id ur texten. indataUrJson och tillIndata översätter API:ts form. Ren logik med tester. |
| app/api/att-gora/route.ts | GET alla uppgifter, POST en ny. |
| app/api/att-gora/[id]/route.ts | GET, PUT och PATCH på en uppgift. Ingen DELETE. |
| attgora/databas.ts | Tabellen uppgifter i startsidans databas (databas/databas.ts, ADR-037). Fyller på startdatan med INSERT OR IGNORE första gången den läses. |
| attgora/server.ts | allaUppgifter, uppgifterFran, skapa, uppdatera, bytLage och motesval – samma prövning för varje skrivning, och en rad i ändringsloggen i samma transaktion. |
| attgora/actions.ts | Server actions: spara en uppgift, byt läge, logga ut. Varje åtgärd kontrollerar själv att ett konto som får skriva är inloggat, och skickar dess användarnamn till loggen. |
| attgora/attgora.test.ts | Reglerna och databasen mot en tillfällig fil. |
| app/(projekt)/att-gora/page.tsx | Listan: antalen överst, Ny uppgift, kontot och Konton för admin – eller Redigera listan –, en lista per läge och mötena som bidrar. |
| app/(projekt)/att-gora/Uppgiftsrad.tsx | Uppgiftslista på Radlista: kolumnerna uppgift, ansvarig och mötet – eller läget på mötets sida. Ett klick fäller ut hela texten, noten, länkarna och ändringarna, och för den inloggade vem som ändrade, läget att byta och Ändra uppgiften. |
| app/(projekt)/att-gora/Uppgiftsformular.tsx | Formuläret för en ny eller ändrad uppgift. Klient bara för att visa serverns fel – per fält, intill fältet – utan att tappa det som skrivits. |
| formular/fel.ts | Fel: ett fel kopplat till fältet det gäller. Regler och actions svarar med det; API:t med texterna (`fel: string[]`). |
| formular/Formdelar.tsx | Formulärens gemensamma delar enligt WCAG 2.2 AA: fältklassen (ram 3:1, basens fokusoutline), Kravrad, Etikett med hjälpen utanför, Faltfel och beskrivs, Felsammanfattning som tar fokus och länkar till fälten, Sparaknapp med aria-disabled medan den skickar, och Sparad – fokus till den sparade raden och ett besked, efter ?sparad=. |
| app/(projekt)/att-gora/redigera/page.tsx | Den gamla vägen in. Leder till /konto och tillbaka till listan, så att utskickade länkar fungerar. |
| app/(projekt)/att-gora/ny/page.tsx | Lägg till en uppgift. |
| app/(projekt)/att-gora/[id]/andra/page.tsx | Ändra en uppgift. Id:t visas men ändras inte. |
| app/(projekt)/_delar/Radlista.tsx | Listan med rader som fälls ut, i en panel med ett band för kolumnerna. Delas med planen för start.sundsvall.dev. |
| app/(projekt)/_delar/OppnaVidAnkare.tsx | Öppnar raden som /att-gora#<id> eller /material/plan#<id> pekar på. |
| app/(projekt)/handelser/[id]/page.tsx | Standardsidan för ett möte visar Att göra från mötet när mötet har uppgifter. |
| app/(projekt)/handelser/2026-10-14-taktiska-arbetsgruppen/page.tsx | Det första mötet som skrevs in med uppgifter till listan. |
API
| Namn | Signatur | Beskrivning |
|---|---|---|
| GET /api/att-gora | → 200 { uppgifter: Uppgift[] } | Alla uppgifter. Öppet, som listan. |
| POST /api/att-gora | Authorization: Bearer <STATUS_SKRIVNYCKEL>, body: { vad, fran, lage, ansvarig?, not?, lank? } → 201 { uppgift, url } | 400 { fel: string[] } | Lägger till en uppgift. Id:t ges ur texten. |
| GET /api/att-gora/:id | → 200 { uppgift } | 404 | En uppgift. Öppet. |
| PUT /api/att-gora/:id | Bearer, body: { vad, fran, lage, ansvarig?, not?, lank? } → 200 { uppgift, url } | 400 | 404 | Byter allt utom id:t. |
| PATCH /api/att-gora/:id | Bearer, body: delar av samma → 200 { uppgift, url } | 400 | 404 | Byter bara de fält som skickas, till exempel { "lage": "klart" }. Tom sträng tar bort ansvarig eller not; lank: null tar bort länken. |
Kontrakt
| Fält | Typ | Krav |
|---|---|---|
| id | string | Fast ankare i gemener med bindestreck. Ändras aldrig. |
| vad | string | Uppgiften, som mötet formulerade den. |
| ansvarig | string? | Förnamn. Saknas när mötet inte utsåg någon – då syns det i gult. |
| fran | string | Händelsens id i tidslinjen – mötet ska ha en egen sida – eller "lopande" för det som kom upp mellan mötena. |
| lage | "att-gora" | "pagar" | "inte-avstamt" | "klart" | Inte avstämt betyder att ingen vet läget; det väntar på teamet och är gult. |
| not | string? | Det som behöver sägas om läget eller vägen dit. |
| lank | { text, href }? | Där resultatet går att se, med hela adressen från roten. |
| skapad, andrad | string | ISO-tid. Sätts av servern, bara i databasen. |
- En ny uppgift eller ett ändrat läge görs på /att-gora, inloggad med ett konto, eller med API:t och skrivnyckeln. Texten i vad ändras helst inte; det som har hänt står i not. En agent visar först exakt vad den skickar och väntar på ett ja.
- Ett nytt möte med uppgifter kan också committas: händelsen i tidslinjen med en sida, och uppgifterna i uppgifter.ts med mötets id i fran. De läggs in i databasen vid nästa start.
- En uppgift som redan finns i databasen ändras på sidan. En ändring i uppgifter.ts får ingen verkan på den.
Beroenden och beslut
- Projektets yta
- Statusrapporterna
- Ändringsloggen
- Konton för projektgruppen
- ui (gemensam, i devportalen)
- tokens (gemensam, i devportalen)
Beslut: ADR-036, ADR-039, ADR-037, ADR-031, ADR-012
Levererar: /att-gora, /att-gora/ny, /att-gora/<id>/andra, /api/att-gora, attgora/, Att göra från mötet på mötenas sidor, Att göra i huvudmenyn
Kvarstår
- API:t skriver med skrivnyckeln, inte med ett konto, så ändringsloggen säger inte vem – som för funktionerna.
- Ingen tavla med kolumner och inga datum för när en uppgift ska vara klar.
- Ansvarig är ett förnamn i texten, inte ett konto. Kontona är en mellanlösning tills SAML-sessionen i fas 4.
15 delar i projektportalen · gemensamma i devportalen: ai-adapter, anthropic, bygge, designsystem, dokploy, dokumentation, gemensamt, tokens, ui