Add pending chat requests CTA on mitra home screen
- Backend: new GET /api/mitra/chat-requests/pending endpoint - Backend: getPendingRequestsForMitra() queries unresponded notifications for sessions still in pending_acceptance status - Mitra app: loadPendingRequests() fetches on screen load + status toggle - Mitra app: activeRequestCount getter exposes queue size - Mitra app: _PendingRequestsBanner widget shows count with tap-to-view Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { authenticate } from '../../plugins/auth.js'
|
||||
import { getMitraByFirebaseUid } from '../../services/mitra.service.js'
|
||||
import { acceptPairingRequest, declinePairingRequest, getSessionStatus } from '../../services/pairing.service.js'
|
||||
import { acceptPairingRequest, declinePairingRequest, getSessionStatus, getPendingRequestsForMitra } from '../../services/pairing.service.js'
|
||||
import { getActiveSessionsByMitra, getActiveSessionsByMitraWithUnread, endSession, getMitraHistory } from '../../services/session.service.js'
|
||||
import { respondToExtension } from '../../services/extension.service.js'
|
||||
import { EndedBy } from '../../constants.js'
|
||||
@@ -23,6 +23,12 @@ const resolveMitra = async (request, reply) => {
|
||||
}
|
||||
|
||||
export const mitraChatRoutes = async (app) => {
|
||||
// Get pending chat requests for this mitra
|
||||
app.get('/pending', { preHandler: [authenticate, resolveMitra] }, async (request, reply) => {
|
||||
const requests = await getPendingRequestsForMitra(request.mitra.id)
|
||||
return reply.send({ success: true, data: requests })
|
||||
})
|
||||
|
||||
// Check if a session is still pending acceptance (for notification validation)
|
||||
app.get('/:sessionId/status', { preHandler: [authenticate, resolveMitra] }, async (request, reply) => {
|
||||
const session = await getSessionStatus(request.params.sessionId)
|
||||
|
||||
@@ -307,6 +307,19 @@ export const expirePairingRequest = async (sessionId) => {
|
||||
return session
|
||||
}
|
||||
|
||||
export const getPendingRequestsForMitra = async (mitraId) => {
|
||||
const rows = await sql`
|
||||
SELECT cs.id AS session_id, cs.duration_minutes, cs.is_free_trial, cs.created_at
|
||||
FROM chat_request_notifications crn
|
||||
JOIN chat_sessions cs ON cs.id = crn.session_id
|
||||
WHERE crn.mitra_id = ${mitraId}
|
||||
AND crn.response IS NULL
|
||||
AND cs.status = ${SessionStatus.PENDING_ACCEPTANCE}
|
||||
ORDER BY cs.created_at ASC
|
||||
`
|
||||
return rows
|
||||
}
|
||||
|
||||
export const getSessionStatus = async (sessionId) => {
|
||||
const [session] = await sql`
|
||||
SELECT cs.id, cs.customer_id, cs.mitra_id, cs.status, cs.created_at, cs.paired_at, cs.ended_at, cs.ended_by,
|
||||
|
||||
Reference in New Issue
Block a user