import { revalidateTag } from "next/cache"; interface RevalidateProps { id?: string; environmentId?: string; contactId?: string; userId?: string; singleUseId?: string; surveyId?: string; } export const responseCache = { tag: { byId(responseId: string) { return `responses-${responseId}`; }, byEnvironmentId(environmentId: string) { return `environments-${environmentId}-responses`; }, byContactId(contactId: string) { return `contacts-${contactId}-responses`; }, byEnvironmentIdAndUserId(environmentId: string, userId: string) { return `environments-${environmentId}-users-${userId}-responses`; }, bySingleUseId(surveyId: string, singleUseId: string) { return `surveys-${surveyId}-singleUse-${singleUseId}-responses`; }, bySurveyId(surveyId: string) { return `surveys-${surveyId}-responses`; }, }, revalidate({ environmentId, contactId, id, singleUseId, surveyId, userId }: RevalidateProps): void { if (id) { revalidateTag(this.tag.byId(id)); } if (contactId) { revalidateTag(this.tag.byContactId(contactId)); } if (surveyId) { revalidateTag(this.tag.bySurveyId(surveyId)); } if (environmentId) { revalidateTag(this.tag.byEnvironmentId(environmentId)); } if (environmentId && userId) { revalidateTag(this.tag.byEnvironmentIdAndUserId(environmentId, userId)); } if (surveyId && singleUseId) { revalidateTag(this.tag.bySingleUseId(surveyId, singleUseId)); } }, };