Hoppa till innehållet

Workshoprösten

Yta

Lå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

Tabell: Sökväg, Roll
SökvägRoll
rostning/kod.tsRöstkoderna, deltagar- och adminkakan. HMAC ur adminkoden; inga koder sparas.
rostning/regler.tsReglerna utan lagring: provaPrickar, prickarPerLapp, antalRostande.
rostning/lager.tsLä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.tsVem kakan hör till, adminkontroll och spärren mot att gissa koder.
rostning/actions.tsServer actions: ange röstkod, lämna, logga in som admin, antal koder, öppna/stäng, töm.
app/api/rostning/route.tsGET prickarna och mina; PUT mina prickar.
app/rosta/page.tsxRöstsidan: koden in, lapparna i ämnen.
app/rosta/Rostbord.tsxPrickarna 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.tsxAdminvyn: läget, deltagandet, prioriteringen och röstkoderna att skriva ut.

API

Tabell: Namn, Signatur, Beskrivning
NamnSignaturBeskrivning
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