diff --git a/src/app/admin/logs/_lib/load-ignored-logs.ts b/src/app/admin/logs/_lib/load-ignored-logs.ts index e9083100..2abe8af7 100644 --- a/src/app/admin/logs/_lib/load-ignored-logs.ts +++ b/src/app/admin/logs/_lib/load-ignored-logs.ts @@ -158,3 +158,74 @@ export async function loadCommandLogList({ return { rows, ...pagination }; } + +export type TradeLogListRow = { + id: number; + userOneName: string; + userTwoName: string; + status: string; + timestamp: number; +}; + +export async function loadTradeLogList({ + searchParams, + defaultPerPage = 50, +}: ListParamsInput) { + await requireLogsView(); + + const rawParams = await searchParams; + const { search, page, perPage } = parsePageParams(rawParams, defaultPerPage); + const offset = (page - 1) * perPage; + const like = `%${search}%`; + + type RawRow = { + id: number; + timestamp: number; + userOneName: string | null; + userTwoName: string | null; + }; + + const [rawRows, countRows] = search + ? await Promise.all([ + prisma.$queryRaw` + SELECT t.id, t.timestamp, + u1.username AS userOneName, u2.username AS userTwoName + FROM room_trade_log t + LEFT JOIN users u1 ON u1.id = t.user_one_id + LEFT JOIN users u2 ON u2.id = t.user_two_id + WHERE u1.username LIKE ${like} OR u2.username LIKE ${like} + ORDER BY t.timestamp DESC + LIMIT ${perPage} OFFSET ${offset}`, + prisma.$queryRaw<{ count: bigint }[]>` + SELECT COUNT(*) AS count + FROM room_trade_log t + LEFT JOIN users u1 ON u1.id = t.user_one_id + LEFT JOIN users u2 ON u2.id = t.user_two_id + WHERE u1.username LIKE ${like} OR u2.username LIKE ${like}`, + ]) + : await Promise.all([ + prisma.$queryRaw` + SELECT t.id, t.timestamp, + u1.username AS userOneName, u2.username AS userTwoName + FROM room_trade_log t + LEFT JOIN users u1 ON u1.id = t.user_one_id + LEFT JOIN users u2 ON u2.id = t.user_two_id + ORDER BY t.timestamp DESC + LIMIT ${perPage} OFFSET ${offset}`, + prisma.$queryRaw<{ count: bigint }[]>` + SELECT COUNT(*) AS count FROM room_trade_log`, + ]); + + const total = Number(countRows[0]?.count ?? 0); + const pagination = calcPagination(total, page, perPage); + const rows: TradeLogListRow[] = rawRows.map((row) => ({ + id: row.id, + userOneName: row.userOneName ?? "-", + userTwoName: row.userTwoName ?? "-", + // room_trade_log only stores completed trades; no status column exists + status: "completed", + timestamp: row.timestamp, + })); + + return { rows, ...pagination }; +} diff --git a/src/app/admin/logs/trades/page.tsx b/src/app/admin/logs/trades/page.tsx index 69e5cd0e..2c470b9c 100644 --- a/src/app/admin/logs/trades/page.tsx +++ b/src/app/admin/logs/trades/page.tsx @@ -1,35 +1,13 @@ -import { fetchAdminList } from "@/lib/admin-list"; -import { PERMS } from "@/lib/permissions"; +import { loadTradeLogList } from "../_lib/load-ignored-logs"; import { TradesTable } from "./trades-table"; export default async function TradeLogsPage({ - params: paramsPromise, searchParams, }: { params: Promise<{ locale: string }>; searchParams: Promise>; }) { - const result = await fetchAdminList( - { - permission: PERMS.LOGS_VIEW, - model: "trade", - searchFields: ["userOne.username", "userTwo.username"], - defaultPerPage: 50, - include: { - userOne: { select: { username: true } }, - userTwo: { select: { username: true } }, - }, - mapRow: (t) => ({ - id: t.id, - userOneName: t.userOne.username, - userTwoName: t.userTwo.username, - status: t.status, - timestamp: t.timestamp, - }), - }, - paramsPromise, - searchParams, - ); + const result = await loadTradeLogList({ searchParams, defaultPerPage: 50 }); return (