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 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<AccountWithMembers> {
return prisma_client.account.findFirstOrThrow({
where: { id: account_id },
include: { members: {include: {
user: true
}} }
...accountWithMembers
});
}
async getAccountMembers(account_id: number): Promise<MembershipWithUser[]> {
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
});
}

View File

@@ -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<FullDBUser | null> {
return prisma_client.user.findFirst({
where: { supabase_uid },
include: { memberships: {include: {
account: true
}}}
...fullDBUser
});
}
async getUserById(user_id: number): Promise<FullDBUser | null> {
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<FullDBUser> {
return prisma_client.user.delete({
where: { id: user_id },
...fullDBUser
});
}
}

View File

@@ -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[]});
import { Prisma } from '@prisma/client';
export const membershipWithAccount = Prisma.validator<Prisma.MembershipArgs>()({
include: { account: true },
})
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