vk_transfers.cjs 1.04 KB
const tableName = 'vk_transfers'

function buildTable(t) {
  t.string('id', 64).primary()
  t.string('task_id', 64).notNullable()
  t.string('from_agent_id', 64).notNullable()
  t.string('to_agent_id', 64).notNullable()
  t.string('status', 16).notNullable()
  t.datetime('expires_at', { precision: 3 }).notNullable()
  t.datetime('created_at', { precision: 3 }).notNullable()
  t.datetime('resolved_at', { precision: 3 }).nullable()
  t.specificType('pending_task_id', "varchar(64) GENERATED ALWAYS AS (CASE WHEN status = 'pending' THEN task_id ELSE NULL END) STORED")
  t.unique(['pending_task_id'], { indexName: 'uq_vk_transfers_pending_task' })
  t.index(['task_id'], 'idx_vk_transfers_task')
  t.index(['to_agent_id', 'status'], 'idx_vk_transfers_to_agent')
  t.check("status in ('pending','accepted','declined','expired')", [], 'ck_vk_transfers_status')
  t.check("(status = 'pending') = (resolved_at is null)", [], 'ck_vk_transfers_resolved')
  t.check('from_agent_id <> to_agent_id', [], 'ck_vk_transfers_parties')
}

module.exports = { tableName, buildTable }