feat(14-05): add PhaseDispatchManager to tRPC context

- Import PhaseDispatchManager type from dispatch module
- Add optional phaseDispatchManager to TRPCContext interface
- Add phaseDispatchManager to CreateContextOptions
- Wire phaseDispatchManager through createContext function

Includes blocking fix: added 'blocked' status to phases schema enum
This commit is contained in:
Lukas May
2026-02-02 13:39:47 +01:00
parent 772fbe6fd1
commit 28622cbd04
3 changed files with 7 additions and 3 deletions

View File

@@ -47,7 +47,7 @@ export const phases = sqliteTable('phases', {
number: integer('number').notNull(), number: integer('number').notNull(),
name: text('name').notNull(), name: text('name').notNull(),
description: text('description'), description: text('description'),
status: text('status', { enum: ['pending', 'in_progress', 'completed'] }) status: text('status', { enum: ['pending', 'in_progress', 'completed', 'blocked'] })
.notNull() .notNull()
.default('pending'), .default('pending'),
createdAt: integer('created_at', { mode: 'timestamp' }).notNull(), createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),

View File

@@ -12,7 +12,7 @@ import type { MessageRepository } from '../db/repositories/message-repository.js
import type { InitiativeRepository } from '../db/repositories/initiative-repository.js'; import type { InitiativeRepository } from '../db/repositories/initiative-repository.js';
import type { PhaseRepository } from '../db/repositories/phase-repository.js'; import type { PhaseRepository } from '../db/repositories/phase-repository.js';
import type { PlanRepository } from '../db/repositories/plan-repository.js'; import type { PlanRepository } from '../db/repositories/plan-repository.js';
import type { DispatchManager } from '../dispatch/types.js'; import type { DispatchManager, PhaseDispatchManager } from '../dispatch/types.js';
import type { CoordinationManager } from '../coordination/types.js'; import type { CoordinationManager } from '../coordination/types.js';
// Re-export for convenience // Re-export for convenience
@@ -44,6 +44,8 @@ export interface TRPCContext {
phaseRepository?: PhaseRepository; phaseRepository?: PhaseRepository;
/** Plan repository for plan CRUD operations (optional until server wiring complete) */ /** Plan repository for plan CRUD operations (optional until server wiring complete) */
planRepository?: PlanRepository; planRepository?: PlanRepository;
/** Phase dispatch manager for phase queue operations (optional until server wiring complete) */
phaseDispatchManager?: PhaseDispatchManager;
} }
/** /**
@@ -61,6 +63,7 @@ export interface CreateContextOptions {
initiativeRepository?: InitiativeRepository; initiativeRepository?: InitiativeRepository;
phaseRepository?: PhaseRepository; phaseRepository?: PhaseRepository;
planRepository?: PlanRepository; planRepository?: PlanRepository;
phaseDispatchManager?: PhaseDispatchManager;
} }
/** /**
@@ -82,5 +85,6 @@ export function createContext(options: CreateContextOptions): TRPCContext {
initiativeRepository: options.initiativeRepository, initiativeRepository: options.initiativeRepository,
phaseRepository: options.phaseRepository, phaseRepository: options.phaseRepository,
planRepository: options.planRepository, planRepository: options.planRepository,
phaseDispatchManager: options.phaseDispatchManager,
}; };
} }

View File

@@ -818,7 +818,7 @@ export const appRouter = router({
id: z.string().min(1), id: z.string().min(1),
name: z.string().min(1).optional(), name: z.string().min(1).optional(),
description: z.string().optional(), description: z.string().optional(),
status: z.enum(['pending', 'in_progress', 'completed']).optional(), status: z.enum(['pending', 'in_progress', 'completed', 'blocked']).optional(),
})) }))
.mutation(async ({ ctx, input }) => { .mutation(async ({ ctx, input }) => {
const repo = requirePhaseRepository(ctx); const repo = requirePhaseRepository(ctx);