change psql-lib from knex to postgres.js

This commit is contained in:
Flummi
2022-03-31 13:34:51 +02:00
parent f750a9a60f
commit c498a33cbe
20 changed files with 689 additions and 973 deletions

View File

@@ -1,4 +1,4 @@
import sql from '../../sql.mjs';
import db from '../../sql.mjs';
import lib from '../../lib.mjs';
import search from '../../routeinc/search.mjs';
@@ -13,11 +13,14 @@ export default router => {
const user = req.url.split[3] === "user" ? req.url.split[4] : "%";
const mime = (allowedMimes.filter(n => req.url.split[3]?.startsWith(n))[0] ? req.url.split[3] : "") + "%";
const rows = await sql("items")
.orderByRaw("rand()")
.limit(1)
.where("mime", "ilike", mime)
.andWhere("username", "ilike", user);
const rows = await db`
select *
from "items"
where mime ilike ${mime}
and username ilike ${user}
order by random()
limit 1
`;
return res.json({
success: rows.length > 0,
@@ -29,7 +32,13 @@ export default router => {
let eps = 100;
let id = +req.url.split[3];
const rows = await sql("items").where("id", "<", id).orderBy("id", "desc").limit(eps);
const rows = await db`
select *
from "items"
where id < ${+id}
order by id desc
limit ${+eps}
`;
const items = {
items: rows,
@@ -45,9 +54,26 @@ export default router => {
group.get(/\/item\/[0-9]+$/, async (req, res) => {
const id = +req.url.split[3];
const item = await sql("items").where("id", id).limit(1);
const next = await sql("items").select("id").where("id", ">", id).orderBy("id").limit(1);
const prev = await sql("items").select("id").where("id", "<", id).orderBy("id", "desc").limit(1);
const item = await db`
select *
from "items"
where id = ${+id}
limit 1
`;
const next = await db`
select id
from "items"
where id > ${+id}
order by id
limit 1
`;
const prev = await db`
select id
from "items"
where id < ${+id}
order by id desc
limit 1
`;
if(item.length === 0) {
return res.json({
@@ -74,11 +100,13 @@ export default router => {
const user = req.url.split[3];
const eps = +req.url.split[4] || 50;
const rows = await sql("items")
.select("id", "mime", "size", "src", "stamp", "userchannel", "username", "usernetwork")
.where("username", user)
.orderBy("stamp", "desc")
.limit(eps);
const rows = db`
select id, mime, size, src, stamp, userchannel, username, usernetwork
from "items"
where username = ${user}
order by stamp desc
limit ${+eps}
`;
return res.json({
success: rows.length > 0,
@@ -109,11 +137,12 @@ export default router => {
}, 405); // method not allowed
}
const tmptag = (
await sql('tags')
.where('tag', tagname)
.limit(1)
)[0];
const tmptag = (await db`
select *
from "tags"
where tag = ${tagname}
limit 1
`)[0];
if(!tmptag) {
return res.json({
@@ -122,13 +151,15 @@ export default router => {
}, 404); // not found
}
const q = (
await sql('tags')
.update({
tag: newtag
}, [ 'tag', 'normalized' ])
.where('tag', tagname)
)?.[0];
const q = (await db`
update "tags" set ${
db({
tag: newtag
}, 'tag')
}
where tag = ${tagname}
returning *
`)?.[0];
return res.json(q, tagname === newtag ? 200 : 201); // created (modified)
});
@@ -147,13 +178,15 @@ export default router => {
}
try {
const q = await sql('tags')
.select('tag', sql.raw('count(tags_assign.tag_id) as tagged'))
.leftJoin('tags_assign', 'tags_assign.tag_id', 'tags.id')
.whereRaw("normalized like '%' || slugify(?) || '%'", [ searchString ])
.groupBy('tags.id')
.orderBy('tagged', 'desc')
.limit(15);
const q = await db`
select tag, count(tags_assign.tag_id) as tagged
from "tags"
left join "tags_assign" on "tags_assign".tag_id = "tags".id
where normalized like '%' || slugify(${searchString}) || '%'
group by "tags".id
order by tagged desc
limit 15
`;
reply.success = true;
reply.suggestions = search(q, searchString);
} catch(err) {
@@ -172,7 +205,10 @@ export default router => {
}
const postid = +req.post.postid;
await sql("items").where("id", postid).del();
await db`
delete from "items"
where id = ${+postid}
`;
res.json({
success: true
@@ -182,25 +218,39 @@ export default router => {
group.post(/\/admin\/togglefav$/, lib.auth, async (req, res) => {
const postid = +req.post.postid;
let favs = await sql('favorites').select('user_id').where('item_id', postid);
let favs = await db`
select user_id
from "favorites"
where item_id = ${+postid}
`;
if(Object.values(favs).filter(u => u.user_id === req.session.id)[0]) {
// del fav
await sql('favorites').where('user_id', req.session.id).andWhere('item_id', postid).del();
await db`
delete from "favorites"
where user_id = ${+req.session.id}
and item_id = ${+postid}
`;
}
else {
// add fav
await sql('favorites').insert({
item_id: postid,
user_id: req.session.id
});
await db`
insert into "favorites" ${
db({
item_id: +postid,
user_id: +req.session.id
}, 'item_id', 'user_id')
}
`;
}
favs = await sql('favorites')
.select('user.user', 'user_options.avatar')
.leftJoin('user', 'user.id', 'favorites.user_id')
.leftJoin('user_options', 'user_options.user_id', 'favorites.user_id')
.where('favorites.item_id', postid);
favs = await db`
select "user".user, "user_options".avatar
from "favorites"
left join "user" on "user".id = "favorites".user_id
left join "user_options" on "user_options".user_id = "favorites".user_id
where "favorites".item_id = ${+postid}
`;
return res.json({
success: true,

View File

@@ -1,4 +1,4 @@
import sql from '../../sql.mjs';
import db from '../../sql.mjs';
import lib from '../../lib.mjs';
export default router => {
@@ -13,11 +13,11 @@ export default router => {
const avatar = +req.post.avatar;
const itemid = (
await sql('items')
.select('id')
.where('id', avatar)
)?.[0]?.id;
const itemid = (await db`
select id
from "items"
where id = ${+avatar}
`)?.[0]?.id;
if(!itemid) {
return res.json({
@@ -25,11 +25,14 @@ export default router => {
}, 404); // not found
}
const q = await sql('user_options')
.update({
avatar
})
.where('user_id', req.session.id);
const q = await db`
update "user_options" set ${
db({
avatar
}, 'avatar')
}
where user_id = ${+req.session.id}
`;
return res.json({
msg: q

View File

@@ -1,4 +1,4 @@
import sql from '../../sql.mjs';
import db from '../../sql.mjs';
import lib from '../../lib.mjs';
export default router => {
@@ -38,22 +38,31 @@ export default router => {
}
try {
let tagid = (
await sql("tags")
.select("id")
.whereRaw("normalized = slugify(?)", [ tagname ])
)?.[0]?.id;
let tagid = (await db`
select id
from "tags"
where normalized = slugify(${tagname})
`)?.[0]?.id;
if(!tagid) { // create new tag
tagid = (await sql("tags").returning("id").insert({
tag: tagname
}))[0];
tagid = (await db`
insert into "tags" ${
db({
tag: tagname
}, 'tag')
}
returning id
`)[0];
}
await sql("tags_assign").insert({
tag_id: tagid,
item_id: postid,
user_id: req.session.id
});
await db`
insert into "tags_assign" ${
db({
tag_id: +tagid,
item_id: +postid,
user_id: +req.session.id
}, 'tag_id', 'item_id', 'user_id')
}
`;
} catch(err) {
return res.json({
success: false,
@@ -83,20 +92,27 @@ export default router => {
if(!(await lib.getTags(postid)).filter(tag => [1,2].includes(tag.id)).length) {
// insert
await sql('tags_assign').insert({
item_id: postid,
tag_id: 1,
user_id: req.session.id
});
await db`
insert into "tags_assign" ${
db({
item_id: +postid,
tag_id: 1,
user_id: +req.session.id
}, 'item_id', 'tag_id', 'user_id')
}
`;
}
else {
// update
await sql('tags_assign')
.update({
tag_id: sql.raw('(array[2,1])[tag_id]')
})
.whereRaw('tag_id = any(array[1,2])')
.andWhere('item_id', postid);
await db`
update "tags_assign" set ${
db({
tag_id: db`(array[2,1])[tag_id]`
}, tag_id)
}
where tag_id = any(array[1,2])
and item_id = ${+postid}
`;
}
return res.json({
@@ -129,10 +145,16 @@ export default router => {
});
}
let q = sql("tags_assign").where("tag_id", tagid).andWhere("item_id", postid).del();
if(req.session.level < 50)
q = q.andWhere("user_id", req.session.id);
const reply = !!(await q);
let q = await db`
delete from "tags_assign"
where tag_id = ${+tagid}
and item_id = ${+postid}
${ req.session.level < 50
? db`and user_id = ${+req.session.id}`
: db``
}
`;
const reply = !!q;
return res.json({
success: reply,