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

已合併
dcovington 1 天之前 將 1 次代碼提交從 2-2-create-election-cycle-job合併至 main

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 刪除分支 2-2-create-election-cycle-job 1 天之前
The pull request has been merged as 896c109d20.
登入 才能加入這對話。
未選擇標籤
未選擇里程碑
No Assignees
1 參與者
Due Date

No due date set.

Dependencies

This pull request currently doesn't have any dependencies.

Loading…
取消
儲存
尚未有任何內容

Powered by TurnKey Linux.