58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import db from "../../inc/sql.mjs";
|
|
import lib from "../lib.mjs";
|
|
|
|
export default (router, tpl) => {
|
|
router.get(/^\/ranking$/, async (req, res) => {
|
|
try {
|
|
const list = await db`
|
|
select
|
|
"user".user,
|
|
coalesce("user_options".avatar, ${await lib.getDefaultAvatar()}) as avatar,
|
|
count(distinct(tag_id, item_id)) as count
|
|
from "tags_assign"
|
|
left join "user" on "user".id = "tags_assign".user_id
|
|
left join "user_options" on "user_options".user_id = "user".id
|
|
group by "user".user, "user_options".avatar
|
|
order by count desc
|
|
`;
|
|
const stats = await lib.countf0cks();
|
|
|
|
const hoster = await db`
|
|
with t as (
|
|
select
|
|
split_part(substring(src, position('//' in src)+2), '/', 1) part
|
|
from items
|
|
)
|
|
select t.part, count(t.part) as c
|
|
from t
|
|
group by t.part
|
|
order by c desc
|
|
limit 20
|
|
`;
|
|
|
|
const favotop = await db`
|
|
select item_id, count(*) favs
|
|
from favorites
|
|
group by item_id
|
|
having count(*) > 1
|
|
order by favs desc
|
|
limit 10
|
|
`;
|
|
|
|
res.reply({
|
|
body: tpl.render('ranking', {
|
|
list,
|
|
stats,
|
|
hoster,
|
|
favotop,
|
|
tmp: null
|
|
}, req)
|
|
});
|
|
} catch(err) {
|
|
res.end(JSON.stringify(err.message));
|
|
}
|
|
});
|
|
|
|
return router;
|
|
};
|