import type { Knex } from 'knex'; export async function up(knex: Knex): Promise { // Create groups table await knex.schema.createTable('groups', (table) => { table.increments('id').primary(); table.string('name').notNullable(); table.integer('parent_id').references('id').inTable('groups'); table.timestamps(true, true); }); // Create tasks table await knex.schema.createTable('tasks', (table) => { table.increments('id').primary(); table.string('title').notNullable(); table.integer('group_id').references('id').inTable('groups').notNullable(); table.integer('print_count').defaultTo(0); table.timestamp('last_printed_at'); table.timestamps(true, true); }); // Create steps table await knex.schema.createTable('steps', (table) => { table.increments('id').primary(); table.string('title').notNullable(); table.text('instructions').notNullable(); table.integer('task_id').references('id').inTable('tasks').notNullable(); table.integer('order').notNullable(); table.integer('print_count').defaultTo(0); table.timestamp('last_printed_at'); table.timestamps(true, true); }); // Create images table for step images await knex.schema.createTable('images', (table) => { table.increments('id').primary(); table.integer('step_id').references('id').inTable('steps').notNullable(); table.string('original_path').notNullable(); table.string('bw_path').notNullable(); table.integer('order').notNullable(); table.timestamps(true, true); }); } export async function down(knex: Knex): Promise { await knex.schema.dropTable('images'); await knex.schema.dropTable('steps'); await knex.schema.dropTable('tasks'); await knex.schema.dropTable('groups'); }