notif after complaint resolution

This commit is contained in:
shafi54 2026-05-21 08:45:07 +05:30
parent 0290c170bb
commit 5642c53462
5 changed files with 60 additions and 3 deletions

View file

@ -1,7 +1,13 @@
import { router, protectedProcedure } from '@/src/trpc/trpc-index' import { router, protectedProcedure } from '@/src/trpc/trpc-index'
import { z } from 'zod'; import { z } from 'zod';
import { generateSignedUrlsFromS3Urls } from '@/src/lib/s3-client' import { generateSignedUrlsFromS3Urls } from '@/src/lib/s3-client'
import { getComplaints as getComplaintsFromDb, resolveComplaint as resolveComplaintInDb } from '@/src/dbService' import { queueDataPusher } from '@/src/lib/queue-data-pusher'
import {
getComplaintById,
getComplaints as getComplaintsFromDb,
getNotifTokensByUserIds,
resolveComplaint as resolveComplaintInDb,
} from '@/src/dbService'
import type { ComplaintWithUser } from '@packages/shared' import type { ComplaintWithUser } from '@packages/shared'
export const complaintRouter = router({ export const complaintRouter = router({
@ -90,10 +96,43 @@ export const complaintRouter = router({
}), }),
resolve: protectedProcedure resolve: protectedProcedure
.input(z.object({ id: z.string(), response: z.string().optional() })) .input(z.object({ id: z.string(), response: z.string().min(1) }))
.mutation(async ({ input }): Promise<{ message: string }> => { .mutation(async ({ input }): Promise<{ message: string }> => {
const complaintId = parseInt(input.id)
const responseText = input.response.trim()
const complaint = await getComplaintById(complaintId)
if (!complaint) {
throw new Error('Complaint not found')
}
// Using dbService helper (new implementation) // Using dbService helper (new implementation)
await resolveComplaintInDb(parseInt(input.id), input.response); await resolveComplaintInDb(complaintId, responseText)
const tokens = await getNotifTokensByUserIds([complaint.userId])
for (const t of tokens) {
try {
await queueDataPusher.pushNotifQueue({
name: 'send-admin-notification',
jobData: {
token: t.token,
title: 'Complaint Response Received',
body: responseText,
imageUrl: null,
},
options: {
attempts: 3,
backoff: {
type: 'exponential',
delay: 2000,
},
},
})
} catch (e) {
console.error('Failed to queue complaint response notification', e)
}
}
/* /*
// Old implementation - direct DB query: // Old implementation - direct DB query:

View file

@ -23,6 +23,7 @@ export {
export { export {
// Complaint // Complaint
getComplaints, getComplaints,
getComplaintById,
resolveComplaint, resolveComplaint,
} from './src/admin-apis/complaint'; } from './src/admin-apis/complaint';

View file

@ -18,6 +18,14 @@ export interface ComplaintWithUser extends Complaint {
userMobile: string | null; userMobile: string | null;
} }
export async function getComplaintById(id: number): Promise<Complaint | null> {
const complaint = await db.query.complaints.findFirst({
where: eq(complaints.id, id),
});
return complaint ?? null;
}
export async function getComplaints( export async function getComplaints(
cursor?: number, cursor?: number,
limit: number = 20 limit: number = 20

View file

@ -22,6 +22,7 @@ export {
export { export {
// Complaint // Complaint
getComplaints, getComplaints,
getComplaintById,
resolveComplaint, resolveComplaint,
} from './src/admin-apis/complaint' } from './src/admin-apis/complaint'

View file

@ -18,6 +18,14 @@ export interface ComplaintWithUser extends Complaint {
userMobile: string | null userMobile: string | null
} }
export async function getComplaintById(id: number): Promise<Complaint | null> {
const complaint = await db.query.complaints.findFirst({
where: eq(complaints.id, id),
})
return complaint ?? null
}
export async function getComplaints( export async function getComplaints(
cursor?: number, cursor?: number,
limit: number = 20 limit: number = 20