mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
fix: Update unique db constraint to account for revoked share links (#10022)
* fix: Update unique db constraint to account for revoked share links closes #10017 * Remove pointless try/catch * Switch order of migrations to ensure no 'dead zone' without constraint
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
async up(queryInterface, Sequelize) {
|
||||
// Create a partial unique index that only applies when revokedAt is NULL
|
||||
// This ensures that only non-revoked shares have the unique constraint
|
||||
await queryInterface.sequelize.query(
|
||||
`CREATE UNIQUE INDEX CONCURRENTLY "shares_urlId_teamId_not_revoked_uk"
|
||||
ON "shares" ("urlId", "teamId")
|
||||
WHERE "revokedAt" IS NULL;`
|
||||
);
|
||||
|
||||
// Remove the existing unique constraint
|
||||
await queryInterface.removeConstraint("shares", "shares_urlId_teamId_uk");
|
||||
},
|
||||
|
||||
async down(queryInterface, Sequelize) {
|
||||
// Restore the original unique constraint
|
||||
await queryInterface.addConstraint("shares", {
|
||||
fields: ["urlId", "teamId"],
|
||||
type: "unique",
|
||||
name: "shares_urlId_teamId_uk",
|
||||
});
|
||||
|
||||
// Remove the partial unique index
|
||||
await queryInterface.sequelize.query(
|
||||
`DROP INDEX CONCURRENTLY IF EXISTS "shares_urlId_teamId_not_revoked_uk";`
|
||||
);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user