* add parse-graph-ql configuration for class schema customisation Not yet tested - essentially an RFC * refactor and add graphql router, controller and config cache * fix(GraphQLController): add missing check isEnabled * chore(GraphQLController): remove awaits from cache put * chore(GraphQLController): remove check for if its enabled * refactor(GraphQLController): only use cache if mounted * chore(GraphQLController): group all validation errors and throw at once * chore(GraphQLSchema): move transformations into controller validation * refactor(GraphQL): improve ctrl validation and fix schema usage of config * refactor(GraphQLSchema): remove code related to additional schema This code has been moved into a separate feature branch. * fix(GraphQLSchema): fix incorrect default return type for class configs * refactor(GraphQLSchema): update staleness check code to account for config * fix(GraphQLServer): fix regressed tests due to internal schema changes This will be followed up with a backwards compatability fix for the `ClassFields` issue to avoid breakages for our users * refactor: rename to ParseGraphQLController for consistency * fix(ParseGraphQLCtrl): numerous fixes for validity checking Also includes some minor code refactoring * chore(GraphQL): minor syntax cleanup * fix(SchemaController): add _GraphQLConfig to volatile classes * refactor(ParseGraphQLServer): return update config value in setGraphQLConfig * testing(ParseGraphQL): add test cases for new graphQLConfig * fix(GraphQLController): fix issue where config with multiple items was not being mapped to the db * fix(postgres): add _GraphQLConfig default schema on load fixes failing postgres tests * GraphQL @mock directive (#5836) * Add mock directive * Include tests for @mock directive * Fix existing tests due to the change from ClassFields to ClassCreateFields * fix(parseClassMutations): safer type transformation based on input type * fix(parseClassMutations): only define necessary input fields * fix(GraphQL): fix incorrect import paths
76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
import AdaptableController from './AdaptableController';
|
|
import CacheAdapter from '../Adapters/Cache/CacheAdapter';
|
|
|
|
const KEY_SEPARATOR_CHAR = ':';
|
|
|
|
function joinKeys(...keys) {
|
|
return keys.join(KEY_SEPARATOR_CHAR);
|
|
}
|
|
|
|
/**
|
|
* Prefix all calls to the cache via a prefix string, useful when grouping Cache by object type.
|
|
*
|
|
* eg "Role" or "Session"
|
|
*/
|
|
export class SubCache {
|
|
constructor(prefix, cacheController, ttl) {
|
|
this.prefix = prefix;
|
|
this.cache = cacheController;
|
|
this.ttl = ttl;
|
|
}
|
|
|
|
get(key) {
|
|
const cacheKey = joinKeys(this.prefix, key);
|
|
return this.cache.get(cacheKey);
|
|
}
|
|
|
|
put(key, value, ttl) {
|
|
const cacheKey = joinKeys(this.prefix, key);
|
|
return this.cache.put(cacheKey, value, ttl);
|
|
}
|
|
|
|
del(key) {
|
|
const cacheKey = joinKeys(this.prefix, key);
|
|
return this.cache.del(cacheKey);
|
|
}
|
|
|
|
clear() {
|
|
return this.cache.clear();
|
|
}
|
|
}
|
|
|
|
export class CacheController extends AdaptableController {
|
|
constructor(adapter, appId, options = {}) {
|
|
super(adapter, appId, options);
|
|
|
|
this.role = new SubCache('role', this);
|
|
this.user = new SubCache('user', this);
|
|
this.graphQL = new SubCache('graphQL', this);
|
|
}
|
|
|
|
get(key) {
|
|
const cacheKey = joinKeys(this.appId, key);
|
|
return this.adapter.get(cacheKey).then(null, () => Promise.resolve(null));
|
|
}
|
|
|
|
put(key, value, ttl) {
|
|
const cacheKey = joinKeys(this.appId, key);
|
|
return this.adapter.put(cacheKey, value, ttl);
|
|
}
|
|
|
|
del(key) {
|
|
const cacheKey = joinKeys(this.appId, key);
|
|
return this.adapter.del(cacheKey);
|
|
}
|
|
|
|
clear() {
|
|
return this.adapter.clear();
|
|
}
|
|
|
|
expectedAdapterType() {
|
|
return CacheAdapter;
|
|
}
|
|
}
|
|
|
|
export default CacheController;
|