lobe-chat

Форк
0
57 строк · 1.6 Кб
1
import { TRPCError } from '@trpc/server';
2
import { z } from 'zod';
3

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';
8

9
const importProcedure = authedProcedure.use(async (opts) => {
10
  const { ctx } = opts;
11
  const dataImporterService = new DataImporterService(ctx.userId);
12

13
  return opts.next({
14
    ctx: { dataImporterService },
15
  });
16
});
17

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;
23

24
      try {
25
        const s3 = new S3();
26
        const dataStr = await s3.getFileContent(input.pathname);
27
        data = JSON.parse(dataStr);
28
      } catch {
29
        data = undefined;
30
      }
31

32
      if (!data) {
33
        throw new TRPCError({
34
          code: 'BAD_REQUEST',
35
          message: `Failed to read file at ${input.pathname}`,
36
        });
37
      }
38

39
      return ctx.dataImporterService.importData(data);
40
    }),
41

42
  importByPost: importProcedure
43
    .input(
44
      z.object({
45
        data: z.object({
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(),
50
          version: z.number(),
51
        }),
52
      }),
53
    )
54
    .mutation(async ({ input, ctx }): Promise<ImportResults> => {
55
      return ctx.dataImporterService.importData(input.data);
56
    }),
57
});
58

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.