import { pick } from '@shared/core-utils' ; import { HttpStatusCode , Job , JobState , JobType , ResultList } from '@shared/models' ; import { AbstractCommand , OverrideCommandOptions } from '../shared' ; export class JobsCommand extends AbstractCommand { async getLatest ( options ) { const { data } = await this . list ( { ... options , start : 0 , count : 1 , sort : '-createdAt' } ) ; if ( data . length === 0 ) return undefined ; return data [ 0 ] ; } list ( options = { } ) { const path = this . buildJobsUrl ( options . state ) ; const query = pick ( options , [ 'start' , 'count' , 'sort' , 'jobType' ] ) ; return this . getRequestBody < ResultList < Job > > ( { ... options , path , query , implicitToken : true , defaultExpectedStatus : HttpStatusCode . OK_200 } ) ; } listFailed ( options ) { const path = this . buildJobsUrl ( 'failed' ) ; return this . getRequestBody < ResultList < Job > > ( { ... options , path , query : { start : 0 , count : 50 } , implicitToken : true , defaultExpectedStatus : HttpStatusCode . OK_200 } ) ; } private buildJobsUrl ( state ? ) { let path = '/api/v1/jobs' ; if ( state ) path += '/' + state ; return path ; } }