feat(14-01): add phase_dependencies table to schema

- Add phase_dependencies table mirroring task_dependencies pattern
- Add phaseId and dependsOnPhaseId FK columns with cascade delete
- Add phasesRelations with dependsOn and dependents many relations
- Add phaseDependenciesRelations with phase and dependsOnPhase one relations
- Export PhaseDependency and NewPhaseDependency types
This commit is contained in:
Lukas May
2026-02-02 13:32:19 +01:00
parent 7146c8f823
commit a55d08fffe

View File

@@ -60,11 +60,46 @@ export const phasesRelations = relations(phases, ({ one, many }) => ({
references: [initiatives.id],
}),
plans: many(plans),
// Dependencies: phases this phase depends on
dependsOn: many(phaseDependencies, { relationName: 'dependentPhase' }),
// Dependents: phases that depend on this phase
dependents: many(phaseDependencies, { relationName: 'dependencyPhase' }),
}));
export type Phase = InferSelectModel<typeof phases>;
export type NewPhase = InferInsertModel<typeof phases>;
// ============================================================================
// PHASE DEPENDENCIES
// ============================================================================
export const phaseDependencies = sqliteTable('phase_dependencies', {
id: text('id').primaryKey(),
phaseId: text('phase_id')
.notNull()
.references(() => phases.id, { onDelete: 'cascade' }),
dependsOnPhaseId: text('depends_on_phase_id')
.notNull()
.references(() => phases.id, { onDelete: 'cascade' }),
createdAt: integer('created_at', { mode: 'timestamp' }).notNull(),
});
export const phaseDependenciesRelations = relations(phaseDependencies, ({ one }) => ({
phase: one(phases, {
fields: [phaseDependencies.phaseId],
references: [phases.id],
relationName: 'dependentPhase',
}),
dependsOnPhase: one(phases, {
fields: [phaseDependencies.dependsOnPhaseId],
references: [phases.id],
relationName: 'dependencyPhase',
}),
}));
export type PhaseDependency = InferSelectModel<typeof phaseDependencies>;
export type NewPhaseDependency = InferInsertModel<typeof phaseDependencies>;
// ============================================================================
// PLANS
// ============================================================================