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:
@@ -82,6 +82,35 @@ export const getEarlyEndConfig = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// --- Phase 3.1: Mitra Ping Config ---
|
||||
|
||||
export const getMitraPingConfig = async () => {
|
||||
const [requireRow] = await sql`SELECT value FROM app_config WHERE key = 'require_mitra_ping'`
|
||||
const [intervalRow] = await sql`SELECT value FROM app_config WHERE key = 'mitra_ping_interval_seconds'`
|
||||
return {
|
||||
require_ping: requireRow?.value?.value ?? true,
|
||||
ping_interval_seconds: intervalRow?.value?.value ?? 15,
|
||||
}
|
||||
}
|
||||
|
||||
export const setMitraPingConfig = async ({ require_ping, ping_interval_seconds }) => {
|
||||
if (require_ping !== undefined) {
|
||||
await sql`
|
||||
INSERT INTO app_config (key, value, updated_at)
|
||||
VALUES ('require_mitra_ping', ${sql.json({ value: require_ping })}, NOW())
|
||||
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW()
|
||||
`
|
||||
}
|
||||
if (ping_interval_seconds !== undefined) {
|
||||
await sql`
|
||||
INSERT INTO app_config (key, value, updated_at)
|
||||
VALUES ('mitra_ping_interval_seconds', ${sql.json({ value: ping_interval_seconds })}, NOW())
|
||||
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW()
|
||||
`
|
||||
}
|
||||
return getMitraPingConfig()
|
||||
}
|
||||
|
||||
export const setEarlyEndConfig = async ({ mitra_enabled, customer_enabled }) => {
|
||||
if (mitra_enabled !== undefined) {
|
||||
await sql`
|
||||
|
||||
Reference in New Issue
Block a user