Skip to content
Snippets Groups Projects
group.resolver.ts 1.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    import { Context, Query, Resolver, Subscription } from '@nestjs/graphql';
    import { GroupModel } from './models/group.model';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    import { PrismaService } from '../prisma/prisma.service';
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    import { AgentFlags } from './models/agent.model';
    
    import { Request } from 'express';
    
    import { Inject, UseGuards } from '@nestjs/common';
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    import { AuthGuard } from '../auth/auth.guard';
    import { Group } from '@prisma/client';
    import { PubSub } from 'graphql-subscriptions';
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    @Resolver(() => GroupModel)
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    export class GroupResolver {
    
    	constructor(
    		@Inject('PUBSUB')
    		private readonly pubSub: PubSub,
    		private readonly prisma: PrismaService,
    	) {}
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    
    	@Subscription(() => GroupModel, {
    		filter: (payload: Group, variables, { req }: { req: Request }) => {
    			return !!req.agent || req.group.id === payload.id;
    		},
    	})
    
    	onGroupUpdate() {
    		return this.pubSub.asyncIterator('onGroupUpdate');
    
    Adrian Paschkowski's avatar
    V2  
    Adrian Paschkowski committed
    	}
    
    	@Query(() => [GroupModel])
    	@UseGuards(AuthGuard)
    	async getGroups(
    		@Context() { req }: { req: Request },
    	): Promise<GroupModel[]> {
    		if (req.group) return [req.group];
    
    		if (
    			req.agent &&
    			(req.agent.flags & AgentFlags.ADMIN) === AgentFlags.ADMIN
    		)
    			return this.prisma.group.findMany();
    
    		return [];
    	}
    
    Pascal Kosak's avatar
    Pascal Kosak committed
    }