Merge branch 'refs/heads/maybe-rollback-to-remove-primeng'

# Conflicts:
#	frontend/bun.lockb
This commit is contained in:
2024-07-14 12:55:00 +02:00
24 changed files with 663 additions and 417 deletions

View File

@@ -24,7 +24,11 @@ export interface Driver {
): Promise<any[]>;
getTableData(
credentials: Credentials,
args: WithSortPagination<{ tableName: string; dbName: string }>,
args: WithSortPagination<{
tableName: string;
dbName: string;
whereQuery?: string;
}>,
): Promise<{
count: number;
data: Record<string, any>[];

View File

@@ -159,22 +159,31 @@ export class PostgresDriver implements Driver {
page,
sortDesc,
sortField,
}: WithSortPagination<{ tableName: string; dbName: string }>,
whereQuery,
}: WithSortPagination<{
tableName: string;
dbName: string;
whereQuery?: string;
}>,
) {
const sql = await this.queryRunner(credentials);
const offset = (perPage * page).toString();
const rows = sql`
SELECT COUNT(*)
FROM ${sql(dbName)}.${sql(tableName)}`;
const tables = sql`
const rowsQuery = `
SELECT COUNT(*)
FROM "${dbName}"."${tableName}"
${whereQuery ? `WHERE ${whereQuery}` : ""}`;
const tablesQuery = `
SELECT *
FROM ${sql(dbName)}.${sql(tableName)}
${sortField ? sql`ORDER BY ${sql(sortField)} ${sortDesc ? sql`DESC` : sql`ASC`}` : sql``}
FROM "${dbName}"."${tableName}"
${whereQuery ? `WHERE ${whereQuery}` : ""}
${sortField ? `ORDER BY "${sortField}" ${sortDesc ? "DESC" : "ASC"}` : ""}
LIMIT ${perPage} OFFSET ${offset}
`;
const rows = sql.unsafe(rowsQuery);
const tables = sql.unsafe(tablesQuery);
const [[count], data] = await Promise.all([rows, tables]);
void sql.end();

View File

@@ -95,7 +95,13 @@ const app = new Elysia({ prefix: "/api" })
"/databases/:dbName/tables/:tableName/data",
async ({ query, params, jwt, set, cookie: { auth } }) => {
const { tableName, dbName } = params;
const { perPage = "50", page = "0", sortField, sortDesc } = query;
const {
perPage = "50",
page = "0",
sortField,
sortDesc,
whereQuery,
} = query;
const credentials = await jwt.verify(auth.value);
if (!credentials) {
@@ -111,6 +117,7 @@ const app = new Elysia({ prefix: "/api" })
page: Number.parseInt(page, 10),
sortField,
sortDesc: sortDesc === "true",
whereQuery,
});
},
)