vk_disputes.cjs 1.23 KB
const tableName = 'vk_disputes'

function buildTable(t) {
  t.string('id', 64).primary()
  t.string('task_id', 64).notNullable()
  t.string('opened_by_agent_id', 64).notNullable()
  t.string('status', 16).notNullable()
  t.json('ai_proposal').nullable()
  t.json('resolution').nullable()
  t.string('resolved_by_user_id', 64).nullable()
  t.datetime('resolved_at', { precision: 3 }).nullable()
  t.datetime('created_at', { precision: 3 }).notNullable()
  t.specificType('open_task_id', "varchar(64) GENERATED ALWAYS AS (CASE WHEN status <> 'resolved' THEN task_id ELSE NULL END) STORED")
  t.unique(['open_task_id'], { indexName: 'uq_vk_disputes_open_task' })
  t.index(['task_id'], 'idx_vk_disputes_task')
  t.index(['status', 'created_at'], 'idx_vk_disputes_queue')
  t.check("status in ('open','ai_proposed','resolved')", [], 'ck_vk_disputes_status')
  t.check("status <> 'ai_proposed' or ai_proposal is not null", [], 'ck_vk_disputes_ai_proposal')
  t.check("(status <> 'resolved' and resolution is null and resolved_by_user_id is null and resolved_at is null) or (status = 'resolved' and resolution is not null and resolved_by_user_id is not null and resolved_at is not null)", [], 'ck_vk_disputes_resolution')
}

module.exports = { tableName, buildTable }