#19 feat(Epic 2): implement municipality-to-cycle kanban and election-cycle job creation

Zusammengeführt
dcovington hat 1 Commits von 2-2-create-election-cycle-job nach main vor 1 Tag zusammengeführt
dcovington hat vor 1 Tag kommentiert

Story 2.1 - Municipality-to-Cycle Kanban Entry Point

  • ElectionCycleKanbanController (GET /api/election-cycles/kanban) with ClientServicesAccess RBAC policy
  • ElectionCycleKanbanReadModel aggregates active jobs and unassigned municipalities into multi-lane board; legacy Access tables read-only
  • Frontend: electionCycleKanbanView with keyboard-navigable lanes, card windowing, sticky lane headers, and Unassigned lane always present
  • Frontend: electionCycleKanbanContracts with fetch, focus management, and visibility utilities
  • InMemoryElectionCycleJobRepository with seed data for kanban display
  • 5 integration tests covering grouping, unassigned municipalities, inactive exclusion, RBAC enforcement, and legacy read-only invariant

Story 2.2 - Create Election-Cycle Job

  • POST /api/election-cycles/jobs accepts existing cycle reference or new cycle name; persists with “In Setup” status, actor identity, and server timestamp in extension-layer storage only
  • ElectionCycleJobsController with validation (rejects missing JCode or cycle selection), audit emission via shared IAuditService, and idempotent creates for duplicate jCode+cycleId pairs
  • Frontend: CreateJobModal with existing-cycle selector, new-cycle-name input, inline validation errors, and kanban reload on success
  • “Create cycle job” button wired into Unassigned lane cards; card relocates to selected cycle lane after creation 10 backend integration tests covering happy path, new cycle generation, missing cycle/JCode validation, unauthenticated/wrong-role rejection, audit event emission, legacy read-only invariant, idempotency, and 404
Story 2.1 - Municipality-to-Cycle Kanban Entry Point - ElectionCycleKanbanController (GET /api/election-cycles/kanban) with ClientServicesAccess RBAC policy - ElectionCycleKanbanReadModel aggregates active jobs and unassigned municipalities into multi-lane board; legacy Access tables read-only - Frontend: electionCycleKanbanView with keyboard-navigable lanes, card windowing, sticky lane headers, and Unassigned lane always present - Frontend: electionCycleKanbanContracts with fetch, focus management, and visibility utilities - InMemoryElectionCycleJobRepository with seed data for kanban display - 5 integration tests covering grouping, unassigned municipalities, inactive exclusion, RBAC enforcement, and legacy read-only invariant Story 2.2 - Create Election-Cycle Job - POST /api/election-cycles/jobs accepts existing cycle reference or new cycle name; persists with "In Setup" status, actor identity, and server timestamp in extension-layer storage only - ElectionCycleJobsController with validation (rejects missing JCode or cycle selection), audit emission via shared IAuditService, and idempotent creates for duplicate jCode+cycleId pairs - Frontend: CreateJobModal with existing-cycle selector, new-cycle-name input, inline validation errors, and kanban reload on success - "Create cycle job" button wired into Unassigned lane cards; card relocates to selected cycle lane after creation 10 backend integration tests covering happy path, new cycle generation, missing cycle/JCode validation, unauthenticated/wrong-role rejection, audit event emission, legacy read-only invariant, idempotency, and 404
dcovington hat vor 1 Tag geschlossen
dcovington löschte die Branch 2-2-create-election-cycle-job vor 1 Tag
Der Pull Request wurde als 896c109d20 zusammengeführt.
Anmelden, um an der Diskussion teilzunehmen.
Kein Label
Kein Meilenstein
Niemand zuständig
1 Beteiligte
Fällig am

Kein Fälligkeitsdatum gesetzt.

Abhängigkeiten

Dieser Pull-Request hat momentan keine Abhängigkeiten.

Laden…
Abbrechen
Speichern
Hier gibt es bis jetzt noch keinen Inhalt.

Powered by TurnKey Linux.