refactor table data query

This commit is contained in:
2024-07-07 01:17:29 +02:00
parent cc7d7d71b9
commit bf40c7d308

View File

@@ -1,6 +1,7 @@
import cors from "@elysiajs/cors"; import cors from "@elysiajs/cors";
import { Elysia } from "elysia"; import { Elysia } from "elysia";
import postgres from "postgres"; import postgres from "postgres";
const DB_URL = Bun.env.DB_URL; const DB_URL = Bun.env.DB_URL;
if (!DB_URL) { if (!DB_URL) {
@@ -30,26 +31,12 @@ const app = new Elysia({ prefix: "/api" })
.get("databases/:dbName/tables/:name/data", async ({ params, query }) => { .get("databases/:dbName/tables/:name/data", async ({ params, query }) => {
const { name, dbName } = params; const { name, dbName } = params;
const { perPage = "50", page = "0" } = query; const { perPage = "50", page = "0" } = query;
return getTableData({
const offset = ( tableName: name,
Number.parseInt(perPage, 10) * Number.parseInt(page, 10) dbName,
).toString(); perPage: Number.parseInt(perPage, 10),
page: Number.parseInt(page, 10),
const rows = sql` });
SELECT COUNT(*)
FROM ${sql(dbName)}.${sql(name)}`;
const tables = sql`
SELECT *
FROM ${sql(dbName)}.${sql(name)}
LIMIT ${perPage} OFFSET ${offset}`;
const [[count], data] = await Promise.all([rows, tables]);
return {
count: count.count,
data,
};
}) })
.get("db/tables/:name/columns", async ({ params, query }) => { .get("db/tables/:name/columns", async ({ params, query }) => {
const { name } = params; const { name } = params;
@@ -292,3 +279,32 @@ async function getDatabases() {
return result.map(({ nspname }) => nspname); return result.map(({ nspname }) => nspname);
} }
async function getTableData({
tableName,
dbName,
perPage,
page,
}: {
tableName: string;
dbName: string;
perPage: number;
page: number;
}) {
const offset = (perPage * page).toString();
const rows = sql`
SELECT COUNT(*)
FROM ${sql(dbName)}.${sql(tableName)}`;
const tables = sql`
SELECT *
FROM ${sql(dbName)}.${sql(tableName)}
LIMIT ${perPage} OFFSET ${offset}`;
const [[count], data] = await Promise.all([rows, tables]);
return {
count: count.count,
data,
};
}