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; } }