text: exports.up = async function(knex, Promise) {
    if (! await knex.schema.hasTable("threads")) {
      await knex.schema.createTable("threads", table => {
        table.string("id", 36).notNullable().primary();
        table.integer("status").unsigned().notNullable().index();
        table.integer("is_legacy").unsigned().notNullable();
        table.string("user_id", 20).notNullable().index();
        table.string("user_name", 128).notNullable();
        table.string("channel_id", 20).nullable().unique();
        table.dateTime("created_at").notNullable().index();
      });
    }
  
    if (! await knex.schema.hasTable("thread_messages")) {
      await knex.schema.createTable("thread_messages", table => {
        table.increments("id");
        table.string("thread_id", 36).notNullable().index().references("id").inTable("threads").onDelete("CASCADE");
        table.integer("message_type").unsigned().notNullable();
        table.string("user_id", 20).nullable();
        table.string("user_name", 128).notNullable();
        table.mediumtext("body").notNullable();
        table.integer("is_anonymous").unsigned().notNullable();
        table.string("dm_message_id", 20).nullable().unique();
        table.dateTime("created_at").notNullable().index();
      });
    }
  
    if (! await knex.schema.hasTable("blocked_users")) {
      await knex.schema.createTable("blocked_users", table => {
        table.string("user_id", 20).primary().notNullable();
        table.string("user_name", 128).notNullable();
        table.string("blocked_by", 20).nullable();
        table.dateTime("blocked_at").notNullable();
      });
    }
  
    if (! await knex.schema.hasTable("snippets")) {
      await knex.schema.createTable("snippets", table => {
        table.string("trigger", 32).primary().notNullable();
        table.text("body").notNullable();
        table.integer("is_anonymous").unsigned().notNullable();
        table.string("created_by", 20).nullable();
        table.dateTime("created_at").notNullable();
      });
    }
  };
  
  exports.down = async function(knex, Promise) {
    if (await knex.schema.hasTable("thread_messages")) {
      await knex.schema.dropTable("thread_messages");
    }
  
    if (await knex.schema.hasTable("threads")) {
      await knex.schema.dropTable("threads");
    }
  
    if (await knex.schema.hasTable("blocked_users")) {
      await knex.schema.dropTable("blocked_users");
    }
  
    if (await knex.schema.hasTable("snippets")) {
      await knex.schema.dropTable("snippets");
    }
  };
  