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:
@@ -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'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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(_ => { });
|
||||||
|
|||||||
Reference in New Issue
Block a user