1
import { TRPCError } from '@trpc/server';
2
import { z } from 'zod';
4
import { authedProcedure, router } from '@/libs/trpc';
5
import { S3 } from '@/server/modules/S3';
6
import { DataImporterService } from '@/server/services/dataImporter';
7
import { ImportResults, ImporterEntryData } from '@/types/importer';
9
const importProcedure = authedProcedure.use(async (opts) => {
11
const dataImporterService = new DataImporterService(ctx.userId);
14
ctx: { dataImporterService },
18
export const importerRouter = router({
19
importByFile: importProcedure
20
.input(z.object({ pathname: z.string() }))
21
.mutation(async ({ input, ctx }): Promise<ImportResults> => {
22
let data: ImporterEntryData | undefined;
26
const dataStr = await s3.getFileContent(input.pathname);
27
data = JSON.parse(dataStr);
35
message: `Failed to read file at ${input.pathname}`,
39
return ctx.dataImporterService.importData(data);
42
importByPost: importProcedure
46
messages: z.array(z.any()).optional(),
47
sessionGroups: z.array(z.any()).optional(),
48
sessions: z.array(z.any()).optional(),
49
topics: z.array(z.any()).optional(),
54
.mutation(async ({ input, ctx }): Promise<ImportResults> => {
55
return ctx.dataImporterService.importData(input.data);