From 942aac691225f4895c159a0260890ad2c576e0c9 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Thu, 22 Feb 2024 15:32:40 +0000 Subject: feature: Add support for credentials registration and sign in --- packages/web/server/api/routers/users.ts | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 packages/web/server/api/routers/users.ts (limited to 'packages/web/server/api/routers/users.ts') diff --git a/packages/web/server/api/routers/users.ts b/packages/web/server/api/routers/users.ts new file mode 100644 index 00000000..aecec1d4 --- /dev/null +++ b/packages/web/server/api/routers/users.ts @@ -0,0 +1,45 @@ +import { zSignUpSchema } from "@/lib/types/api/users"; +import { publicProcedure, router } from "../trpc"; +import { Prisma, prisma } from "@hoarder/db"; +import { z } from "zod"; +import { hashPassword } from "@/server/auth"; +import { TRPCError } from "@trpc/server"; + +export const usersAppRouter = router({ + create: publicProcedure + .input(zSignUpSchema) + .output( + z.object({ + name: z.string(), + email: z.string(), + }), + ) + .mutation(async ({ input }) => { + try { + return await prisma.user.create({ + data: { + name: input.name, + email: input.email, + password: await hashPassword(input.password), + }, + select: { + name: true, + email: true, + }, + }); + } catch (e) { + if (e instanceof Prisma.PrismaClientKnownRequestError) { + if (e.code === "P2002") { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Email is already taken", + }); + } + } + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: "Something went wrong", + }); + } + }), +}); -- cgit v1.2.3-70-g09d2