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,
|
short_code TEXT NOT NULL,
|
||||||
expiry_date TEXT,
|
expiry_date TEXT,
|
||||||
user_id TEXT DEFAULT '',
|
user_id TEXT DEFAULT '',
|
||||||
customized_shortner_slug TEXT,
|
customized_shortner_slug TEXT
|
||||||
UNIQUE(user_id, customized_shortner_slug)
|
|
||||||
)`,
|
)`,
|
||||||
function (err) {
|
function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -58,19 +57,21 @@ const initDB = async () => {
|
||||||
CREATE TRIGGER IF NOT EXISTS enforce_custom_slug_uniqueness_insert
|
CREATE TRIGGER IF NOT EXISTS enforce_custom_slug_uniqueness_insert
|
||||||
BEFORE INSERT ON urls
|
BEFORE INSERT ON urls
|
||||||
BEGIN
|
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')
|
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 != ''
|
||||||
SELECT 1 FROM urls
|
AND EXISTS (
|
||||||
WHERE user_id = '' AND customized_shortner_slug = NEW.customized_shortner_slug
|
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')
|
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 != ''
|
||||||
SELECT 1 FROM urls
|
AND EXISTS (
|
||||||
WHERE user_id = NEW.user_id AND customized_shortner_slug = NEW.customized_shortner_slug
|
SELECT 1 FROM urls
|
||||||
);
|
WHERE user_id = NEW.user_id AND customized_shortner_slug = NEW.customized_shortner_slug
|
||||||
|
);
|
||||||
END;
|
END;
|
||||||
`,
|
`,
|
||||||
function (err) {
|
function (err) {
|
||||||
|
|
Loading…
Reference in a new issue