This commit is contained in:
2024-11-09 18:44:35 +07:00
parent 2736547b84
commit 95a092cec9
5 changed files with 61 additions and 4 deletions

View File

@@ -1,6 +1,9 @@
import { Module } from '@nestjs/common'
import { UserSchema } from './user.schema'
import { MessageModule } from '../Message/message.module'
@Module({
imports: [MessageModule],
providers: [UserSchema],
exports: [UserSchema],
})

View File

@@ -5,17 +5,21 @@ import {
PothosSchema,
SchemaBuilderToken,
} from '@smatch-corp/nestjs-pothos'
import { Builder } from '../Graphql/graphql.builder'
import { Builder, SchemaContext } from '../Graphql/graphql.builder'
import { PrismaService } from '../Prisma/prisma.service'
import { clerkClient } from '@clerk/express'
import { UnauthorizedException } from '@nestjs/common'
import { MailService } from '../Mail/mail.service'
import { MessageSchema } from 'src/Message/message.schema'
import { Message } from '@prisma/client'
import { PubSubEvent } from 'src/common/pubsub/pubsub-event'
@Injectable()
export class UserSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
private readonly mailService: MailService,
private readonly messageSchema: MessageSchema,
) {
super()
}
@@ -366,5 +370,22 @@ export class UserSchema extends PothosSchema {
},
}),
}))
// Subscription section
this.builder.subscriptionFields((t) => ({
userScopedMessage: t.field({
type: this.messageSchema.message(),
subscribe: async (_, _args, ctx: SchemaContext) => {
if (!ctx.isSubscription) throw new Error('Not allowed')
const {
websocket: { pubSub },
} = ctx
return pubSub.asyncIterator([
`${PubSubEvent.NEW_MESSAGE}.${ctx.websocket.me?.id}`,
]) as unknown as AsyncIterable<Message>
},
resolve: async (payload: Message) => payload,
}),
}))
}
}