From 59d9d0f6841e7acc6d3f9d296d30829f1c5140e6 Mon Sep 17 00:00:00 2001 From: Michael Dausmann Date: Fri, 7 Apr 2023 00:02:59 +1000 Subject: [PATCH] refactor service types to use Prisma.validator --- lib/services/account.service.ts | 14 ++++---------- lib/services/auth.service.ts | 21 +++++++++------------ lib/services/service.types.ts | 30 +++++++++++++++++++++++++----- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/lib/services/account.service.ts b/lib/services/account.service.ts index 3229e04..d663073 100644 --- a/lib/services/account.service.ts +++ b/lib/services/account.service.ts @@ -1,23 +1,19 @@ import { ACCOUNT_ACCESS } from '@prisma/client'; import prisma_client from '~~/prisma/prisma.client'; -import { AccountWithMembers, MembershipWithAccount, MembershipWithUser } from './service.types'; +import { accountWithMembers, AccountWithMembers, membershipWithAccount, MembershipWithAccount, membershipWithUser, MembershipWithUser } from './service.types'; export default class AccountService { async getAccountById(account_id: number): Promise { return prisma_client.account.findFirstOrThrow({ where: { id: account_id }, - include: { members: {include: { - user: true - }} } + ...accountWithMembers }); } async getAccountMembers(account_id: number): Promise { return prisma_client.membership.findMany({ where: { account_id }, - include: { - user: true - } + ...membershipWithUser }); } @@ -87,9 +83,7 @@ export default class AccountService { account_id, access: ACCOUNT_ACCESS.READ_ONLY }, - include: { - account: true - } + ...membershipWithAccount }); } diff --git a/lib/services/auth.service.ts b/lib/services/auth.service.ts index b8c4991..ae25f27 100644 --- a/lib/services/auth.service.ts +++ b/lib/services/auth.service.ts @@ -1,6 +1,6 @@ import { ACCOUNT_ACCESS } from '@prisma/client'; import prisma_client from '~~/prisma/prisma.client'; -import { FullDBUser } from './service.types'; +import { fullDBUser, FullDBUser } from './service.types'; import { UtilService } from './util.service'; const config = useRuntimeConfig(); @@ -9,18 +9,14 @@ export default class AuthService { async getFullUserBySupabaseId(supabase_uid: string): Promise { return prisma_client.user.findFirst({ where: { supabase_uid }, - include: { memberships: {include: { - account: true - }}} + ...fullDBUser }); } async getUserById(user_id: number): Promise { return prisma_client.user.findFirstOrThrow({ where: { id: user_id }, - include: { memberships: {include: { - account: true - }}} + ...fullDBUser }); } @@ -48,13 +44,14 @@ export default class AuthService { } } }, - include: { memberships: {include: { - account: true - }}} + ...fullDBUser }); } - async deleteUser(user_id: number) { - return prisma_client.user.delete({ where: { id: user_id } }); + async deleteUser(user_id: number): Promise { + return prisma_client.user.delete({ + where: { id: user_id }, + ...fullDBUser + }); } } diff --git a/lib/services/service.types.ts b/lib/services/service.types.ts index adf32a3..0ae51c9 100644 --- a/lib/services/service.types.ts +++ b/lib/services/service.types.ts @@ -1,5 +1,25 @@ -import { User, Membership, Account } from '@prisma/client'; -export type MembershipWithAccount = (Membership & {account: Account}); -export type FullDBUser = (User & { memberships: MembershipWithAccount[]; }); -export type MembershipWithUser = (Membership & { user: User}); -export type AccountWithMembers = (Account & {members: MembershipWithUser[]}); \ No newline at end of file +import { Prisma } from '@prisma/client'; + +export const membershipWithAccount = Prisma.validator()({ + include: { account: true }, +}) +export type MembershipWithAccount = Prisma.MembershipGetPayload + +export const membershipWithUser = Prisma.validator()({ + include: { user: true }, +}) +export type MembershipWithUser = Prisma.MembershipGetPayload + +export const fullDBUser = Prisma.validator()({ + include: { memberships: {include: { + account: true + }}} +}); +export type FullDBUser = Prisma.UserGetPayload //TODO - I wonder if this could be replaced by just user level info + +export const accountWithMembers = Prisma.validator()({ + include: { members: {include: { + user: true + }} } +}) +export type AccountWithMembers = Prisma.AccountGetPayload //TODO - I wonder if this could just be a list of full memberships