import { Context } from "../context/Context"; import { IRule } from "./interface/IRule"; /* * use https://www.npmjs.com/package/validatorjs */ import { ERuleTypes } from "./enum/ERuleTypes"; import { ActionParams } from "../action/type/ActionParams"; import { BaseRule } from "./base/BaseRule"; import { RegionChangeActionParams } from "../action/type/RegionChangeActionParams"; import { CommonRules } from "./CommonRules"; export class RegionChangeRules extends BaseRule implements IRule { constructor(params: ActionParams){ super(params); } /*@overwrite*/ public validate(rules: Array, context: Context): boolean { let passes : Array = []; rules.forEach(rule => { switch (rule) { case ERuleTypes.IS_CLIENT_INIT: passes.push(new CommonRules(this.params).isClientInit(context, this)); break; case ERuleTypes.IS_INITIATED: passes.push(new CommonRules(this.params).isInited(context, this)); break; case ERuleTypes.IS_HOST: passes.push(new CommonRules(this.params).isHost(context, this)); break; case ERuleTypes.IS_CONNECTED: passes.push(new CommonRules(this.params).isConnected(context, this)); break; case ERuleTypes.IS_VALID_CHANNEL: passes.push(this.channelParamValidate(this.params)); break; } }); return this.passesOrFails(passes); } public channelParamValidate(params: ActionParams): boolean { let paramsObj: RegionChangeActionParams = Object.assign(params); let data = { channel: paramsObj.channel }; let rules = { channel: 'required|string|max:64|not_in:undefined' }; let messages = { "required.channel":'Channel param is required', "string.channel":'Channel param must be string', "max.channel":'Channel param must be have max 32 characters', "not_in.channel":'Channel param is required', }; return this.evaluate(data, rules, messages); } }