COURTRIX / src /server /auth /service.ts
Ali-Developments's picture
Upload 125 files
ad79323 verified
Raw
History Blame Contribute Delete
2.32 kB
import { Prisma } from "@prisma/client";
import { normalizeEmail } from "@/lib/utils";
import { createSession, setSessionCookie } from "@/server/auth/session";
import { db } from "@/server/db";
import { AppError, isPrismaUniqueConstraintError } from "@/server/errors";
import type { LoginInput, RegisterInput } from "@/server/validation/auth";
import { hashPassword, verifyPassword } from "@/server/auth/password";
function sanitizeUser(user: {
id: string;
firstName: string;
lastName: string;
email: string;
}) {
return {
id: user.id,
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
};
}
export async function registerUser(input: RegisterInput) {
const data = {
firstName: input.firstName.trim(),
lastName: input.lastName.trim(),
email: normalizeEmail(input.email),
passwordHash: await hashPassword(input.password),
};
try {
const user = await db.user.create({
data,
select: {
id: true,
firstName: true,
lastName: true,
email: true,
},
});
const session = await createSession(user.id);
await setSessionCookie(session.token, session.expiresAt);
return sanitizeUser(user);
} catch (error) {
if (isPrismaUniqueConstraintError(error, "email")) {
throw new AppError("البريد الإلكتروني ده مستخدم قبل كده.", 409);
}
throw error;
}
}
export async function loginUser(input: LoginInput) {
const email = normalizeEmail(input.email);
const user = await db.user.findUnique({
where: { email },
});
if (!user) {
throw new AppError("البريد الإلكتروني أو كلمة السر مش صح.", 401);
}
const passwordMatches = await verifyPassword(input.password, user.passwordHash);
if (!passwordMatches) {
throw new AppError("البريد الإلكتروني أو كلمة السر مش صح.", 401);
}
const session = await createSession(user.id);
await setSessionCookie(session.token, session.expiresAt);
return sanitizeUser(user);
}
export function sanitizePrismaError(error: unknown) {
if (error instanceof Prisma.PrismaClientKnownRequestError) {
throw new AppError("حصل خطأ في قاعدة البيانات، حاول تاني.", 500);
}
throw error;
}