diff --git a/lib/api/controllers/links/postLink.ts b/lib/api/controllers/links/postLink.ts index 0dcc5dc..0301bca 100644 --- a/lib/api/controllers/links/postLink.ts +++ b/lib/api/controllers/links/postLink.ts @@ -93,20 +93,21 @@ export default async function postLink( }, }); - const existingLink = await prisma.link.findFirst({ - where: { - url: link.url, - collection: { - ownerId: userId, + if (user?.preventDuplicateLinks) { + const existingLink = await prisma.link.findFirst({ + where: { + url: link.url?.trim(), + collection: { + ownerId: userId, + }, }, - }, - }); + }); - if (existingLink && user?.mergeDuplicateLinks) { - return { - response: "Link already exists", - status: 409, - }; + if (existingLink) + return { + response: "Link already exists", + status: 409, + }; } const numberOfLinksTheUserHas = await prisma.link.count({ @@ -148,7 +149,7 @@ export default async function postLink( const newLink = await prisma.link.create({ data: { - url: link.url, + url: link.url?.trim(), name: link.name, description, type: linkType, diff --git a/lib/api/controllers/users/userId/updateUserById.ts b/lib/api/controllers/users/userId/updateUserById.ts index 7459d1d..f2b5e91 100644 --- a/lib/api/controllers/users/userId/updateUserById.ts +++ b/lib/api/controllers/users/userId/updateUserById.ts @@ -190,7 +190,7 @@ export default async function updateUserById( archiveAsPDF: data.archiveAsPDF, archiveAsWaybackMachine: data.archiveAsWaybackMachine, linksRouteTo: data.linksRouteTo, - mergeDuplicateLinks: data.mergeDuplicateLinks, + preventDuplicateLinks: data.preventDuplicateLinks, password: data.newPassword && data.newPassword !== "" ? newHashedPassword diff --git a/pages/settings/preference.tsx b/pages/settings/preference.tsx index b581045..1d5a2e0 100644 --- a/pages/settings/preference.tsx +++ b/pages/settings/preference.tsx @@ -16,7 +16,7 @@ export default function Appearance() { const { account, updateAccount } = useAccountStore(); const [user, setUser] = useState(account); - const [mergeDuplicateLinks, setMergeDuplicateLinks] = + const [preventDuplicateLinks, setPreventDuplicateLinks] = useState(false); const [archiveAsScreenshot, setArchiveAsScreenshot] = useState(false); @@ -34,7 +34,7 @@ export default function Appearance() { archiveAsPDF, archiveAsWaybackMachine, linksRouteTo, - mergeDuplicateLinks, + preventDuplicateLinks, }); }, [ account, @@ -42,7 +42,7 @@ export default function Appearance() { archiveAsPDF, archiveAsWaybackMachine, linksRouteTo, - mergeDuplicateLinks, + preventDuplicateLinks, ]); function objectIsEmpty(obj: object) { @@ -55,7 +55,7 @@ export default function Appearance() { setArchiveAsPDF(account.archiveAsPDF); setArchiveAsWaybackMachine(account.archiveAsWaybackMachine); setLinksRouteTo(account.linksRouteTo); - setMergeDuplicateLinks(account.mergeDuplicateLinks); + setPreventDuplicateLinks(account.preventDuplicateLinks); } }, [account]); @@ -151,9 +151,9 @@ export default function Appearance() {
setMergeDuplicateLinks(!mergeDuplicateLinks)} + label="Prevent duplicate links" + state={preventDuplicateLinks} + onClick={() => setPreventDuplicateLinks(!preventDuplicateLinks)} />
diff --git a/prisma/migrations/20240305045701_add_merge_duplicate_links/migration.sql b/prisma/migrations/20240305045701_add_merge_duplicate_links/migration.sql index cb534b9..873a36e 100644 --- a/prisma/migrations/20240305045701_add_merge_duplicate_links/migration.sql +++ b/prisma/migrations/20240305045701_add_merge_duplicate_links/migration.sql @@ -1,2 +1,2 @@ -- AlterTable -ALTER TABLE "User" ADD COLUMN "mergeDuplicateLinks" BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE "User" ADD COLUMN "preventDuplicateLinks" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 64945ca..64c7b86 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -43,7 +43,7 @@ model User { accessTokens AccessToken[] subscriptions Subscription? linksRouteTo LinksRouteTo @default(ORIGINAL) - mergeDuplicateLinks Boolean @default(false) + preventDuplicateLinks Boolean @default(false) archiveAsScreenshot Boolean @default(true) archiveAsPDF Boolean @default(true) archiveAsWaybackMachine Boolean @default(false)