refactor: migrate authentication from Supabase to Better Auth and update Prisma schema models

This commit is contained in:
Jose Selesan
2026-04-16 20:05:08 -03:00
parent bd30b32b49
commit f158845279
28 changed files with 1275 additions and 608 deletions

View File

@@ -10,6 +10,7 @@ import type {
} from '@repo/api-contract';
import type { User as SupabaseAuthUser } from '@supabase/supabase-js';
import { v7 as uuidv7 } from 'uuid';
import { auth } from '@/lib/auth';
const OTP_LENGTH = 6;
const OTP_TTL_MINUTES = Number(Bun.env.ONBOARDING_OTP_TTL_MINUTES ?? 10);
@@ -404,11 +405,11 @@ export async function completeOnboarding(input: OnboardingCompleteInput) {
});
if (!onboardingRequest) {
throw new OnboardingError('Solicitud de onboarding invalida o expirada.', 400);
throw new OnboardingError('Solicitud de onboarding inválida o expirada.', 400);
}
if (onboardingRequest.otpExpiresAt < new Date()) {
throw new OnboardingError('La sesion de onboarding expiro. Solicita un nuevo OTP.', 400);
throw new OnboardingError('La sesión de onboarding expiró. Solicita un nuevo OTP.', 400);
}
if (!onboardingRequest.emailVerifiedAt) {
@@ -428,28 +429,18 @@ export async function completeOnboarding(input: OnboardingCompleteInput) {
throw new OnboardingError('El plan seleccionado no existe.', 400);
}
const supabaseUserId = await ensureSupabaseUser({
email: onboardingRequest.email,
fullName: onboardingRequest.fullName,
password: input.password,
const { user } = await auth.api.signUpEmail({
asResponse: false,
body: {
email: onboardingRequest.email,
password: input.password,
name: onboardingRequest.fullName,
},
});
const complexSlug = await buildUniqueComplexSlug(input.complexName);
const result = await db.$transaction(async (tx) => {
const user = await tx.user.upsert({
where: { email: onboardingRequest.email },
update: {
fullName: onboardingRequest.fullName,
supabaseUserId,
},
create: {
id: uuidv7(),
fullName: onboardingRequest.fullName,
email: onboardingRequest.email,
supabaseUserId,
},
});
const complex = await tx.complex.create({
data: {
@@ -489,6 +480,5 @@ export async function completeOnboarding(input: OnboardingCompleteInput) {
return {
...result,
supabaseUserId,
};
}