Funktioner — oprettelsesflow, planlagte grupper, slideshow, aktivitetslog¶
Samlet oprettelses- og redigeringsflow (ADR-001)¶
Oprettelse sker via ÉN indgang ("Opret forløb og grupper" — samme sted grupper blev oprettet før) med trinnene: hold → fag → emne → forløb (søgbar dropdown eller opret nyt inline) → opgavebeskrivelse (unik/delt-toggle) → filer (samme toggle) → start-/slutdato (startdatoen styrer elevsynlighed) → gruppefordeling. Fordelingen kan ske med drag-drop eller den sekventielle "vælg én ad gangen"-picker (med spring-over og automatisk skift til næste gruppe). Når "unik" er valgt, angives gruppe-specifik opgavetekst/filer pr. gruppe i sidste trin. Ét klik opretter forløb, grupper, emnet og uploader filerne.
Redigering af et emne (/assignments/:id/edit) samler alt fra
oprettelsen: emne, forløb, unik/delt, fælles + pr.-gruppe-tekst, delte og
gruppe-specifikke filer, frist og startdato. Checkboxen "Anvend på alle
grupper med dette emne" viser først et preview ("Dette ændrer N grupper
i 2.F – Matematik") og logges som BULK_UPDATE i aktivitetsloggen — den
rører aldrig medlemmer eller gruppe-unikt indhold.
Lærervisningen af grupper har samme fag-/forløbs-mappestruktur som
elevvisningen: hold → fag → forløb → grupper, med mapperne lukkede som
default og "Uden fag"/"Uden forløb" nederst. De gamle separate indgange
("Opret aflevering") peger nu på det samlede flow;
/assignments/create-ruten består for bagudkompatibilitet.
Planlagte grupper (fremtidig synlighed)¶
En gruppe kan få en startdato med klokkeslæt (oprettelses- og redigeringsdialogen). Ligger tidspunktet i fremtiden:
- Elever kan ikke se gruppen — hverken i lister, detaljevisning eller
via realtids-events. Backend filtrerer i
group.service.ts(studentVisibleWhere), og socket-events for fremtidige grupper sendes kun til et personale-rum (class:<id>:stafficonfig/socket.ts). - Lærere/admins ser gruppen med et gult "Planlagt"-badge (gruppekort, gruppeliste og klassens gruppetabel) med tooltip der viser hvornår den bliver synlig.
- Når tidspunktet passerer, ser eleverne gruppen ved næste opslag/reconnect (der er ingen scheduler der pusher overgangen).
Redigeringsdialogen kan nu også ændre fag (subjectId), navn, emne, frist og dokumentkrav — før kunne kun medlemmer redigeres.
Slideshow-visning af elevopgaver¶
Dine opgaver (elev) har en visningsknap (liste/slideshow) ved siden af
fanerne. Slideshowet viser én opgave ad gangen — med fag, frist, status,
gruppe og "Gå til opgave" — og respekterer de aktive faner/søgning/filtre.
Navigation med pile, prikker/tæller og tastaturpile.
Afslut emne (LOCKED + PDF/ZIP)¶
Læreren kan afslutte et emne fra emnesiden: alle gruppernes dokumenter
låses (status LOCKED) og bliver watch-only for både elever og lærer
(OnlyOffice åbner i view-mode, og alle mutationer — aflever/fortryd/omdøb/
slet — afvises). Låsningen er fortrydelig ("Genåbn"), og dokumenterne
gendannes til deres tidligere status (kladde/afleveret). Elever kan
hverken låse eller låse op. PDF genereres server-side via OnlyOffice
Document Servers conversion API, og læreren kan hente alle emnets
dokumenter som én ZIP med PDF'er i mapper pr. gruppe. Alle handlinger
logges i aktivitetsloggen (FINISH/REOPEN/EXPORT_ZIP).
Context-aware aflevering¶
Afleveringsdialogen i arbejdsrummet udleder selv opgaven: har gruppen præcis én aktiv opgave, vælges den automatisk (vist som chip, ingen dropdown); ved flere aktive forudvælges opgaven med nærmeste deadline, og dropdownen vises som fallback.
Help-flag¶
Elever kan bede læreren om hjælp direkte fra arbejdsrummet ("Bed om
hjælp" + valgfri besked). Flaget bor på gruppen og vises som banner i
arbejdsrummet og live på lærerens dashboard (socket-event
group:help til personale-rummet) med "Markér håndteret". Kun gruppens
medlemmer kan rejse flaget, kun læreren/admin kan markere det håndteret,
og begge handlinger logges i aktivitetstidslinjen.
Aktivitetslog¶
- Endpoint:
GET /api/activity-logs(TEACHER/ADMIN/SUPER_ADMIN) med filtreclassId,groupId,userId,categoryog paginering (page/limit, max 100). - Scoping: Lærere ser kun logs knyttet til egne forløb. Admins ser organisationens forløbs-logs plus ikke-forløbs-logs fra organisationens medlemmer. SUPER_ADMIN uden organisation ser alt.
- Kilder: Klasse-, gruppe- og opgave-mutationer skriver til
ActivityLogvialogging.service.ts(log()er fire-and-forget — en fejlet audit-skrivning vælter aldrig selve operationen). - UI: Menupunktet Aktivitet (
/activity) viser tidslinjen med filtre og paginering. Admins ser desuden en brugers aktivitet på/admin/users/:userId(erstatter den gamle mock-visning).
Build-ID under logoet¶
Frontend viser branch @ commit under logoet i topbaren, så man altid kan
se hvilken deploy man kigger på. Værdierne bages ind ved image-build via
VITE_BUILD_BRANCH/VITE_BUILD_COMMIT (sættes af CI i compose.ci.yml
fra CI_COMMIT_REF_NAME/CI_COMMIT_SHORT_SHA). Lokale dev-builds viser
ingenting.