74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
import { createTRPCRouter, protectedProcedure } from '@/trpc/api/trpc';
|
|
import { z } from 'zod';
|
|
|
|
import { db } from '@openpanel/db';
|
|
import { zChartInput } from '@openpanel/validation';
|
|
|
|
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: {
|
|
project_id: dashboard.project_id,
|
|
dashboard_id: dashboardId,
|
|
name: report.name,
|
|
events: report.events,
|
|
interval: report.interval,
|
|
breakdowns: report.breakdowns,
|
|
chart_type: report.chartType,
|
|
line_type: report.lineType,
|
|
range: 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,
|
|
chart_type: report.chartType,
|
|
line_type: report.lineType,
|
|
range: report.range,
|
|
formula: report.formula,
|
|
},
|
|
});
|
|
}),
|
|
delete: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
reportId: z.string(),
|
|
})
|
|
)
|
|
.mutation(({ input: { reportId } }) => {
|
|
return db.report.delete({
|
|
where: {
|
|
id: reportId,
|
|
},
|
|
});
|
|
}),
|
|
});
|