mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 04:40:32 +00:00
add server to monorepo.
This commit is contained in:
45
packages/server/src/services/Jobs/JobTransformer.ts
Normal file
45
packages/server/src/services/Jobs/JobTransformer.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { Service } from 'typedi';
|
||||
import moment from 'moment';
|
||||
import { Transformer } from '@/lib/Transformer/Transformer';
|
||||
|
||||
@Service()
|
||||
export class JobTransformer extends Transformer {
|
||||
/**
|
||||
* Include these attributes to sale invoice object.
|
||||
* @returns {Array}
|
||||
*/
|
||||
public includeAttributes = (): string[] => {
|
||||
return ['queued', 'completed', 'failed'];
|
||||
};
|
||||
|
||||
/**
|
||||
* Detarmines the queued state.
|
||||
* @param {IJob} job
|
||||
* @returns {String}
|
||||
*/
|
||||
protected queued = (job): boolean => {
|
||||
return !!job.nextRunAt && moment().isSameOrAfter(job.nextRunAt, 'seconds');
|
||||
};
|
||||
|
||||
/**
|
||||
* Detarmines the completed state.
|
||||
* @param job
|
||||
* @returns
|
||||
*/
|
||||
protected completed = (job): boolean => {
|
||||
return !!job.lastFinishedAt;
|
||||
};
|
||||
|
||||
/**
|
||||
* Detarmines the failed state.
|
||||
* @param job
|
||||
* @returns
|
||||
*/
|
||||
protected failed = (job): boolean => {
|
||||
return (
|
||||
job.lastFinishedAt &&
|
||||
job.failedAt &&
|
||||
moment(job.failedAt).isSame(job.lastFinishedAt)
|
||||
);
|
||||
};
|
||||
}
|
||||
52
packages/server/src/services/Jobs/JobsService.ts
Normal file
52
packages/server/src/services/Jobs/JobsService.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { pick, first } from 'lodash';
|
||||
import { ObjectId } from 'mongodb';
|
||||
import { Service, Inject } from 'typedi';
|
||||
import { JobTransformer } from './JobTransformer';
|
||||
import { IJobMeta } from '@/interfaces';
|
||||
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
|
||||
|
||||
@Service()
|
||||
export default class JobsService {
|
||||
@Inject('agenda')
|
||||
agenda: any;
|
||||
|
||||
@Inject()
|
||||
transformer: TransformerInjectable;
|
||||
|
||||
/**
|
||||
* Retrieve job details of the given job id.
|
||||
* @param {number} tenantId -
|
||||
* @param {string} jobId -
|
||||
* @returns {Promise<IJobMeta>}
|
||||
*/
|
||||
async getJob(jobId: string): Promise<IJobMeta> {
|
||||
const jobs = await this.agenda.jobs({ _id: new ObjectId(jobId) });
|
||||
|
||||
// Transformes job to json.
|
||||
const jobJson = this.transformJobToJson(first(jobs));
|
||||
|
||||
return this.transformer.transform(null, jobJson, new JobTransformer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Transformes the job to json.
|
||||
* @param job
|
||||
* @returns
|
||||
*/
|
||||
private transformJobToJson(job) {
|
||||
return {
|
||||
id: job.attrs._id,
|
||||
...pick(job.attrs, [
|
||||
'nextRunAt',
|
||||
'lastModifiedBy',
|
||||
'lockedAt',
|
||||
'lastRunAt',
|
||||
'failCount',
|
||||
'failReason',
|
||||
'failedAt',
|
||||
'lastFinishedAt',
|
||||
]),
|
||||
running: job.isRunning(),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user