Workshoprösten
YtaLåter workshopens deltagare prioritera önskemålen med tre prickar var, och ger admin den samlade bilden.
källa: apps/projekt/src/rostninguppdaterad:
Ansvar
- Dela ut röstkoder: en per deltagare, framräknad ur adminkoden. Koderna sparas ingenstans och kan alltid visas igen för admin.
- Ta emot prickar: högst tre per kod, bara på önskemålen, gärna flera på samma lapp, och flyttbara tills admin stänger röstningen. Servern prövar reglerna själv.
- Visa prickarna för alla, anonymt – bara antal per lapp, aldrig vems.
- Visa den samlade prioriteringen – per lapp, ämne och kluster – och deltagandet, bara för den som angett adminkoden.
- Ligga utanför demospärren utan att visa något som inte är publikt: personas blir roller och förnamn tas bort.
Filer
| Sökväg | Roll |
|---|---|
| rostning/kod.ts | Röstkoderna, deltagar- och adminkakan. HMAC ur adminkoden; inga koder sparas. |
| rostning/regler.ts | Reglerna utan lagring: provaPrickar, prickarPerLapp, antalRostande. |
| rostning/lager.ts | Läget i en JSON-fil (ROSTNING_FIL). Skrivningarna köas och byter fil atomärt. |
| rostning/lappar.ts | Önskemålen i publik form, med stabila id:n. Hämtas ur workshopsidans data. |
| rostning/server.ts | Vem kakan hör till, adminkontroll och spärren mot att gissa koder. |
| rostning/actions.ts | Server actions: ange röstkod, lämna, logga in som admin, antal koder, öppna/stäng, töm. |
| app/api/rostning/route.ts | GET prickarna och mina; PUT mina prickar. |
| app/rosta/page.tsx | Röstsidan: koden in, lapparna i ämnen. |
| app/rosta/Rostbord.tsx | Prickarna på lapparna, + och −, och omhämtning var femte sekund. Knapparna står alltid kvar, aria-disabled när de inte gör något, så att fokus inte tappas. |
| app/rosta/admin/page.tsx | Adminvyn: läget, deltagandet, prioriteringen och röstkoderna att skriva ut. |
API
| Namn | Signatur | Beskrivning |
|---|---|---|
| GET /api/rostning | () => { igang, oppen, prickarPerDeltagare, prickar: Record<lappId, number>, mina: lappId[] | null } | Prickarna per lapp för alla. mina är deltagarens egna, eller null utan röstkod. |
| PUT /api/rostning | ({ prickar: lappId[] }) => samma som GET | { fel } | Byter deltagarens prickar. 401 utan röstkod, 409 när röstningen är stängd, 400 vid fler än tre eller okända lappar. |
Kontrakt
- ROSTNING_ADMIN_KOD slår på röstningen. Osatt: sidan säger att röstningen inte är igång och adminvyn kan inte låsas upp. Byts koden byts alla röstkoder.
- Prickarna sparas i ROSTNING_FIL, standard data/rostning.json. I containern är /app/data volymen rostning, så att prickarna överlever en omdeploy.
- En lapps id är tavla, färg och början av texten. Rättas texten på workshopsidan byts id:t, och prickar på det gamla räknas inte längre.
- Fler röstkoder behåller de gamla. Färre gör att de sista slutar gälla; deras prickar ligger kvar i filen men räknas inte.
- Tio felaktiga koder från samma adress på tio minuter spärrar den adressen i tio minuter. Spärren ligger i minnet och nollställs vid omstart.
Beroenden och beslut
Beslut: ADR-028, ADR-012
Levererar: /rosta, /rosta/admin, /api/rostning, röstkoder ur adminkoden, tre prickar per deltagare, samlad prioritering för admin
Kvarstår
- Ingen export. Admin läser prioriteringen i vyn eller skriver ut den.
- En process, en fil. Skalas containern till flera repliker måste lagringen flyttas.
- Volymen måste finnas i Dokploy innan prickarna överlever en omdeploy.
15 delar i projektportalen · gemensamma i devportalen: ai-adapter, anthropic, bygge, designsystem, dokploy, dokumentation, gemensamt, tokens, ui