Phase 3.1 WS2: Backend FCM fallback, ping config, unread API
- Add require_mitra_ping + mitra_ping_interval_seconds config keys (migration) - Add getMitraPingConfig/setMitraPingConfig to config service - Add GET/PATCH /internal/config/mitra-ping routes for control center - Update mitra status service: honor ping config in auto-offline sweep, include ping config in GET /api/mitra/status response - Enhance pairing FCM payload with action: 'open_accept' for deep-link - Add FCM fallback to closure.service (initiateEarlyEnd, completeSession) - Add FCM fallback to session-timer.service (onSessionExpired) - Add unread count queries (getActiveSessionByCustomerWithUnread, getActiveSessionsByMitraWithUnread) - Add GET /api/client/chat/session/active-with-unread route - Add GET /api/mitra/chat-requests/sessions/active-with-unread route Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { getDb } from '../db/client.js'
|
||||
import { SessionStatus } from '../constants.js'
|
||||
import { getMitraPingConfig } from './config.service.js'
|
||||
|
||||
const sql = getDb()
|
||||
|
||||
@@ -58,7 +59,12 @@ export const getStatus = async (mitraId) => {
|
||||
FROM mitra_online_status
|
||||
WHERE mitra_id = ${mitraId}
|
||||
`
|
||||
return status
|
||||
const pingConfig = await getMitraPingConfig()
|
||||
return {
|
||||
...status,
|
||||
require_ping: pingConfig.require_ping,
|
||||
ping_interval_seconds: pingConfig.ping_interval_seconds,
|
||||
}
|
||||
}
|
||||
|
||||
export const getOnlineMitras = async () => {
|
||||
@@ -89,7 +95,13 @@ export const getOnlineLogs = async (mitraId, { page = 1, limit = 50 } = {}) => {
|
||||
return { items, total: Number(count), page, limit }
|
||||
}
|
||||
|
||||
export const autoOfflineStaleMitras = async (staleSeconds = 45) => {
|
||||
export const autoOfflineStaleMitras = async () => {
|
||||
const pingConfig = await getMitraPingConfig()
|
||||
|
||||
// If ping is not required, skip the auto-offline sweep entirely
|
||||
if (!pingConfig.require_ping) return 0
|
||||
|
||||
const staleSeconds = pingConfig.ping_interval_seconds * 3
|
||||
const stale = await sql`
|
||||
UPDATE mitra_online_status
|
||||
SET is_online = false, last_offline_at = NOW(), updated_at = NOW()
|
||||
|
||||
Reference in New Issue
Block a user