From 5cd80545422bba855cc9a730a2e13cc9d982c34b Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 30 Nov 2017 10:51:13 +0100 Subject: Add ability to list jobs --- server/models/account/user-interface.ts | 8 ++--- server/models/job/job-interface.ts | 15 +++++++--- server/models/job/job.ts | 52 +++++++++++++++++++++++++-------- 3 files changed, 54 insertions(+), 21 deletions(-) (limited to 'server/models') diff --git a/server/models/account/user-interface.ts b/server/models/account/user-interface.ts index 1a04fb750..0f0b72063 100644 --- a/server/models/account/user-interface.ts +++ b/server/models/account/user-interface.ts @@ -1,12 +1,10 @@ -import * as Sequelize from 'sequelize' import * as Bluebird from 'bluebird' - -// Don't use barrel, import just what we need -import { AccountInstance } from './account-interface' -import { User as FormattedUser } from '../../../shared/models/users/user.model' +import * as Sequelize from 'sequelize' import { ResultList } from '../../../shared/models/result-list.model' import { UserRight } from '../../../shared/models/users/user-right.enum' import { UserRole } from '../../../shared/models/users/user-role' +import { User as FormattedUser } from '../../../shared/models/users/user.model' +import { AccountInstance } from './account-interface' export namespace UserMethods { export type HasRight = (this: UserInstance, right: UserRight) => boolean diff --git a/server/models/job/job-interface.ts b/server/models/job/job-interface.ts index 411a05029..3cfc0fbed 100644 --- a/server/models/job/job-interface.ts +++ b/server/models/job/job-interface.ts @@ -1,18 +1,23 @@ +import * as Bluebird from 'bluebird' import * as Sequelize from 'sequelize' -import * as Promise from 'bluebird' - -import { JobCategory, JobState } from '../../../shared/models/job.model' +import { Job as FormattedJob, JobCategory, JobState } from '../../../shared/models/job.model' +import { ResultList } from '../../../shared/models/result-list.model' export namespace JobMethods { - export type ListWithLimitByCategory = (limit: number, state: JobState, category: JobCategory) => Promise + export type ListWithLimitByCategory = (limit: number, state: JobState, category: JobCategory) => Bluebird + export type ListForApi = (start: number, count: number, sort: string) => Bluebird< ResultList > + + export type ToFormattedJSON = (this: JobInstance) => FormattedJob } export interface JobClass { listWithLimitByCategory: JobMethods.ListWithLimitByCategory + listForApi: JobMethods.ListForApi, } export interface JobAttributes { state: JobState + category: JobCategory handlerName: string handlerInputData: any } @@ -21,6 +26,8 @@ export interface JobInstance extends JobClass, JobAttributes, Sequelize.Instance id: number createdAt: Date updatedAt: Date + + toFormattedJSON: JobMethods.ToFormattedJSON } export interface JobModel extends JobClass, Sequelize.Model {} diff --git a/server/models/job/job.ts b/server/models/job/job.ts index c2d088090..f428e26db 100644 --- a/server/models/job/job.ts +++ b/server/models/job/job.ts @@ -1,19 +1,14 @@ import { values } from 'lodash' import * as Sequelize from 'sequelize' - -import { JOB_STATES, JOB_CATEGORIES } from '../../initializers' - -import { addMethodsToModel } from '../utils' -import { - JobInstance, - JobAttributes, - - JobMethods -} from './job-interface' import { JobCategory, JobState } from '../../../shared/models/job.model' +import { JOB_CATEGORIES, JOB_STATES } from '../../initializers' +import { addMethodsToModel, getSort } from '../utils' +import { JobAttributes, JobInstance, JobMethods } from './job-interface' let Job: Sequelize.Model let listWithLimitByCategory: JobMethods.ListWithLimitByCategory +let listForApi: JobMethods.ListForApi +let toFormattedJSON: JobMethods.ToFormattedJSON export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { Job = sequelize.define('Job', @@ -44,12 +39,30 @@ export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes: Se } ) - const classMethods = [ listWithLimitByCategory ] - addMethodsToModel(Job, classMethods) + const classMethods = [ + listWithLimitByCategory, + listForApi + ] + const instanceMethods = [ + toFormattedJSON + ] + addMethodsToModel(Job, classMethods, instanceMethods) return Job } +toFormattedJSON = function (this: JobInstance) { + return { + id: this.id, + state: this.state, + category: this.category, + handlerName: this.handlerName, + handlerInputData: this.handlerInputData, + createdAt: this.createdAt, + updatedAt: this.updatedAt + } +} + // --------------------------------------------------------------------------- listWithLimitByCategory = function (limit: number, state: JobState, jobCategory: JobCategory) { @@ -66,3 +79,18 @@ listWithLimitByCategory = function (limit: number, state: JobState, jobCategory: return Job.findAll(query) } + +listForApi = function (start: number, count: number, sort: string) { + const query = { + offset: start, + limit: count, + order: [ getSort(sort) ] + } + + return Job.findAndCountAll(query).then(({ rows, count }) => { + return { + data: rows, + total: count + } + }) +} -- cgit v1.2.3