import { Args, Mutation, Parent, Query, ResolveField, Resolver, } from '@nestjs/graphql'; import { Group } from './models/group.model'; import { PrismaService } from '../prisma/prisma.service'; import { GraphQLString } from 'graphql'; import seedWords from 'mnemonic-words'; import { NotFoundException } from '@nestjs/common'; @Resolver(() => Group) export class GroupResolver { constructor(private prismaService: PrismaService) {} @Mutation(() => Group) async createGroup( @Args({ name: 'name', type: () => GraphQLString }) name: string, ) { function generateWord() { return seedWords[Math.round(Math.random() * seedWords.length)]; } const code = [ generateWord(), generateWord(), generateWord(), generateWord(), ].join('-'); return this.prismaService.group.create({ data: { name, code, }, }); } @Query(() => Group) async getGroup( @Args({ name: 'code', type: () => GraphQLString }) code: string, ) { const group = this.prismaService.group.findFirst({ where: { code }, include: { unlocks: true }, }); if (!group) throw new NotFoundException(); return group; } @ResolveField('unlocks') async unlocks(@Parent() group: Group) { const result = await this.prismaService.group.findFirst({ where: { id: group.id }, select: { unlocks: true }, }); return result.unlocks; } }