Newer
Older
Context,
Parent,
Query,
ResolveField,
Resolver,
Subscription,
import { Inject, UseGuards } from '@nestjs/common';
import { Request } from 'express';
import { EntryModel } from './models/entry.model';
import { EntryService } from '../utils/entry.service';
import { PubSub } from 'graphql-subscriptions';
@Inject('PUBSUB')
private readonly pubSub: PubSub,
private readonly prisma: PrismaService,
private readonly entryService: EntryService,
) {}
@Subscription(() => AgentModel, {
resolve: (payload) => {
payload.slug = null;
},
})
onAgentUpdate() {
return this.pubSub.asyncIterator('onAgentUpdate');
@Query(() => [AgentModel])
@UseGuards(AuthGuard)
async getAgents(): Promise<AgentModel[]> {
return await this.prisma.agent.findMany({
select: {
id: true,
name: true,
avatar: true,
bio: true,
flags: true,
},
});
}
@ResolveField('entries')
async entries(
@Context() { req }: { req: Request },
@Parent() parent: AgentModel,
): Promise<EntryModel[]> {
if (req.group)
return this.entryService.getAccessibleEntries(
req.group.id,
parent.id,
);
else
return this.prisma.entry
.findMany()
.then((entries) =>
entries.map(this.entryService.unlockedEntry),
);
}
@ResolveField('value')
async value(@Parent() parent: AgentModel): Promise<number> {
const codes = await this.prisma.tokenCode.findMany({
where: { agentId: parent.id },
select: { value: true },
});
return codes.reduce((prev, curr) => prev + curr.value, 0);
}