import { Inject, Injectable } from '@nestjs/common'; import { Pothos, PothosRef, PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; import { Builder } from '../Graphql/graphql.builder'; import { PrismaService } from '../Prisma/prisma.service'; @Injectable() export class MessageSchema extends PothosSchema { constructor( @Inject(SchemaBuilderToken) private readonly builder: Builder, private readonly prisma: PrismaService, ) { super(); } @PothosRef() message() { return this.builder.prismaObject('Message', { fields: (t) => ({ id: t.exposeID('id'), senderId: t.exposeID('senderId'), chatRoomId: t.exposeID('chatRoomId'), message: t.expose('message', { type: 'Json' as any }), sentAt: t.expose('sentAt', { type: 'DateTime' }), sender: t.relation('sender'), chatRoom: t.relation('chatRoom'), }), }); } @Pothos() init(): void { this.builder.queryFields((t) => ({ message: t.prismaField({ type: this.message(), args: this.builder.generator.findUniqueArgs('Message'), resolve: async (query, root, args, ctx, info) => { return await this.prisma.message.findUnique({ ...query, where: args.where, }); }, }), messages: t.prismaField({ type: [this.message()], args: this.builder.generator.findManyArgs('Message'), resolve: async (query, root, args, ctx, info) => { return await this.prisma.message.findMany({ ...query, skip: args.skip ?? 0, take: args.take ?? 10, orderBy: args.orderBy ?? undefined, where: args.filter ?? undefined, }); }, }), })); } }