fix rating and fav

This commit is contained in:
2026-08-13 21:14:20 +02:00
parent 402a043b57
commit 9ec07e8e6c
9 changed files with 53 additions and 17 deletions

View File

@@ -200,27 +200,27 @@ export default new class {
const tagged = +(await db`
select count(*) as total
from "items"
where id in (select item_id from tags_assign group by item_id) and active = true
where id in (select item_id from tags_assign group by item_id) and active = true and is_deleted = false
`)[0].total;
const untagged = +(await db`
select count(*) as total
from "items"
where not exists (select 1 from tags_assign where item_id = items.id) and active = true
where not exists (select 1 from tags_assign where item_id = items.id) and active = true and is_deleted = false
`)[0].total;
const sfw = +(await db`
select count(*) as total
from "items"
where id in (select item_id from tags_assign where tag_id = 1 group by item_id) and active = true
where id in (select item_id from tags_assign where tag_id = 1 group by item_id) and active = true and is_deleted = false
`)[0].total;
const nsfw = +(await db`
select count(*) as total
from "items"
where id in (select item_id from tags_assign where tag_id = 2 group by item_id) and active = true
where id in (select item_id from tags_assign where tag_id = 2 group by item_id) and active = true and is_deleted = false
`)[0].total;
const nsfl = cfg.enable_nsfl ? +(await db`
select count(*) as total
from "items"
where id in (select item_id from tags_assign where tag_id = ${cfg.nsfl_tag_id || 3} group by item_id) and active = true
where id in (select item_id from tags_assign where tag_id = ${cfg.nsfl_tag_id || 3} group by item_id) and active = true and is_deleted = false
`)[0].total : 0;
const deleted = +(await db`
select count(*) as total

View File

@@ -845,12 +845,16 @@ export default (router, tpl) => {
await fs.unlink(path.join(cfg.paths.ca, `${item.id}.webp`)).catch(() => { });
}
await db`DELETE FROM tags_assign WHERE item_id = ${item.id}`;
await db`UPDATE items SET is_deleted = true, is_purged = true, active = false WHERE id = ${item.id}`;
count++;
} catch (e) {
console.error(`[CLEANUP] Failed to delete item ${item.id}:`, e.message);
}
}
// Clean up any remaining orphan tag assignments for deleted or inactive items
await db`DELETE FROM tags_assign WHERE item_id IN (SELECT id FROM items WHERE is_deleted = true OR active = false)`;
}
// Log it in audit

View File

@@ -115,10 +115,13 @@ export default (router, tpl) => {
try {
const slug = '%' + lib.slugify(q) + '%';
const rows = await db`
SELECT t.tag, t.normalized, COUNT(ta.item_id) as uses
SELECT t.tag, t.normalized, COUNT(DISTINCT items.id) as uses
FROM tags t
JOIN tags_assign ta ON ta.tag_id = t.id
JOIN items ON items.id = ta.item_id
WHERE t.id > 2
AND items.active = true
AND items.is_deleted = false
AND lower(t.normalized) ILIKE ${slug}
GROUP BY t.tag, t.normalized
ORDER BY uses DESC

View File

@@ -33,6 +33,7 @@ export async function regenerateTagImage(tag, mode) {
${modeFilter}
WHERE (t.tag = ${tag} OR t.normalized = ${tag})
AND i.active = true
AND i.is_deleted = false
AND COALESCE(i.visibility, 0) = 0
ORDER BY RANDOM()
LIMIT 3

View File

@@ -51,6 +51,7 @@ export default (router, tpl) => {
JOIN tags_assign ta ON t.id = ta.tag_id
JOIN items ON items.id = ta.item_id
WHERE items.active = true
AND items.is_deleted = false
AND COALESCE(items.visibility, 0) = 0
AND t.id NOT IN (1, 2)
AND ${db.unsafe(modequery)}
@@ -75,6 +76,7 @@ export default (router, tpl) => {
JOIN items ON items.id = ta.item_id
WHERE t.normalized LIKE '%' || ${tag.normalized} || '%'
AND items.active = true
AND items.is_deleted = false
AND COALESCE(items.visibility, 0) = 0
AND ${db.unsafe(modequery)}
${restrictedFilter}

View File

@@ -51,6 +51,7 @@ export default (router, tpl) => {
JOIN tags_assign ta ON t.id = ta.tag_id
JOIN items ON items.id = ta.item_id
WHERE items.active = true
AND items.is_deleted = false
AND COALESCE(items.visibility, 0) = 0
AND t.id NOT IN (1, 2)
AND ta.user_id = ${userId}
@@ -76,6 +77,7 @@ export default (router, tpl) => {
JOIN items ON items.id = ta.item_id
WHERE t.normalized LIKE '%' || ${tag.normalized} || '%'
AND items.active = true
AND items.is_deleted = false
AND COALESCE(items.visibility, 0) = 0
AND ta.user_id = ${userId}
AND ${db.unsafe(modequery)}