Merge pull request #674 from linkwarden/dev

merged the two migration scripts for v2.6.1
This commit is contained in:
Daniel 2024-07-25 23:44:46 -04:00 committed by GitHub
commit a886437589
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 88 deletions

View File

@ -1,70 +0,0 @@
// [Optional, but recommended]
// We decided that the "name" field should be the auto-generated field instead of the "description" field, so we need to
// move the data from the "description" field to the "name" field for links that have an empty name.
// This script is meant to be run only once.
// Run the script with `node scripts/migration/descriptionToName.js`
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
async function main() {
console.log("Starting...");
const count = await prisma.link.count({
where: {
name: "",
description: {
not: "",
},
},
});
console.log(
`Applying the changes to ${count} ${
count == 1 ? "link" : "links"
} in 10 seconds...`
);
await new Promise((resolve) => setTimeout(resolve, 10000));
console.log("Applying the changes...");
const links = await prisma.link.findMany({
where: {
name: "",
description: {
not: "",
},
},
select: {
id: true,
description: true,
},
});
for (const link of links) {
await prisma.link.update({
where: {
id: link.id,
},
data: {
name: link.description,
description: "",
},
});
}
console.log("Done!");
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});

View File

@ -1,4 +1,12 @@
// This is a script that looks for every link and checks if the pdf/screenshot exist in the filesystem.
// Run the script with `node scripts/migration/v2.6.1/index.js`
// Docker users can run the script with `docker exec -it CONTAINER_ID /bin/bash -c 'node scripts/migration/v2.6.1/index.js'`
// There are two parts to this script:
// Firstly we decided that the "name" field should be the auto-generated field instead of the "description" field, so we need to
// move the data from the "description" field to the "name" field for links that have an empty name.
// Secondly it looks for every link and checks if the pdf/screenshot exist in the filesystem.
// If they do, it updates the link with the path in the db.
// If they don't, it passes.
@ -64,7 +72,34 @@ async function checkFileExistence(path) {
}
}
async function pdfScreenshotIndexing() {
async function main() {
console.log("Starting... Please do not interrupt the process.");
const linksWithoutName = await prisma.link.findMany({
where: {
name: "",
description: {
not: "",
},
},
select: {
id: true,
description: true,
},
});
for (const link of linksWithoutName) {
await prisma.link.update({
where: {
id: link.id,
},
data: {
name: link.description,
description: "",
},
});
}
const links = await prisma.link.findMany({
select: {
id: true,
@ -77,8 +112,6 @@ async function pdfScreenshotIndexing() {
orderBy: { id: "asc" },
});
let counter = 0;
// PDFs
for (let link of links) {
const path = `archives/${link.collectionId}/${link.id}.pdf`;
@ -92,13 +125,9 @@ async function pdfScreenshotIndexing() {
});
}
console.log("count:", counter, "id:", link.id, "PDF");
counter++;
console.log("Indexing the PDF for link:", link.id);
}
counter = 0;
// Screenshots (PNGs)
for (let link of links) {
const path = `archives/${link.collectionId}/${link.id}.png`;
@ -112,13 +141,9 @@ async function pdfScreenshotIndexing() {
});
}
console.log("count:", counter, "id:", link.id, "PNG");
counter++;
console.log("Indexing the PNG for link:", link.id);
}
counter = 0;
// Screenshots (JPEGs)
for (let link of links) {
const path = `archives/${link.collectionId}/${link.id}.jpeg`;
@ -132,15 +157,13 @@ async function pdfScreenshotIndexing() {
});
}
console.log("count:", counter, "id:", link.id, "JPEG");
counter++;
console.log("Indexing the JPEG for link:", link.id);
}
await prisma.$disconnect();
}
pdfScreenshotIndexing().catch((e) => {
main().catch((e) => {
console.error(e);
process.exit(1);
});