From 0776130d378a81b5d7c4af45ae7242e4b30e3313 Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Tue, 4 Feb 2025 19:21:19 +0000 Subject: [PATCH] get channels with sub api --- .../controllers/guild/sub.api.controller.ts | 24 ++++++++++++++++++- src/utils/datatable.ts | 13 +++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/server/controllers/guild/sub.api.controller.ts b/src/server/controllers/guild/sub.api.controller.ts index 1e9adac..e8af317 100644 --- a/src/server/controllers/guild/sub.api.controller.ts +++ b/src/server/controllers/guild/sub.api.controller.ts @@ -1,6 +1,7 @@ import { NextFunction, Request, Response } from "express"; import { buildDatatableQuery } from "@utils/datatable"; import { db } from "@db/db"; +import { client as bot } from "@bot/bot"; const isPostgres = db.client.config.client === "pg"; @@ -11,12 +12,33 @@ export const datatable = async (request: Request, response: Response) => { "subscriptions" ); + query.select("subscriptions.*") + .leftJoin("channels", "subscriptions.id", "=", "channels.subscription_id") + .select(db.raw(isPostgres + ? "json_agg(channels.channel_id) as channels" + :"JSON_GROUP_ARRAY(channels.channel_id) as channels" + )) + .groupBy("subscriptions.id") + const data = await query.where({ guild_id: request.params.guildId }); + data.forEach((item: any) => { + item.channels = item.channels === "[null]" + ? [] + : JSON.parse(item.channels); + + // item.channels.forEach((channel: any) => { + // channel = { + // "channel_id": channel, + // "name": bot.channels.cache.filter(a => a.id === id).first().name; + // } + // }) + }); + response.json({ data, + recordsFiltered, recordsTotal, - recordsFiltered }); } catch (error) { diff --git a/src/utils/datatable.ts b/src/utils/datatable.ts index 36d04f6..4a32a91 100644 --- a/src/utils/datatable.ts +++ b/src/utils/datatable.ts @@ -35,18 +35,11 @@ export const buildDatatableQuery = async (request: { query: RequestQuery }, tabl .filter(column => column.searchable === "true") .forEach((col, index) => index === 0 - ? builder.where(col.data, "like", `%${search}%`) - : builder.orWhere(col.data, "like", `%${search}%`) + ? builder.where(`${tableName}.${col.data}`, "like", `%${search}%`) + : builder.orWhere(`${tableName}.${col.data}`, "like", `%${search}%`) ); }); console.log(query.toSQL()); - // Object.keys(request.query.columns).forEach(key => { - // const column = request.query.columns[key]; - // console.log(JSON.stringify(column)); - // if (column.searchable === "true") { - // query = query.where(column.data, "like", `%${search}%`); - // } - // }) } const recordsTotalResult = await db(tableName).count("* as count").first(); @@ -55,7 +48,7 @@ export const buildDatatableQuery = async (request: { query: RequestQuery }, tabl const recordsFilteredResult = await query.clone().count("* as count").first(); const recordsFiltered = recordsFilteredResult ? recordsFilteredResult.count : 0; - query = query.orderBy(order, direction).limit(size).offset(start); + query = query.orderBy(`${tableName}.${order}`, direction).limit(size).offset(start); return { query,