refactor service types to use Prisma.validator

This commit is contained in:
Michael Dausmann
2023-04-07 00:02:59 +10:00
parent 5350a5c712
commit 59d9d0f684
3 changed files with 38 additions and 27 deletions

View File

@@ -1,23 +1,19 @@
import { ACCOUNT_ACCESS } from '@prisma/client'; import { ACCOUNT_ACCESS } from '@prisma/client';
import prisma_client from '~~/prisma/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 { export default class AccountService {
async getAccountById(account_id: number): Promise<AccountWithMembers> { async getAccountById(account_id: number): Promise<AccountWithMembers> {
return prisma_client.account.findFirstOrThrow({ return prisma_client.account.findFirstOrThrow({
where: { id: account_id }, where: { id: account_id },
include: { members: {include: { ...accountWithMembers
user: true
}} }
}); });
} }
async getAccountMembers(account_id: number): Promise<MembershipWithUser[]> { async getAccountMembers(account_id: number): Promise<MembershipWithUser[]> {
return prisma_client.membership.findMany({ return prisma_client.membership.findMany({
where: { account_id }, where: { account_id },
include: { ...membershipWithUser
user: true
}
}); });
} }
@@ -87,9 +83,7 @@ export default class AccountService {
account_id, account_id,
access: ACCOUNT_ACCESS.READ_ONLY access: ACCOUNT_ACCESS.READ_ONLY
}, },
include: { ...membershipWithAccount
account: true
}
}); });
} }

View File

@@ -1,6 +1,6 @@
import { ACCOUNT_ACCESS } from '@prisma/client'; import { ACCOUNT_ACCESS } from '@prisma/client';
import prisma_client from '~~/prisma/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'; import { UtilService } from './util.service';
const config = useRuntimeConfig(); const config = useRuntimeConfig();
@@ -9,18 +9,14 @@ export default class AuthService {
async getFullUserBySupabaseId(supabase_uid: string): Promise<FullDBUser | null> { async getFullUserBySupabaseId(supabase_uid: string): Promise<FullDBUser | null> {
return prisma_client.user.findFirst({ return prisma_client.user.findFirst({
where: { supabase_uid }, where: { supabase_uid },
include: { memberships: {include: { ...fullDBUser
account: true
}}}
}); });
} }
async getUserById(user_id: number): Promise<FullDBUser | null> { async getUserById(user_id: number): Promise<FullDBUser | null> {
return prisma_client.user.findFirstOrThrow({ return prisma_client.user.findFirstOrThrow({
where: { id: user_id }, where: { id: user_id },
include: { memberships: {include: { ...fullDBUser
account: true
}}}
}); });
} }
@@ -48,13 +44,14 @@ export default class AuthService {
} }
} }
}, },
include: { memberships: {include: { ...fullDBUser
account: true
}}}
}); });
} }
async deleteUser(user_id: number) { async deleteUser(user_id: number): Promise<FullDBUser> {
return prisma_client.user.delete({ where: { id: user_id } }); return prisma_client.user.delete({
where: { id: user_id },
...fullDBUser
});
} }
} }

View File

@@ -1,5 +1,25 @@
import { User, Membership, Account } from '@prisma/client'; import { Prisma } from '@prisma/client';
export type MembershipWithAccount = (Membership & {account: Account});
export type FullDBUser = (User & { memberships: MembershipWithAccount[]; }); export const membershipWithAccount = Prisma.validator<Prisma.MembershipArgs>()({
export type MembershipWithUser = (Membership & { user: User}); include: { account: true },
export type AccountWithMembers = (Account & {members: MembershipWithUser[]}); })
export type MembershipWithAccount = Prisma.MembershipGetPayload<typeof membershipWithAccount>
export const membershipWithUser = Prisma.validator<Prisma.MembershipArgs>()({
include: { user: true },
})
export type MembershipWithUser = Prisma.MembershipGetPayload<typeof membershipWithUser>
export const fullDBUser = Prisma.validator<Prisma.UserArgs>()({
include: { memberships: {include: {
account: true
}}}
});
export type FullDBUser = Prisma.UserGetPayload<typeof fullDBUser> //TODO - I wonder if this could be replaced by just user level info
export const accountWithMembers = Prisma.validator<Prisma.AccountArgs>()({
include: { members: {include: {
user: true
}} }
})
export type AccountWithMembers = Prisma.AccountGetPayload<typeof accountWithMembers> //TODO - I wonder if this could just be a list of full memberships