Files
litlyx/dashboard/server/api/auth/confirm_email.ts
2025-11-28 16:49:20 +01:00

49 lines
1.6 KiB
TypeScript

import { UserModel } from '@schema/UserSchema';
import { PasswordModel } from '@schema/PasswordSchema';
import { RegisterModel } from '~/shared/schema/RegisterSchema';
export default defineEventHandler(async event => {
//TODO: SELFHOST
const { code } = getQuery(event);
const registerTarget = await RegisterModel.findOne({ code });
if (!registerTarget) throw createError({ status: 400, message: 'Code not valid' });
const userExist = await UserModel.exists({ email: registerTarget.email });
if (userExist) throw createError({ status: 400, message: 'Email already registered' });
await PasswordModel.updateOne({ email: registerTarget.email }, { password: registerTarget.password }, { upsert: true });
const user = await UserModel.create({ email: registerTarget.email, given_name: '', name: 'EmailLogin', locale: '', picture: '', created_at: Date.now() });
const tRpc = useTRPC();
const customer = await tRpc.payments.customer.create.mutate({ email: user.email });
await tRpc.payments.subscription.activate.mutate({ user_id: user._id.toString(), customer_id: customer.customer_id, plan_tag: 'FREE_TRIAL_LITLYX_PRO' });
setImmediate(() => {
tRpc.emails.brevo.addToBrevoList.mutate({ email: user.email });
});
setImmediate(() => {
tRpc.emails.email.send_trial_1_started.mutate({ email: user.email });
});
await replaceUserSession(event, {
user: {
email: user.email,
name: user.name
},
secure: {
user_id: user.id
},
v: '0.0.1'
});
return sendRedirect(event, '/');
});