final touch
This commit is contained in:
parent
750aa294d0
commit
f26cd31694
|
@ -93,20 +93,21 @@ export default async function postLink(
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const existingLink = await prisma.link.findFirst({
|
if (user?.preventDuplicateLinks) {
|
||||||
where: {
|
const existingLink = await prisma.link.findFirst({
|
||||||
url: link.url,
|
where: {
|
||||||
collection: {
|
url: link.url?.trim(),
|
||||||
ownerId: userId,
|
collection: {
|
||||||
|
ownerId: userId,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
});
|
||||||
});
|
|
||||||
|
|
||||||
if (existingLink && user?.mergeDuplicateLinks) {
|
if (existingLink)
|
||||||
return {
|
return {
|
||||||
response: "Link already exists",
|
response: "Link already exists",
|
||||||
status: 409,
|
status: 409,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const numberOfLinksTheUserHas = await prisma.link.count({
|
const numberOfLinksTheUserHas = await prisma.link.count({
|
||||||
|
@ -148,7 +149,7 @@ export default async function postLink(
|
||||||
|
|
||||||
const newLink = await prisma.link.create({
|
const newLink = await prisma.link.create({
|
||||||
data: {
|
data: {
|
||||||
url: link.url,
|
url: link.url?.trim(),
|
||||||
name: link.name,
|
name: link.name,
|
||||||
description,
|
description,
|
||||||
type: linkType,
|
type: linkType,
|
||||||
|
|
|
@ -190,7 +190,7 @@ export default async function updateUserById(
|
||||||
archiveAsPDF: data.archiveAsPDF,
|
archiveAsPDF: data.archiveAsPDF,
|
||||||
archiveAsWaybackMachine: data.archiveAsWaybackMachine,
|
archiveAsWaybackMachine: data.archiveAsWaybackMachine,
|
||||||
linksRouteTo: data.linksRouteTo,
|
linksRouteTo: data.linksRouteTo,
|
||||||
mergeDuplicateLinks: data.mergeDuplicateLinks,
|
preventDuplicateLinks: data.preventDuplicateLinks,
|
||||||
password:
|
password:
|
||||||
data.newPassword && data.newPassword !== ""
|
data.newPassword && data.newPassword !== ""
|
||||||
? newHashedPassword
|
? newHashedPassword
|
||||||
|
|
|
@ -16,7 +16,7 @@ export default function Appearance() {
|
||||||
const { account, updateAccount } = useAccountStore();
|
const { account, updateAccount } = useAccountStore();
|
||||||
const [user, setUser] = useState<AccountSettings>(account);
|
const [user, setUser] = useState<AccountSettings>(account);
|
||||||
|
|
||||||
const [mergeDuplicateLinks, setMergeDuplicateLinks] =
|
const [preventDuplicateLinks, setPreventDuplicateLinks] =
|
||||||
useState<boolean>(false);
|
useState<boolean>(false);
|
||||||
const [archiveAsScreenshot, setArchiveAsScreenshot] =
|
const [archiveAsScreenshot, setArchiveAsScreenshot] =
|
||||||
useState<boolean>(false);
|
useState<boolean>(false);
|
||||||
|
@ -34,7 +34,7 @@ export default function Appearance() {
|
||||||
archiveAsPDF,
|
archiveAsPDF,
|
||||||
archiveAsWaybackMachine,
|
archiveAsWaybackMachine,
|
||||||
linksRouteTo,
|
linksRouteTo,
|
||||||
mergeDuplicateLinks,
|
preventDuplicateLinks,
|
||||||
});
|
});
|
||||||
}, [
|
}, [
|
||||||
account,
|
account,
|
||||||
|
@ -42,7 +42,7 @@ export default function Appearance() {
|
||||||
archiveAsPDF,
|
archiveAsPDF,
|
||||||
archiveAsWaybackMachine,
|
archiveAsWaybackMachine,
|
||||||
linksRouteTo,
|
linksRouteTo,
|
||||||
mergeDuplicateLinks,
|
preventDuplicateLinks,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function objectIsEmpty(obj: object) {
|
function objectIsEmpty(obj: object) {
|
||||||
|
@ -55,7 +55,7 @@ export default function Appearance() {
|
||||||
setArchiveAsPDF(account.archiveAsPDF);
|
setArchiveAsPDF(account.archiveAsPDF);
|
||||||
setArchiveAsWaybackMachine(account.archiveAsWaybackMachine);
|
setArchiveAsWaybackMachine(account.archiveAsWaybackMachine);
|
||||||
setLinksRouteTo(account.linksRouteTo);
|
setLinksRouteTo(account.linksRouteTo);
|
||||||
setMergeDuplicateLinks(account.mergeDuplicateLinks);
|
setPreventDuplicateLinks(account.preventDuplicateLinks);
|
||||||
}
|
}
|
||||||
}, [account]);
|
}, [account]);
|
||||||
|
|
||||||
|
@ -151,9 +151,9 @@ export default function Appearance() {
|
||||||
<div className="divider my-3"></div>
|
<div className="divider my-3"></div>
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
label="Merge duplicate links"
|
label="Prevent duplicate links"
|
||||||
state={mergeDuplicateLinks}
|
state={preventDuplicateLinks}
|
||||||
onClick={() => setMergeDuplicateLinks(!mergeDuplicateLinks)}
|
onClick={() => setPreventDuplicateLinks(!preventDuplicateLinks)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
-- AlterTable
|
-- AlterTable
|
||||||
ALTER TABLE "User" ADD COLUMN "mergeDuplicateLinks" BOOLEAN NOT NULL DEFAULT false;
|
ALTER TABLE "User" ADD COLUMN "preventDuplicateLinks" BOOLEAN NOT NULL DEFAULT false;
|
||||||
|
|
|
@ -43,7 +43,7 @@ model User {
|
||||||
accessTokens AccessToken[]
|
accessTokens AccessToken[]
|
||||||
subscriptions Subscription?
|
subscriptions Subscription?
|
||||||
linksRouteTo LinksRouteTo @default(ORIGINAL)
|
linksRouteTo LinksRouteTo @default(ORIGINAL)
|
||||||
mergeDuplicateLinks Boolean @default(false)
|
preventDuplicateLinks Boolean @default(false)
|
||||||
archiveAsScreenshot Boolean @default(true)
|
archiveAsScreenshot Boolean @default(true)
|
||||||
archiveAsPDF Boolean @default(true)
|
archiveAsPDF Boolean @default(true)
|
||||||
archiveAsWaybackMachine Boolean @default(false)
|
archiveAsWaybackMachine Boolean @default(false)
|
||||||
|
|
Ŝarĝante…
Reference in New Issue