Files
stats/packages/trpc/src/routers/report.ts
2024-04-27 09:56:01 +02:00

75 lines
1.9 KiB
TypeScript

import { z } from 'zod';
import { db } from '@openpanel/db';
import { zChartInput } from '@openpanel/validation';
import { createTRPCRouter, protectedProcedure } from '../trpc';
export const reportRouter = createTRPCRouter({
create: protectedProcedure
.input(
z.object({
report: zChartInput.omit({ projectId: true }),
dashboardId: z.string(),
})
)
.mutation(async ({ input: { report, dashboardId } }) => {
const dashboard = await db.dashboard.findUniqueOrThrow({
where: {
id: dashboardId,
},
});
return db.report.create({
data: {
projectId: dashboard.projectId,
dashboardId,
name: report.name,
events: report.events,
interval: report.interval,
breakdowns: report.breakdowns,
chartType: report.chartType,
lineType: report.lineType,
range: report.range === 'custom' ? '30d' : report.range,
formula: report.formula,
},
});
}),
update: protectedProcedure
.input(
z.object({
reportId: z.string(),
report: zChartInput.omit({ projectId: true }),
})
)
.mutation(({ input: { report, reportId } }) => {
return db.report.update({
where: {
id: reportId,
},
data: {
name: report.name,
events: report.events,
interval: report.interval,
breakdowns: report.breakdowns,
chartType: report.chartType,
lineType: report.lineType,
range: report.range === 'custom' ? '30d' : report.range,
formula: report.formula,
},
});
}),
delete: protectedProcedure
.input(
z.object({
reportId: z.string(),
})
)
.mutation(({ input: { reportId } }) => {
return db.report.delete({
where: {
id: reportId,
},
});
}),
});