"use strict"; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable("access_requests", { id: { type: Sequelize.UUID, primaryKey: true, defaultValue: Sequelize.UUIDV4, allowNull: false, }, status: { type: Sequelize.STRING, allowNull: false, defaultValue: "pending", }, respondedAt: { type: Sequelize.DATE, allowNull: true, }, createdAt: { type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW, }, updatedAt: { type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW, }, documentId: { type: Sequelize.UUID, allowNull: false, references: { model: "documents", key: "id", }, onDelete: "CASCADE", onUpdate: "CASCADE", }, userId: { type: Sequelize.UUID, allowNull: false, references: { model: "users", key: "id", }, onDelete: "CASCADE", onUpdate: "CASCADE", }, teamId: { type: Sequelize.UUID, allowNull: false, references: { model: "teams", key: "id", }, onDelete: "CASCADE", onUpdate: "CASCADE", }, responderId: { type: Sequelize.UUID, allowNull: true, references: { model: "users", key: "id", }, onDelete: "SET NULL", onUpdate: "CASCADE", }, }); await queryInterface.addIndex("access_requests", ["documentId", "userId"], { unique: true, where: { status: "pending" }, name: "access_requests_document_id_user_id_pending", }); await queryInterface.addIndex("access_requests", ["userId"]); await queryInterface.addIndex("access_requests", ["teamId"]); }, async down(queryInterface) { await queryInterface.dropTable("access_requests"); }, };