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

已合并
dcovington 1 天前 将 1 次代码提交从 2-2-create-election-cycle-job合并至 main
dcovington 评论于 1 天前

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
dcovington1 天前 关闭
dcovington1 天前 删除了分支 2-2-create-election-cycle-job
该合并请求已作为 896c109d20 被合并。
登陆 并参与到对话中。
未选择标签
未选择里程碑
未指派成员
1 名参与者
到期时间

未设置到期时间。

依赖工单

此合并请求当前没有任何依赖。

正在加载...
取消
保存
这个人很懒,什么都没留下。

Powered by TurnKey Linux.