From 2fea40006031c71b6162fc534ed3b52c926bbe16 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Mon, 18 Mar 2024 17:19:54 +0300 Subject: [PATCH] apps/api: do not cache graphql responses with errors --- apps/api/src/proxy/proxy.controller.ts | 7 ++++--- apps/api/src/proxy/types.ts | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/api/src/proxy/proxy.controller.ts b/apps/api/src/proxy/proxy.controller.ts index 4e04bec..49e11c6 100644 --- a/apps/api/src/proxy/proxy.controller.ts +++ b/apps/api/src/proxy/proxy.controller.ts @@ -1,5 +1,5 @@ import { queryTTL } from './lib/config'; -import type { GQLRequest } from './types'; +import type { GQLRequest, GQLResponse } from './types'; import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { All, @@ -42,13 +42,14 @@ export class ProxyController { method: req.method, }); - if (!response.ok) + const data = (await response.json()) as GQLResponse; + + if (!response.ok || data?.error || data?.errors?.length) throw new HttpException( response.statusText, response.status || HttpStatus.INTERNAL_SERVER_ERROR, ); - const data = await response.json(); const ttl = queryTTL[operationName]; if (data && ttl !== false) await this.cacheManager.set(key, data, { ttl: ttl || env.CACHE_TTL }); diff --git a/apps/api/src/proxy/types.ts b/apps/api/src/proxy/types.ts index bde0d91..37377bf 100644 --- a/apps/api/src/proxy/types.ts +++ b/apps/api/src/proxy/types.ts @@ -3,3 +3,9 @@ export type GQLRequest = { query: string; variables: string; }; + +export type GQLResponse = { + data: unknown; + error?: unknown; + errors?: unknown[]; +};