aboutsummaryrefslogtreecommitdiffstats
path: root/packages/trpc/routers/importSessions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/trpc/routers/importSessions.ts')
-rw-r--r--packages/trpc/routers/importSessions.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/packages/trpc/routers/importSessions.ts b/packages/trpc/routers/importSessions.ts
new file mode 100644
index 00000000..4bdc4f29
--- /dev/null
+++ b/packages/trpc/routers/importSessions.ts
@@ -0,0 +1,48 @@
+import { z } from "zod";
+
+import {
+ zCreateImportSessionRequestSchema,
+ zDeleteImportSessionRequestSchema,
+ zGetImportSessionStatsRequestSchema,
+ zImportSessionWithStatsSchema,
+ zListImportSessionsRequestSchema,
+ zListImportSessionsResponseSchema,
+} from "@karakeep/shared/types/importSessions";
+
+import { authedProcedure, router } from "../index";
+import { ImportSession } from "../models/importSessions";
+
+export const importSessionsRouter = router({
+ createImportSession: authedProcedure
+ .input(zCreateImportSessionRequestSchema)
+ .output(z.object({ id: z.string() }))
+ .mutation(async ({ input, ctx }) => {
+ const session = await ImportSession.create(ctx, input);
+ return { id: session.session.id };
+ }),
+
+ getImportSessionStats: authedProcedure
+ .input(zGetImportSessionStatsRequestSchema)
+ .output(zImportSessionWithStatsSchema)
+ .query(async ({ input, ctx }) => {
+ const session = await ImportSession.fromId(ctx, input.importSessionId);
+ return await session.getWithStats();
+ }),
+
+ listImportSessions: authedProcedure
+ .input(zListImportSessionsRequestSchema)
+ .output(zListImportSessionsResponseSchema)
+ .query(async ({ ctx }) => {
+ const sessions = await ImportSession.getAllWithStats(ctx);
+ return { sessions };
+ }),
+
+ deleteImportSession: authedProcedure
+ .input(zDeleteImportSessionRequestSchema)
+ .output(z.object({ success: z.boolean() }))
+ .mutation(async ({ input, ctx }) => {
+ const session = await ImportSession.fromId(ctx, input.importSessionId);
+ await session.delete();
+ return { success: true };
+ }),
+});