Skip to content

Commit

Permalink
Use RegExp, querystring, var
Browse files Browse the repository at this point in the history
  • Loading branch information
TaYaKi71751 committed Aug 19, 2022
1 parent 1e27402 commit f777eb6
Show file tree
Hide file tree
Showing 5 changed files with 142 additions and 62 deletions.
15 changes: 9 additions & 6 deletions config.ts.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
export const config = {
orgCd: '56781234',
sid: '43218765',
vaccines: [
'VEN',
'VEN000'
import { Config } from "./src/util/Config";

export const config:Config = {
organization: [
{orgCd: '1',sid: '1'},
'orgCd=12345678&sid=43128756'
],
vaccine: [
{cd:/VEN0+1.[0-9]/}
]
};
81 changes: 49 additions & 32 deletions src/Example.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { LightResponse } from '@corcc/nvr/lib/util/type';
import { Auth, Init, Info, vaccineQuantity, filterAvailable } from './pre';
import { filterSelected } from './pre/Select';
import { ReservationInfo, VaccineInfo } from './type';
import { loadConfig, VaccineOrganizationTargetProp } from './util/Config';
import { randomNumber } from './util/Random';
import { getDataKeyFromResponseBody } from './util/Response';

Expand Down Expand Up @@ -49,60 +50,76 @@ function getKey (res: any | LightResponse): string {
return '';
}

const key = '';
let all: Array<VaccineInfo>;
let available: Array<VaccineInfo>;
let selected: Array<VaccineInfo>;
let description: ReservationInfo;
const res: Response = InitResponse();
const { organization } = loadConfig();
const __org_var__:any[] = [];
let __index__:number = -1;

export async function Example () {
let key = '';
let all: Array<VaccineInfo>;
let available: Array<VaccineInfo>;
let selected: Array<VaccineInfo>;
let description: ReservationInfo;
const res: Response = InitResponse();
res.standby = await Init();
key = getKey(res.standby);
res.auth = await Auth(res.standby);
do {
const twoSec: number = 2000;
const randomTwoSec: number = twoSec + randomNumber(randomNumber(0x7ff));
await new Promise((resolve) => setTimeout(resolve, randomTwoSec));
res.info = await Info(res.auth);
description = await vaccineQuantity(res.info);
all = await description.vaccines;
available = filterAvailable(all);
selected = filterSelected(available);
} while (!selected.length);
const vaccine: any = selected[randomNumber(selected.length)];
for (var i = 0; i < organization.length; i++) {
__org_var__[i] = __org_var__[i] || {};
__org_var__[i].organization = __org_var__[i].organization || {};
__org_var__[i].res = __org_var__[i].res || {};
const o = __org_var__[i].organization = organization[i];
if (
!(__org_var__[i]?.key) || !__org_var__[i].res.standby
) {
__org_var__[i].res.standby = await Init(o);
__org_var__[i].key = getKey(__org_var__[i].res.standby);
}
__org_var__[i].res.auth = await Auth(__org_var__[i].res.standby);
const twoSec: number = 2000;
const randomTwoSec: number = twoSec + randomNumber(randomNumber(0x7ff));
await new Promise((resolve) => setTimeout(resolve, randomTwoSec));
__org_var__[i].res.info = await Info(__org_var__[i].res.auth);
__org_var__[i].description = await vaccineQuantity(__org_var__[i].res.info);
__org_var__[i].all = await __org_var__[i].description.vaccines;
__org_var__[i].available = filterAvailable(__org_var__[i].all);
__org_var__[i].selected = filterSelected(__org_var__[i].available);
__index__ = i;
if (__org_var__[i].selected && __org_var__[i].selected.length) { break; }
}
} while (!(__org_var__[i = __index__].selected.length));
const vaccine: any = __org_var__[i].selected[randomNumber(selected.length)];
const { cd } = vaccine;
res.progress = await progressRequest({
key,
__org_var__[i].res.progress = await progressRequest({
key: __org_var__[i].key,
cd
});
try {
res.confirm = await confirmRequest({
key,
__org_var__[i].res.confirm = await confirmRequest({
key: __org_var__[i].key,
cd
});
switch (res.confirm?.responseCode) {
switch (__org_var__[i].res.confirm?.responseCode) {
case 200:
return await (async function (body: any) {
const { code }: any = JSON.parse(body ?? '{"":""}');
if (code.includes('SUCCESS')) {
res.success = await successRequest({
key,
__org_var__[i].res.success = await successRequest({
key: __org_var__[i].key,
cd
});
return res.success;
return __org_var__[i].res.success;
}
res.failure = await failureRequest({
key,
__org_var__[i].res.failure = await failureRequest({
key: __org_var__[i].key,
cd,
code
});
return res.failure;
})(res.confirm.body);
return __org_var__[i].res.failure;
})(__org_var__[i].res.confirm.body);
}
} catch (err) {
console.error(err);
return await errorRequest({
key,
key: __org_var__[i].key,
cd
});
}
Expand Down
10 changes: 5 additions & 5 deletions src/pre/Init.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { standbyRequest } from '@corcc/nvr';
import { LightResponse } from '@corcc/nvr/lib/util/type';
import { loadConfig } from '../util/Config';
import { VaccineOrganizationTarget, VaccineOrganizationTargetProp } from '../util/Config';

export async function Init (): Promise<LightResponse> {
const { orgCd, sid }: any = loadConfig();
export async function Init (organizationConfig:VaccineOrganizationTarget): Promise<LightResponse> {
const {orgCd,sid} = new VaccineOrganizationTargetProp(organizationConfig);
const res = await standbyRequest({
orgCd: orgCd,
sid: sid
orgCd,
sid
});
const { responseCode } = res;

Expand Down
36 changes: 19 additions & 17 deletions src/pre/Select.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
import { VaccineInfo } from '../type';
import { loadConfig } from '../util/Config';
import { Config, loadConfig, VaccineTarget } from '../util/Config';
const oe = Object.entries;

export function filterSelected (vaccineQuantities: Array<VaccineInfo>) {
const config = loadConfig();
const selectedVaccines = config.vaccines;
let _a = vaccineQuantities;
_a = _a.filter((vaccineQuantity) => {
return (
oe(vaccineQuantity)
.filter(([k, v]) => typeof v == 'string')
.filter(([k, v]: any) => {
return selectedVaccines.filter((s: string): any => {
return v.includes(s);
}).length;
})
).length;
});
return _a;
function select (one:VaccineTarget, ...from: Array<VaccineInfo>):boolean {
for (const e of from) {
for (const [k, v] of oe(e)) {
switch (one?.constructor) {
case String: if (v == one) { return v == one; } else { continue; }
case RegExp: if (one instanceof RegExp) { return !!(v.match(one)?.length); } else { continue; }
case Object: if (oe(one).length) { return oe(one).filter(([k, v]:[k:string, v:RegExp|string]) => select(v, e)).length == oe(one).length; } else { continue; }
default: continue;
}
}
}
return false;
}

export function filterSelected (from: Array<VaccineInfo>) {
const config:Config = loadConfig();
const result = from.filter(() => (config?.vaccine?.filter((e) => select(e, ...from))));
return result;
}
62 changes: 60 additions & 2 deletions src/util/Config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,65 @@
import path from 'path';
export function loadConfig (): any {
import qs from 'querystring';

export type Space = `${' '|''}`;

export type Is = `${Space}${'='|':'}${Space}`;

export type And = `${Space}${'&'|','|'|'}${Space}`;

export type VaccineTarget = {
cd?: RegExp | string;
name?: RegExp | string;
} | RegExp | string;

export type VaccineOrganizationTarget = {
sid?: number|string;
orgCd?: number|string;
id?: number|string;
vaccineOrganizationCode?: number|string;
} | `${'orgCd'|'sid'}${Is}${string}${And}${'orgCd'|'sid'}${Is}${string}`;

export class VaccineOrganizationTargetProp {
private __id__!:string;
private __vaccineOrganizationCode__!:string;

constructor (v?:VaccineOrganizationTarget) {
if (v) {
switch (typeof v) {
case 'string': {
const _v = qs.parse(`${v}`);
this.__id__ = `${_v.id || _v.sid}`;
this.__vaccineOrganizationCode__ = `${_v.orgCd || _v.vaccineOrganizationCode}`;
} break;
case 'object': {
this.__id__ = `${v.id || v.sid}`;
this.__vaccineOrganizationCode__ = `${v.orgCd || v.vaccineOrganizationCode}`;
}
}
}
}

get id () { return this.__id__; }
get sid () { return this.__id__; }
set id (value) { this.__id__ = `${value}`; }
set sid (value) { this.__id__ = `${value}`; }

get orgCd () { return this.__vaccineOrganizationCode__; }
get vaccineOrganizationCode () { return this.__vaccineOrganizationCode__; }
set orgCd (value) { this.__vaccineOrganizationCode__ = `${value}`; }
set vaccineOrganizationCode (value) { this.__vaccineOrganizationCode__ = `${value}`; }
}

export type Config = {
organization: VaccineOrganizationTarget[];
vaccine?: VaccineTarget[];
};

export function loadConfig ():Config {
const cwd = process.cwd();
const configPath = path.join(cwd, 'config');
const { config }: any = require(configPath);
const { config }: {
config: Config
} = require(configPath);
return config;
}

0 comments on commit f777eb6

Please sign in to comment.