diff --git a/src/inc/routes/api.mjs b/src/inc/routes/api.mjs index 6614e47..7ba6de9 100644 --- a/src/inc/routes/api.mjs +++ b/src/inc/routes/api.mjs @@ -9,7 +9,7 @@ router.get(/^\/api$/, (req, res) => { }); router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { - const db = await sql; + const db = await sql.getConnection(); const args = []; let q = queries.random.main; @@ -30,33 +30,48 @@ router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, r .writeHead(500) .end(JSON.stringify(err), 'utf-8'); } + db.end(); }); router.get(/^\/api\/p$/, async (req, res) => { - const db = await sql; - const id = parseInt(req.url.qs.id) || 99999999; + const db = await sql.getConnection(); + let id = parseInt(req.url.qs.id) || 99999999; const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200); - const [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ]; + let [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ]; try { - const rows = await db.query(`select id, mime from f0ck.items where id ${trend} ? order by id ${order} limit ?`, [ id, eps ]); + const tmp = (await db.query("select min(id) as min, max(id) as max from items limit 1"))[0]; + if((id - 1 + eps) > tmp.max) { + id = tmp.max; + [ order, trend ] = [ "desc", "<=" ]; + } + if((id + 1 - eps) < tmp.min) { + id = tmp.min; + [ order, trend ] = [ "asc", ">=" ]; + } + + const rows = await db.query(queries.p(trend, order), [ id, eps ]); const items = { items: rows, first: rows[0].id, - last: rows[rows.length - 1].id + last: rows[rows.length - 1].id, + newest: tmp.max, + oldest: tmp.min }; res .writeHead(200, { 'Content-Type': 'application/json' }) .end(JSON.stringify(items), 'utf-8'); } catch(err) { + console.error(err); res .writeHead(500) .end(JSON.stringify(err), 'utf-8'); } + db.end(); }); router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { - const db = await sql; + const db = await sql.getConnection(); try { const rows = await db.query(queries.item, Array(3).fill(req.url.split[2])); const data = rows[0].length > 0 ? { @@ -76,10 +91,11 @@ router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { .writeHead(500) .end(JSON.stringify(err), 'utf-8'); } + db.end(); }); router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen - const db = await sql; + const db = await sql.getConnection(); const user = req.url.split[2]; const eps = Math.min(req.url.split[3] || 50, 50); try { @@ -92,4 +108,5 @@ router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umste .writeHead(500) .end(JSON.stringify(err), 'utf-8'); } + db.end(); }); diff --git a/src/inc/routes/inc/api.mjs b/src/inc/routes/inc/api.mjs index 5374000..78a561e 100644 --- a/src/inc/routes/inc/api.mjs +++ b/src/inc/routes/inc/api.mjs @@ -6,11 +6,12 @@ export const mimes = { export const queries = { random: { - main: "select id, mime, size, username, userchannel, usernetwork, stamp, dest, src from f0ck.items ", + main: "select id, mime, size, username, userchannel, usernetwork, stamp, dest, src from items ", where: where => `${where?`where ${where}`:""} order by rand() limit 1` }, - item: "select id, mime, size, src, stamp, userchannel, username, usernetwork from f0ck.items where id = ? limit 1;" - + "select id from f0ck.items where id = (select min(id) from f0ck.items where id > ?);" - + "select id from f0ck.items where id = (select max(id) from f0ck.items where id < ?)", - user: "select id, mime, size, src, stamp, userchannel, username, usernetwork from f0ck.items where username = ? limit ?" + item: "select id, mime, size, src, stamp, userchannel, username, usernetwork from items where id = ? limit 1;" + + "select id from items where id = (select min(id) from items where id > ?);" + + "select id from items where id = (select max(id) from items where id < ?)", + p: (trend, order) => `select id, mime from items where id ${trend} ? order by id ${order} limit ?`, + user: "select id, mime, size, src, stamp, userchannel, username, usernetwork from items where username = ? limit ?" }; diff --git a/src/inc/routes/inc/index.mjs b/src/inc/routes/inc/index.mjs index 768eb0b..1f38d23 100644 --- a/src/inc/routes/inc/index.mjs +++ b/src/inc/routes/inc/index.mjs @@ -1,3 +1,3 @@ export const queries = { - items: "select id, mime from f0ck.items order by id desc limit 72" + items: "select id, mime from items order by id desc limit 72" }; diff --git a/src/inc/routes/index.mjs b/src/inc/routes/index.mjs index 3267232..b1ea508 100644 --- a/src/inc/routes/index.mjs +++ b/src/inc/routes/index.mjs @@ -7,8 +7,8 @@ import { queries } from "./inc/index"; const template = fs.readFileSync("./views/index.hbs", "utf-8"); -router.get(/^\/$/, async (req, res) => { - const db = await sql; +router.get(/^\/(page\/[0-9]+)?$/, async (req, res) => { + const db = await sql.getConnection(); try { const rows = await db.query(queries.items); @@ -21,4 +21,5 @@ router.get(/^\/$/, async (req, res) => { .writeHead(500) .end(JSON.stringify(err), 'utf-8'); } + db.end(); }); diff --git a/src/inc/sql.mjs b/src/inc/sql.mjs index 6ed19fd..ea54329 100644 --- a/src/inc/sql.mjs +++ b/src/inc/sql.mjs @@ -1,4 +1,4 @@ import mariadb from "mariadb"; import cfg from "../../config.json"; -export default mariadb.createPool(cfg.sql).getConnection(); +export default mariadb.createPool(cfg.sql);//.getConnection();