diff --git a/lib/graphql/resolvers.js b/lib/graphql/resolvers.js index 2e0c68b0..ee1538f4 100644 --- a/lib/graphql/resolvers.js +++ b/lib/graphql/resolvers.js @@ -244,21 +244,27 @@ const massageTerms = terms => (terms.active && terms.text) ? ({ * `tc` is sent depending on whether the `hash` differs from `currentHash` or * not. */ -const terms = (parent, { currentHash }, { settings }, info) => { +const terms = (parent, { currentConfigVersion, currentHash }, { deviceId, settings }, info) => { const isNone = x => _.isNil(x) || _.isEmpty(x) - const latestTerms = configManager.getTermsConditions(settings.config) + let latestTerms = configManager.getTermsConditions(settings.config) if (isNone(latestTerms)) return null const hash = latestTerms.hash if (!_.isString(hash)) return null - if (hash === currentHash) return { hash, details: null } + latestTerms = massageTerms(latestTerms) + if (isNone(latestTerms)) return null - const details = massageTerms(latestTerms) - if (isNone(details)) return null + const isHashNew = hash !== currentHash + const text = isHashNew ? latestTerms.text : null - return { hash, details } + return plugins(settings, deviceId) + .fetchCurrentConfigVersion() + .catch(() => null) + .then(configVersion => isHashNew || _.isNil(currentConfigVersion) || currentConfigVersion < configVersion) + .then(isVersionNew => isVersionNew ? _.omit(['text'], latestTerms) : null) + .then(details => ({ hash, details, text })) } diff --git a/lib/graphql/types.js b/lib/graphql/types.js index ae4b24d3..04e2e69f 100644 --- a/lib/graphql/types.js +++ b/lib/graphql/types.js @@ -72,13 +72,13 @@ type Trigger { type TermsDetails { delay: Boolean! title: String! - text: String! accept: String! cancel: String! } type Terms { hash: String! + text: String details: TermsDetails } @@ -150,6 +150,6 @@ type Configs { type Query { configs(currentConfigVersion: Int): Configs! - terms(currentHash: String): Terms + terms(currentHash: String, currentConfigVersion: Int): Terms } `