diff --git a/src/actions/stats.ts b/src/actions/stats.ts index 8e35250..06f778f 100644 --- a/src/actions/stats.ts +++ b/src/actions/stats.ts @@ -119,8 +119,23 @@ export async function getGatewayConfig(page?: number, filters?: { page = filters?.mac ? 1 : Math.max(1, page || 1) + const condition = filters ? and( + filters.mac ? eq(gateway.macaddr, filters.mac) : undefined, + filters.public ? eq(edge.public, filters.public) : undefined, + filters.city ? eq(cityhash.city, filters.city) : undefined, + filters.user ? eq(gateway.user, filters.user) : undefined, + filters.inner_ip ? eq(gateway.network, filters.inner_ip) : undefined, + ) : undefined + const [total, result] = await Promise.all([ - drizzle.$count(gateway, filters?.mac ? eq(gateway.macaddr, filters?.mac) : undefined), + drizzle + .select({ + value: count(), + }) + .from(gateway) + .leftJoin(cityhash, eq(cityhash.hash, gateway.cityhash)) + .leftJoin(edge, eq(edge.macaddr, gateway.edge)) + .where(condition), drizzle .select({ city: cityhash.city, @@ -134,13 +149,7 @@ export async function getGatewayConfig(page?: number, filters?: { .from(gateway) .leftJoin(cityhash, eq(cityhash.hash, gateway.cityhash)) .leftJoin(edge, eq(edge.macaddr, gateway.edge)) - .where(filters ? and( - filters.mac ? eq(gateway.macaddr, filters.mac) : undefined, - filters.public ? eq(edge.public, filters.public) : undefined, - filters.city ? eq(cityhash.city, filters.city) : undefined, - filters.user ? eq(gateway.user, filters.user) : undefined, - filters.inner_ip ? eq(gateway.network, filters.inner_ip) : undefined, - ) : undefined) + .where(condition) .orderBy(sql`inet_aton(gateway.inner_ip)`) .offset((page - 1) * 250) .limit(250), @@ -148,7 +157,7 @@ export async function getGatewayConfig(page?: number, filters?: { return { success: true, data: { - total, + total: total[0].value, page, size: 250, items: result,