Fix admin trade logs: wrong Prisma model and missing relations.

Load room_trade_log via SQL with user joins; status is always completed (no column in DB).

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-18 22:25:38 +02:00
1 parent afeabdad1b
commit 3dcd100c9f
2 files changed
+73 -24

No files matched your search

@@ -158,3 +158,74 @@ export async function loadCommandLogList({
return { rows, ...pagination }; 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<RawRow[]>`
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<RawRow[]>`
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 };
}
+2 -24
View File
@@ -1,35 +1,13 @@
import { fetchAdminList } from "@/lib/admin-list"; import { loadTradeLogList } from "../_lib/load-ignored-logs";
import { PERMS } from "@/lib/permissions";
import { TradesTable } from "./trades-table"; import { TradesTable } from "./trades-table";
export default async function TradeLogsPage({ export default async function TradeLogsPage({
params: paramsPromise,
searchParams, searchParams,
}: { }: {
params: Promise<{ locale: string }>; params: Promise<{ locale: string }>;
searchParams: Promise<Record<string, string>>; searchParams: Promise<Record<string, string>>;
}) { }) {
const result = await fetchAdminList( const result = await loadTradeLogList({ searchParams, defaultPerPage: 50 });
{
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,
);
return ( return (
<div className="space-y-6"> <div className="space-y-6">