| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /**
- * Actions that are safe to route from the current Angular H5 application to
- * the new Parse cloud-function gateway. Keep this list narrower than the
- * server-side mapping until each page's response shape has passed regression.
- */
- export const H5_CLOUD_ROUTED_ACTIONS = new Set([
- 'app_update',
- 'node_get',
- 'node_list',
- 'user_login_passwd',
- ]);
- const SESSION_CLOUD_ROUTED_ACTIONS = new Set([
- 'e_add_words',
- 'e_ck_list',
- 'e_get_21list',
- 'e_order_detail',
- 'e_order_tongji',
- 'e_record_detail',
- 'e_words_list',
- 'stu_record_update_v2',
- ]);
- const CONTENT_MODEL_FIELDS: Record<number, Set<string>> = {
- 52: new Set(['id', 'lj', 'sy', 'yb', 'yp']),
- 53: new Set(['id', 'kcid', 'scid', 'xxcs', 'yhid', 'jrscb']),
- 54: new Set(['id', 'pl', 'bxrq', 'dslx', 'dszt', 'fxpl', 'jffs', 'jssj', 'kcid', 'kssj', 'plxm', 'scsj', 'sdsd', 'szmd', 'szyh', 'yysj', 'yykcid']),
- 56: new Set(['id', 'pl', 'con', 'djq', 'ygg', 'dqrq', 'dsid', 'fxrl', 'xxqs', 'szmdid', 'userid', 'learned']),
- 58: new Set(['id', 'yxx', 'cksl', 'kcid', 'syjd', 'yhid']),
- 59: new Set(['id', 'pf', 'jffs', 'jsmz', 'kcid', 'kclx', 'kcmc', 'kzsj', 'pjnr', 'pldp', 'xymz', 'yyds', 'plpjsj', 'szmdid']),
- 60: new Set(['id', 'fxzt', 'kcid', 'plid', 'wcsj', 'yhid', 'kywrq', 'kywsj', 'xxjlid', 'orderid']),
- 61: new Set(['id', 'df', 'askid', 'wrong', 'userid', 'answerid', 'dontknow', 'prevscore', 'totalscore']),
- };
- const NODE_MODELS: Record<number, number> = { 28: 58, 29: 54, 32: 53, 291: 56, 296: 59, 327: 52, 388: 60, 389: 61 };
- export function usesCloudGateway(action: string, params: Record<string, unknown> = {}, hasParseSession = false): boolean {
- if (H5_CLOUD_ROUTED_ACTIONS.has(action)) return true;
- if (SESSION_CLOUD_ROUTED_ACTIONS.has(action)) return hasParseSession;
- if (action !== 'content_list') return false;
- const modelId = contentModel(params);
- if (!modelId) return !params['myfield'] && !params['myfield2'];
- const fields = CONTENT_MODEL_FIELDS[modelId];
- if (!fields || (modelId !== 52 && !hasParseSession)) return false;
- return filterNames(params).every((field) => fields.has(field));
- }
- export function requiresCloudSession(action: string, params: Record<string, unknown> = {}): boolean {
- return SESSION_CLOUD_ROUTED_ACTIONS.has(action)
- || (action === 'content_list' && contentModel(params) !== 52 && Boolean(contentModel(params)));
- }
- function contentModel(params: Record<string, unknown>): number {
- const explicit = Number(params['modelId'] ?? params['modelid'] ?? params['ModelID'] ?? 0);
- if (explicit) return explicit;
- const nodes = String(params['nodeid'] ?? params['nid'] ?? params['nodes'] ?? '').split(',').map(Number).filter(Boolean);
- return nodes.length === 1 ? NODE_MODELS[nodes[0]] ?? 0 : 0;
- }
- function filterNames(params: Record<string, unknown>): string[] {
- return [params['myfield'], params['myfield2']]
- .filter(Boolean)
- .flatMap((value) => String(value).split('|'))
- .map((part) => part.split('=', 1)[0].replace(/^B\./i, '').toLowerCase());
- }
|