Newer
Older
import { Context, Query, Resolver, Subscription } from '@nestjs/graphql';
import { GroupModel } from './models/group.model';
import { Request } from 'express';
import { Inject, UseGuards } from '@nestjs/common';
import { AuthGuard } from '../auth/auth.guard';
import { Group } from '@prisma/client';
import { PubSub } from 'graphql-subscriptions';
constructor(
@Inject('PUBSUB')
private readonly pubSub: PubSub,
private readonly prisma: PrismaService,
) {}
@Subscription(() => GroupModel, {
filter: (payload: Group, variables, { req }: { req: Request }) => {
return !!req.agent || req.group.id === payload.id;
},
})
@UseGuards(AuthGuard)
onGroupUpdate() {
return this.pubSub.asyncIterator('onGroupUpdate');
}
@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 [];
}