feat: Introduce is_deleted flag for items, add scripts for dummy data and thumbnail population, and refine item deletion and statistics.

This commit is contained in:
x
2026-01-24 17:32:28 +01:00
parent 63e86e9be1
commit 1646fdba56
3 changed files with 27 additions and 5 deletions

View File

@@ -4,6 +4,22 @@ import { promises as fs } from "fs";
(async () => { (async () => {
console.log("Starting migration..."); console.log("Starting migration...");
// 1. Ensure column exists
try {
await db`select is_deleted from items limit 1`;
console.log("Column 'is_deleted' already exists.");
} catch (err) {
if (err.message.includes('column "is_deleted" does not exist')) {
console.log("Column 'is_deleted' missing. Adding it now...");
await db`ALTER TABLE items ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE`;
console.log("Column added successfully.");
} else {
console.error("Unexpected error checking column:", err);
process.exit(1);
}
}
const items = await db`select id, dest from items where active = false`; const items = await db`select id, dest from items where active = false`;
console.log(`Found ${items.length} inactive items.`); console.log(`Found ${items.length} inactive items.`);
@@ -25,9 +41,9 @@ import { promises as fs } from "fs";
pendingCount++; pendingCount++;
} catch { } catch {
// Not in either? Broken. // Not in either? Broken.
console.log(`Item ${item.id} (${item.dest}) missing from both locations.`); console.log(`Item ${item.id} (${item.dest}) missing from both locations. Deleting...`);
await db`delete from items where id = ${item.id}`;
brokenCount++; brokenCount++;
// Default is false, which effectively puts it in pending queue as 'broken'
} }
} }
} }

View File

@@ -109,7 +109,12 @@ export default new class {
const deleted = +(await db` const deleted = +(await db`
select count(*) as total select count(*) as total
from "items" from "items"
where active = false where active = false and is_deleted = true
`)[0].total;
const pending = +(await db`
select count(*) as total
from "items"
where active = false and is_deleted = false
`)[0].total; `)[0].total;
const lastf0ck = +(await db` const lastf0ck = +(await db`
select max(id) as id select max(id) as id
@@ -120,7 +125,8 @@ export default new class {
untagged, untagged,
total: tagged + untagged, total: tagged + untagged,
deleted, deleted,
untracked: lastf0ck - (tagged + untagged + deleted), pending,
untracked: lastf0ck - (tagged + untagged + deleted + pending),
sfw, sfw,
nsfw, nsfw,
}; };

View File

@@ -267,7 +267,7 @@ export default router => {
}); });
} }
await db`update "items" set active = 'false' where id = ${id}`; await db`update "items" set active = 'false', is_deleted = true where id = ${id}`;
await fs.copyFile(`./public/b/${f0ck[0].dest}`, `./deleted/b/${f0ck[0].dest}`).catch(_ => { }); await fs.copyFile(`./public/b/${f0ck[0].dest}`, `./deleted/b/${f0ck[0].dest}`).catch(_ => { });
await fs.copyFile(`./public/t/${id}.webp`, `./deleted/t/${id}.webp`).catch(_ => { }); await fs.copyFile(`./public/t/${id}.webp`, `./deleted/t/${id}.webp`).catch(_ => { });