Skip to content
Snippets Groups Projects
Commit 66dc3d44 authored by Ole Langbehn's avatar Ole Langbehn
Browse files

HOLI-3881 add fake mode for local development without credentials

parent 44e416ce
No related branches found
No related tags found
No related merge requests found
import { logger, LogSeverity } from "./logging.ts"; import { logger, LogSeverity } from "./logging.ts";
import { startServer } from "./server.ts"; import { DEFAULT_CACHE_ENABLED, DEFAULT_CACHE_TTL_MS_BETTERPLACE, DEFAULT_PORT, startServer } from "./server.ts";
const environment = Deno.env.get("ENVIRONMENT") || "development"; const environment = Deno.env.get("ENVIRONMENT") || "development";
...@@ -8,13 +8,23 @@ logger.setUpLogger( ...@@ -8,13 +8,23 @@ logger.setUpLogger(
environment === "development" ? LogSeverity.DEFAULT : LogSeverity.INFO, environment === "development" ? LogSeverity.DEFAULT : LogSeverity.INFO,
); );
const required = <T>(name: string, t?: T, fallback?: T): T => {
if (!t && fallback === undefined) {
throw Error(`Environment variable "${name}" is required`);
} else {
return t !== undefined ? t : fallback!;
}
};
const serverConfigFromEnv = () => { const serverConfigFromEnv = () => {
const asNumber = (str?: string) => (str ? Number(str) : undefined); const asNumber = (str?: string) => (str ? Number(str) : undefined);
const asBoolean = (str?: string) => (str ? Boolean(str) : undefined); const asBoolean = (str?: string) => (str ? /^true$/i.test(str) : undefined);
logger.info(`fake ${Deno.env.get("FAKE")} ${asBoolean(Deno.env.get("FAKE"))}`)
return { return {
port: asNumber(Deno.env.get("PORT")), port: required("PORT", asNumber(Deno.env.get("PORT")), DEFAULT_PORT),
cacheEnabled: asBoolean(Deno.env.get("CACHE_ENABLED")), cacheEnabled: required("CACHE_ENABLED", asBoolean(Deno.env.get("CACHE_ENABLED")), DEFAULT_CACHE_ENABLED),
cacheTtlMsBetterplace: asNumber(Deno.env.get("CACHE_TTL_MS_BETTERPLACE")), cacheTtlMsBetterplace: required("CACHE_TTL_MS_BETTERPLACE", asNumber(Deno.env.get("CACHE_TTL_MS_BETTERPLACE")), DEFAULT_CACHE_TTL_MS_BETTERPLACE),
fake: asBoolean(Deno.env.get("FAKE")) || false, // For local development. If set, the API returns dummy data
}; };
}; };
......
...@@ -87,21 +87,21 @@ const createResolvers = (_config: ServerConfig) => ({ ...@@ -87,21 +87,21 @@ const createResolvers = (_config: ServerConfig) => ({
_parent: any, _parent: any,
parameters: ProjectsParameters = {}, parameters: ProjectsParameters = {},
context: GraphQLContext, context: GraphQLContext,
) => fetchProjects(parameters, context.language), ) => _config.fake ? Promise.resolve({totalResults: 0, data: []}) : fetchProjects(parameters, context.language),
project: ( project: (
// deno-lint-ignore no-explicit-any // deno-lint-ignore no-explicit-any
_parent: any, _parent: any,
parameters: ProjectParameters, parameters: ProjectParameters,
context: GraphQLContext, context: GraphQLContext,
) => fetchProject(parameters, context.language), ) => _config.fake ? Promise.resolve({}) : fetchProject(parameters, context.language),
}, },
Project: { Project: {
categories: (args: Project) => fetchCategories(args.id), categories: (args: Project) => fetchCategories(args.id),
news: (args: Project, parameters: NewsParameters = {}) => news: (args: Project, parameters: NewsParameters = {}) =>
fetchNews(args, parameters), _config.fake ? Promise.resolve([]) : fetchNews(args, parameters),
}, },
Initiative: { Initiative: {
url: (args: Initiative) => fetchInitiativeUrl(args), url: (args: Initiative) => _config.fake ? Promise.resolve(undefined) : fetchInitiativeUrl(args),
}, },
}); });
...@@ -113,6 +113,7 @@ export interface ServerConfig { ...@@ -113,6 +113,7 @@ export interface ServerConfig {
port?: number; // default: 8001 port?: number; // default: 8001
cacheEnabled?: boolean; // default: true cacheEnabled?: boolean; // default: true
cacheTtlMsBetterplace?: number; // default: 60 seconds cacheTtlMsBetterplace?: number; // default: 60 seconds
fake: boolean; // For local development. If set, the API returns dummy data
} }
const getLanguage = (languages = "") => const getLanguage = (languages = "") =>
...@@ -174,13 +175,16 @@ type GraphQLContext = { ...@@ -174,13 +175,16 @@ type GraphQLContext = {
export const startServer = (config: ServerConfig): Promise<void> => { export const startServer = (config: ServerConfig): Promise<void> => {
const graphQLServer: GraphQLServer = createGraphQLServer(config); const graphQLServer: GraphQLServer = createGraphQLServer(config);
return serve(graphQLServer.handleRequest, { return serve(graphQLServer.handleRequest, {
port: config.port || DEFAULT_PORT, port: config.port,
onListen({ port, hostname }) { onListen({ port, hostname }) {
logger.info( logger.info(
`Server started at http://${ `Server started at http://${
hostname === "0.0.0.0" ? "localhost" : hostname hostname === "0.0.0.0" ? "localhost" : hostname
}:${port}/graphql`, }:${port}/graphql`,
); );
if(config.fake) {
logger.info(`Server is serving fake data due to FAKE env var set to true`)
}
}, },
}); });
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment