feat: enhance message retrieval logic with context-based filtering

- Updated the MessageSchema to include context-aware filtering for notifications, allowing retrieval of messages based on recipientId when the context is NOTIFICATION.
- Improved the resolve function to handle subscription checks, ensuring that unauthorized access is properly managed.
- Added error handling for cases where the context is not allowed, enhancing overall robustness of the message retrieval process.
This commit is contained in:
2024-12-09 19:08:25 +07:00
parent 4ba3077a9b
commit 9732d7b904
3 changed files with 10 additions and 7 deletions

View File

@@ -77,7 +77,14 @@ export class MessageSchema extends PothosSchema {
type: [this.message()], type: [this.message()],
description: 'Retrieve a list of messages with optional filtering, ordering, and pagination.', description: 'Retrieve a list of messages with optional filtering, ordering, and pagination.',
args: this.builder.generator.findManyArgs('Message'), args: this.builder.generator.findManyArgs('Message'),
resolve: async (query, _root, args) => { resolve: async (query, _root, args, ctx, _info) => {
if (ctx.isSubscription) {
throw new Error('Not allowed')
}
// if message.context is NOTIFICATION, filter by recipientId
if (args.filter?.context === MessageContextType.NOTIFICATION) {
args.filter.recipientId = ctx.http.me?.id
}
return await this.prisma.message.findMany({ return await this.prisma.message.findMany({
...query, ...query,
skip: args.skip ?? undefined, skip: args.skip ?? undefined,

View File

@@ -207,12 +207,7 @@ export class QuizSchema extends PothosSchema {
type: this.quiz(), type: this.quiz(),
args: { args: {
data: t.arg({ data: t.arg({
type: this.builder.generator.getCreateInput('Quiz', [ type: this.builder.generator.getCreateInput('Quiz', ['id', 'centerMentorId', 'createdAt', 'updatedAt']),
'id',
'centerMentorId',
'createdAt',
'updatedAt',
]),
required: true, required: true,
}), }),
}, },

View File

@@ -197,6 +197,7 @@ export class RefundTicketSchema extends PothosSchema {
bankName = 'Center Mentor Refund Account' bankName = 'Center Mentor Refund Account'
} else { } else {
// Existing bank lookup for customers // Existing bank lookup for customers
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
const bank = banks.data.find((bank: any) => bank.bin === bankBin) const bank = banks.data.find((bank: any) => bank.bin === bankBin)
if (!bank) { if (!bank) {
throw new Error('Bank not found') throw new Error('Bank not found')