Files
twenty_crm/server/src/core/user/user.resolver.ts
Jérémy M ca283a2196 feat: prisma typed select (#347)
* feat: wip prisma gql select

* feat: stronger api using decorator

* feat: add PrismaSelect everywhere

* fix: remove unused

* fix: remove seed debug
2023-06-22 11:17:31 +02:00

42 lines
1.3 KiB
TypeScript

import { Args, Resolver, Query } from '@nestjs/graphql';
import { UserService } from './user.service';
import { FindManyUserArgs } from 'src/core/@generated/user/find-many-user.args';
import { Workspace } from '@prisma/client';
import { AuthWorkspace } from 'src/decorators/auth-workspace.decorator';
import { User } from 'src/core/@generated/user/user.model';
import { ExceptionFilter } from 'src/filters/exception.filter';
import { UseFilters, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
import {
PrismaSelect,
PrismaSelector,
} from 'src/decorators/prisma-select.decorator';
@UseGuards(JwtAuthGuard)
@Resolver(() => User)
export class UserResolver {
constructor(private readonly userService: UserService) {}
@UseFilters(ExceptionFilter)
@Query(() => [User], {
nullable: false,
})
async findManyUser(
@Args() args: FindManyUserArgs,
@AuthWorkspace() workspace: Workspace,
@PrismaSelector({ modelName: 'User' })
prismaSelect: PrismaSelect<'User'>,
): Promise<Partial<User>[]> {
return await this.userService.findMany({
...args,
where: {
...args.where,
workspaceMember: {
is: { workspace: { is: { id: { equals: workspace.id } } } },
},
},
select: prismaSelect.value,
});
}
}