diff --git a/dbConfig/index.js b/dbConfig/index.js index 7462c7b..44131f9 100644 --- a/dbConfig/index.js +++ b/dbConfig/index.js @@ -44,8 +44,7 @@ const initDB = async () => { short_code TEXT NOT NULL, expiry_date TEXT, user_id TEXT DEFAULT '', - customized_shortner_slug TEXT, - UNIQUE(user_id, customized_shortner_slug) + customized_shortner_slug TEXT )`, function (err) { if (err) { @@ -58,19 +57,21 @@ const initDB = async () => { CREATE TRIGGER IF NOT EXISTS enforce_custom_slug_uniqueness_insert BEFORE INSERT ON urls BEGIN - -- Prevent duplicate slugs for anonymous users + -- Case 1: Anonymous users with non-empty slug must be globally unique SELECT RAISE(ABORT, 'Slug must be unique for anonymous users') - WHERE NEW.user_id = '' AND NEW.customized_shortner_slug != '' AND EXISTS ( - SELECT 1 FROM urls - WHERE user_id = '' AND customized_shortner_slug = NEW.customized_shortner_slug - ); + WHERE NEW.user_id = '' AND NEW.customized_shortner_slug != '' + AND EXISTS ( + SELECT 1 FROM urls + WHERE user_id = '' AND customized_shortner_slug = NEW.customized_shortner_slug + ); - -- Prevent duplicate slugs for the same logged-in user + -- Case 2: Logged-in users with non-empty slug must be unique per user SELECT RAISE(ABORT, 'Slug must be unique per user') - WHERE NEW.user_id != '' AND NEW.customized_shortner_slug != '' AND EXISTS ( - SELECT 1 FROM urls - WHERE user_id = NEW.user_id AND customized_shortner_slug = NEW.customized_shortner_slug - ); + WHERE NEW.user_id != '' AND NEW.customized_shortner_slug != '' + AND EXISTS ( + SELECT 1 FROM urls + WHERE user_id = NEW.user_id AND customized_shortner_slug = NEW.customized_shortner_slug + ); END; `, function (err) {