fix(db): enforce correct slug uniqueness rules with insert trigger

This commit is contained in:
Arshdeep Singh 2025-06-02 10:29:56 +05:30
parent 925873a1de
commit ee171da676

View file

@ -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,16 +57,18 @@ 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 (
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 (
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
);