diff --git a/src/caller/caller-context.service.ts b/src/caller/caller-context.service.ts index ebc40ee..bc0e95d 100644 --- a/src/caller/caller-context.service.ts +++ b/src/caller/caller-context.service.ts @@ -78,6 +78,13 @@ export class CallerContextService { return ctx; } + async invalidateCache(leadId: string): Promise { + if (!leadId) return; + const cacheKey = `${CACHE_KEY_PREFIX}${leadId}`; + await this.session.deleteCache(cacheKey).catch(() => {}); + this.logger.log(`[CALLER-CTX] Cache invalidated for ${leadId}`); + } + // Fire-and-forget pre-warm — called from caller resolution // so the cache is hot when the AI stream fires seconds later. prewarm(leadId: string, patientId: string, auth: string): void { diff --git a/src/caller/caller-resolution.controller.ts b/src/caller/caller-resolution.controller.ts index aa7aa83..4ea3887 100644 --- a/src/caller/caller-resolution.controller.ts +++ b/src/caller/caller-resolution.controller.ts @@ -33,4 +33,13 @@ export class CallerResolutionController { return result; } + + @Post('invalidate-context') + async invalidateContext(@Body('leadId') leadId: string) { + if (!leadId) { + throw new HttpException('leadId is required', HttpStatus.BAD_REQUEST); + } + await this.callerContext.invalidateCache(leadId); + return { status: 'ok' }; + } }