From 098805ef25bc28d9247e0dc6dacae42625e3d02f Mon Sep 17 00:00:00 2001 From: David Corbitt Date: Sat, 12 Aug 2023 00:03:06 -0700 Subject: [PATCH] Create loggedCalls.router --- app/src/components/requestLogs/TableRow.tsx | 2 +- app/src/pages/request-logs/index.tsx | 9 ------ app/src/server/api/root.router.ts | 2 ++ .../server/api/routers/dashboard.router.ts | 30 ++----------------- .../server/api/routers/loggedCalls.router.ts | 28 +++++++++++++++++ app/src/utils/hooks.ts | 2 +- 6 files changed, 35 insertions(+), 38 deletions(-) create mode 100644 app/src/server/api/routers/loggedCalls.router.ts diff --git a/app/src/components/requestLogs/TableRow.tsx b/app/src/components/requestLogs/TableRow.tsx index 00930a6..85fc6dd 100644 --- a/app/src/components/requestLogs/TableRow.tsx +++ b/app/src/components/requestLogs/TableRow.tsx @@ -20,7 +20,7 @@ import Link from "next/link"; import { type RouterOutputs } from "~/utils/api"; import { FormattedJson } from "./FormattedJson"; -type LoggedCall = RouterOutputs["dashboard"]["loggedCalls"]["calls"][0]; +type LoggedCall = RouterOutputs["loggedCalls"]["list"]["calls"][0]; export const TableHeader = () => ( diff --git a/app/src/pages/request-logs/index.tsx b/app/src/pages/request-logs/index.tsx index b0ff12d..617d551 100644 --- a/app/src/pages/request-logs/index.tsx +++ b/app/src/pages/request-logs/index.tsx @@ -3,19 +3,10 @@ import { Text, VStack, Breadcrumb, BreadcrumbItem } from "@chakra-ui/react"; import AppShell from "~/components/nav/AppShell"; import PageHeaderContainer from "~/components/nav/PageHeaderContainer"; import ProjectBreadcrumbContents from "~/components/nav/ProjectBreadcrumbContents"; -import { useSelectedProject } from "~/utils/hooks"; -import { api } from "~/utils/api"; import LoggedCallTable from "~/components/requestLogs/LoggedCallsTable"; import LoggedCallsPaginator from "~/components/requestLogs/LoggedCallsPaginator"; export default function LoggedCalls() { - const { data: selectedProject } = useSelectedProject(); - - const stats = api.dashboard.stats.useQuery( - { projectId: selectedProject?.id ?? "" }, - { enabled: !!selectedProject }, - ); - return ( diff --git a/app/src/server/api/root.router.ts b/app/src/server/api/root.router.ts index df7184a..fa03859 100644 --- a/app/src/server/api/root.router.ts +++ b/app/src/server/api/root.router.ts @@ -11,6 +11,7 @@ import { datasetEntries } from "./routers/datasetEntries.router"; import { externalApiRouter } from "./routers/externalApi.router"; import { projectsRouter } from "./routers/projects.router"; import { dashboardRouter } from "./routers/dashboard.router"; +import { loggedCallsRouter } from "./routers/loggedCalls.router"; /** * This is the primary router for your server. @@ -29,6 +30,7 @@ export const appRouter = createTRPCRouter({ datasetEntries: datasetEntries, projects: projectsRouter, dashboard: dashboardRouter, + loggedCalls: loggedCallsRouter, externalApi: externalApiRouter, }); diff --git a/app/src/server/api/routers/dashboard.router.ts b/app/src/server/api/routers/dashboard.router.ts index dcc6bf3..e0386b2 100644 --- a/app/src/server/api/routers/dashboard.router.ts +++ b/app/src/server/api/routers/dashboard.router.ts @@ -1,12 +1,12 @@ import { sql } from "kysely"; import { z } from "zod"; -import { createTRPCRouter, publicProcedure } from "~/server/api/trpc"; -import { kysely, prisma } from "~/server/db"; +import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; +import { kysely } from "~/server/db"; import { requireCanViewProject } from "~/utils/accessControl"; import dayjs from "~/utils/dayjs"; export const dashboardRouter = createTRPCRouter({ - stats: publicProcedure + stats: protectedProcedure .input( z.object({ // TODO: actually take startDate into account @@ -105,28 +105,4 @@ export const dashboardRouter = createTRPCRouter({ return { periods: backfilledPeriods, totals, errors: namedErrors }; }), - - // TODO useInfiniteQuery - // https://discord.com/channels/966627436387266600/1122258443886153758/1122258443886153758 - loggedCalls: publicProcedure - .input(z.object({ projectId: z.string(), page: z.number(), pageSize: z.number() })) - .query(async ({ input, ctx }) => { - const { projectId, page, pageSize } = input; - - await requireCanViewProject(projectId, ctx); - - const calls = await prisma.loggedCall.findMany({ - where: { projectId }, - orderBy: { requestedAt: "desc" }, - include: { tags: true, modelResponse: true }, - skip: (page - 1) * pageSize, - take: pageSize, - }); - - const count = await prisma.loggedCall.count({ - where: { projectId }, - }); - - return { count, calls }; - }), }); diff --git a/app/src/server/api/routers/loggedCalls.router.ts b/app/src/server/api/routers/loggedCalls.router.ts new file mode 100644 index 0000000..dc8d661 --- /dev/null +++ b/app/src/server/api/routers/loggedCalls.router.ts @@ -0,0 +1,28 @@ +import { z } from "zod"; +import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; +import { prisma } from "~/server/db"; +import { requireCanViewProject } from "~/utils/accessControl"; + +export const loggedCallsRouter = createTRPCRouter({ + list: protectedProcedure + .input(z.object({ projectId: z.string(), page: z.number(), pageSize: z.number() })) + .query(async ({ input, ctx }) => { + const { projectId, page, pageSize } = input; + + await requireCanViewProject(projectId, ctx); + + const calls = await prisma.loggedCall.findMany({ + where: { projectId }, + orderBy: { requestedAt: "desc" }, + include: { tags: true, modelResponse: true }, + skip: (page - 1) * pageSize, + take: pageSize, + }); + + const count = await prisma.loggedCall.count({ + where: { projectId }, + }); + + return { count, calls }; + }), +}); diff --git a/app/src/utils/hooks.ts b/app/src/utils/hooks.ts index 33fc4f8..b975d1d 100644 --- a/app/src/utils/hooks.ts +++ b/app/src/utils/hooks.ts @@ -180,7 +180,7 @@ export const useLoggedCalls = () => { const selectedProjectId = useAppStore((state) => state.selectedProjectId); const { page, pageSize } = usePageParams(); - return api.dashboard.loggedCalls.useQuery( + return api.loggedCalls.list.useQuery( { projectId: selectedProjectId ?? "", page, pageSize }, { enabled: !!selectedProjectId }, );