diff --git a/app/main.ts b/app/main.ts index 997360fbd903b74fac7e9889a9e116edb8986029..8b15cf9098d556df752691a99238a116ea33d3c4 100644 --- a/app/main.ts +++ b/app/main.ts @@ -15,7 +15,7 @@ logger.setUpLogger( ); const required = <T>(name: string, t?: T, fallback?: T): T => { - if (t === undefined && fallback === undefined) { + if (!t && fallback === undefined) { throw Error(`Environment variable "${name}" is required`); } else { return t !== undefined ? t : fallback!; @@ -51,6 +51,8 @@ const serverConfigFromEnv = (): ServerConfig => { (environment === "production" ? "https://images.holi.social" : "https://dev-images.holi.social"), + fake: asBoolean(Deno.env.get("FAKE")) || false, // For local development. If set, the API returns dummy data + }; }; diff --git a/app/server.ts b/app/server.ts index 5928f15fa36b887c9064b5c951ceed7d4c0b9915..dc2f622ae5ed58eacb0ce431cbbe246aa31a2172 100644 --- a/app/server.ts +++ b/app/server.ts @@ -85,16 +85,16 @@ const createResolvers = (config: ServerConfig) => ({ // deno-lint-ignore no-explicit-any _parent: any, parameters: EngagementOpportunitiesParameters, - ) => fetchEngagementOpportunities(config)(parameters), + ) => config.fake ? Promise.resolve({totalResults: 0, data: []}) : fetchEngagementOpportunities(config)(parameters), engagement: ( // deno-lint-ignore no-explicit-any _parent: any, parameters: EngagementParameters, - ) => fetchEngagement(config)(parameters), + ) => config.fake ? Promise.resolve(null) : fetchEngagement(config)(parameters), categories: ( // deno-lint-ignore no-explicit-any _parent: any, - ) => fetchCategories(config.voltastics), + ) => config.fake ? Promise.resolve({data: []}) : fetchCategories(config.voltastics), engagements: ( // deno-lint-ignore no-explicit-any _parent: any, @@ -110,7 +110,7 @@ const createResolvers = (config: ServerConfig) => ({ // deno-lint-ignore no-explicit-any _parent: any, parameters: TrackEngagementViewParameters, - ) => trackEngagementView(config.voltastics)(parameters), + ) => config.fake ? Promise.resolve({id: parameters.id}) : trackEngagementView(config.voltastics)(parameters), }, }); @@ -128,6 +128,7 @@ export interface ServerConfig { cacheTtlMsVoltastics?: number; // default: 60 seconds voltastics: VoltasticsConfig; imageProxyBaseUrl: string; + fake: boolean; // For local development. If set, the API returns dummy data } export const createGraphQLServer = (config: ServerConfig): GraphQLServer => { @@ -171,6 +172,9 @@ export const startServer = (config: ServerConfig): Promise<void> => { hostname === "0.0.0.0" ? "localhost" : hostname }:${port}/graphql`, ); + if(config.fake) { + logger.info(`Server is serving fake data due to FAKE env var set to true`) + } }, }); };