fix(db): enforce correct slug uniqueness rules with insert trigger
This commit is contained in:
parent
925873a1de
commit
ee171da676
|
@ -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
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue