Skip to content
Snippets Groups Projects
group.resolver.ts 1.59 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pascal Kosak's avatar
    Pascal Kosak committed
    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';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    import seedWords from 'mnemonic-words';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    import { NotFoundException } from '@nestjs/common';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
    @Resolver(() => Group)
    export class GroupResolver {
    
    Pascal Kosak's avatar
    Pascal Kosak committed
        constructor(private prismaService: PrismaService) {}
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
        @Mutation(() => Group)
        async createGroup(
            @Args({ name: 'name', type: () => GraphQLString }) name: string,
        ) {
            function generateWord() {
                return seedWords[Math.round(Math.random() * seedWords.length)];
            }
    
    
    Pascal Kosak's avatar
    Pascal Kosak committed
            const code = [
                generateWord(),
                generateWord(),
                generateWord(),
                generateWord(),
            ].join('-');
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
            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 },
            });
    
    
    Pascal Kosak's avatar
    Pascal Kosak committed
            if (!group) throw new NotFoundException();
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
            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;
        }
    }