potential fix for favorites in production, let's try

This commit is contained in:
x 2025-04-27 21:09:07 +02:00
parent e18270a1ce
commit 52b83dee3a
2 changed files with 58 additions and 40 deletions

View File

@ -201,8 +201,7 @@ export default {
tmp
};
return data;
},
getRandom: async (o = ({ user, tag, mime, mode, session })) => {
},getRandom: async (o = ({ user, tag, mime, mode, fav, session })) => {
const user = o.user ? decodeURI(o.user) : null;
const tag = lib.parseTag(o.tag ?? null);
const mime = (o.mime ?? "");
@ -210,19 +209,35 @@ export default {
const modequery = mime == "audio" ? lib.getMode(0) : lib.getMode(o.mode ?? 0);
const item = await db`
let item;
if (o.fav && user) {
// Special case: random from user's favorites
item = await db`
select
items.id
from favorites
inner join items on favorites.item_id = items.id
inner join "user" on "user".id = favorites.user_id
where
"user".user ilike ${'%' + user + '%'}
and items.active = 'true'
${mime ? db`and items.mime ilike ${smime}` : db``}
order by random()
limit 1
`;
} else {
// Normal random logic
item = await db`
select
items.id
from items
left join tags_assign on tags_assign.item_id = items.id
left join tags on tags.id = tags_assign.tag_id
left join favorites on favorites.item_id = items.id
left join "user" on "user".id = favorites.user_id
where
${db.unsafe(modequery)}
and items.active = 'true'
${tag ? db`and tags.normalized ilike '%' || slugify(${tag}) || '%'` : db``}
${ o.fav ? db`and "user".user ilike ${'%'+user+'%'}` : db`` }
${user ? db`and items.username ilike ${'%' + user + '%'}` : db``}
${mime ? db`and items.mime ilike ${smime}` : db``}
${!o.session && globalfilter ? db`and items.id not in (select item_id from tags_assign where item_id = items.id and (${db.unsafe(globalfilter)}))` : db``}
@ -230,6 +245,7 @@ export default {
order by random()
limit 1
`;
}
if (item.length === 0) {
return {

View File

@ -1,5 +1,4 @@
import cfg from "../../inc/config.mjs";
import lib from "../lib.mjs";
import f0cklib from "../routeinc/f0cklib.mjs";
export default (router, tpl) => {
@ -10,9 +9,11 @@ export default (router, tpl) => {
if (referer.match(new RegExp(cfg.main.url.regex))) { // parse referer
referer = referer.split(cfg.main.url.domain)[1];
console.log("referer: ", referer);
const tmp = referer.match(/^\/?(?:\/tag\/(?<tag>.+?))?(?:\/user\/(?<user>.+?)\/(?<mode>f0cks|favs))?(?:\/(?<mime>image|audio|video))?(?:\/p\/(?<page>\d+))?(?:\/(?<itemid>\d+))?$/);
console.log("tmp: ", tmp);
if(tmp)
if (tmp && tmp.groups)
opts = tmp.groups;
}
@ -21,7 +22,7 @@ export default (router, tpl) => {
tag: opts.tag,
mime: opts.mime,
page: opts.page,
fav: opts.mode == 'favs',
fav: opts.mode === 'favs',
mode: req.session.mode,
session: !!req.session
});
@ -40,5 +41,6 @@ export default (router, tpl) => {
res.redirect(encodeURI(`${data.link.main}${data.link.path}${data.itemid}`));
});
return router;
};