import { ACCOUNT_ACCESS } from '@prisma/client'; import prisma_client from '~~/prisma/prisma.client'; import { fullDBUser, FullDBUser } from './service.types'; import { UtilService } from './util.service'; const config = useRuntimeConfig(); export default class AuthService { async getFullUserBySupabaseId(supabase_uid: string): Promise { return prisma_client.user.findFirst({ where: { supabase_uid }, ...fullDBUser }); } async getUserById(user_id: number): Promise { return prisma_client.user.findFirstOrThrow({ where: { id: user_id }, ...fullDBUser }); } async createUser( supabase_uid: string, display_name: string, email: string ): Promise { const trialPlan = await prisma_client.plan.findFirstOrThrow({ where: { name: config.initialPlanName}}); return prisma_client.user.create({ data:{ supabase_uid: supabase_uid, display_name: display_name, email: email, memberships: { create: { account: { create: { name: display_name, current_period_ends: UtilService.addMonths(new Date(), config.initialPlanActiveMonths), plan_id: trialPlan.id, features: trialPlan.features, max_notes: trialPlan.max_notes, max_members: trialPlan.max_members, plan_name: trialPlan.name, } }, access: ACCOUNT_ACCESS.OWNER } } }, ...fullDBUser }); } async deleteUser(user_id: number): Promise { return prisma_client.user.delete({ where: { id: user_id }, ...fullDBUser }); } }