import type { Knex } from 'knex'; export async function up(knex: Knex): Promise { await knex.schema.createTable('pantry_items', (table) => { table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid()')); table.uuid('user_id').notNullable().references('id').inTable('users').onDelete('CASCADE'); table.string('item_name', 255).notNullable(); table.string('item_name_lower', 255).notNullable(); table.integer('quantity').notNullable().checkPositive(); table.timestamp('last_modified', { useTz: true }).defaultTo(knex.fn.now()); table.timestamp('created_at', { useTz: true }).defaultTo(knex.fn.now()); table.timestamp('updated_at', { useTz: true }).defaultTo(knex.fn.now()); }); await knex.raw(`CREATE UNIQUE INDEX idx_pantry_user_item ON pantry_items (user_id, item_name_lower)`); await knex.raw(`CREATE INDEX idx_pantry_user_id ON pantry_items (user_id)`); await knex.raw(`CREATE INDEX idx_pantry_last_modified ON pantry_items (user_id, last_modified)`); } export async function down(knex: Knex): Promise { await knex.schema.dropTableIfExists('pantry_items'); }