@syngrisi/syngrisi
Version:
Syngrisi - Visual Testing Tool
45 lines (38 loc) • 1.75 kB
text/typescript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Run } from '@models';
import { errMsg } from '@utils';
import log from "@logger";
export async function createRunIfNotExist(params: any, logsMeta = {}): Promise<any> {
const logOpts = {
scope: 'createRunIfNotExist',
msgType: 'CREATE',
itemType: 'VRSRun',
};
let run;
try {
if (!params.name || !params.app || !params.ident) {
throw new Error(`Cannot create run, wrong params: '${JSON.stringify(params)}'`);
}
log.debug(`try to create run if exist, params: '${JSON.stringify(params)}'`, { ...logOpts, ...logsMeta });
run = await Run.findOne({ ident: params.ident }).exec();
if (run) {
log.debug(`run already exist: '${JSON.stringify(params)}'`, { ...logOpts, ...logsMeta });
return run;
}
run = await Run.create({
...params,
createdDate: params.createdDate || new Date(),
});
log.debug(`run with name: '${params.name}' was created: ${run}`, { ...logOpts, ...logsMeta });
return run;
} catch (e: any) {
if (e.code === 11000) {
log.warn(`run key duplication collision: '${JSON.stringify(params)}', error: '${errMsg(e)}'`, { ...logOpts, ...logsMeta });
run = await Run.findOne({ name: params.name, ident: params.ident });
log.warn(`run key duplication collision, found: '${JSON.stringify(run)}'`, { ...logOpts, ...logsMeta });
if (run) return run;
}
log.error(`cannot create run, params: '${JSON.stringify(params)}', error: '${errMsg(e)}', obj: ${JSON.stringify(e)}`, { ...logOpts, ...logsMeta });
throw e;
}
}