aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/job
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/job')
-rw-r--r--server/models/job/job-interface.ts15
-rw-r--r--server/models/job/job.ts52
2 files changed, 51 insertions, 16 deletions
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 @@
1import * as Bluebird from 'bluebird'
1import * as Sequelize from 'sequelize' 2import * as Sequelize from 'sequelize'
2import * as Promise from 'bluebird' 3import { Job as FormattedJob, JobCategory, JobState } from '../../../shared/models/job.model'
3 4import { ResultList } from '../../../shared/models/result-list.model'
4import { JobCategory, JobState } from '../../../shared/models/job.model'
5 5
6export namespace JobMethods { 6export namespace JobMethods {
7 export type ListWithLimitByCategory = (limit: number, state: JobState, category: JobCategory) => Promise<JobInstance[]> 7 export type ListWithLimitByCategory = (limit: number, state: JobState, category: JobCategory) => Bluebird<JobInstance[]>
8 export type ListForApi = (start: number, count: number, sort: string) => Bluebird< ResultList<JobInstance> >
9
10 export type ToFormattedJSON = (this: JobInstance) => FormattedJob
8} 11}
9 12
10export interface JobClass { 13export interface JobClass {
11 listWithLimitByCategory: JobMethods.ListWithLimitByCategory 14 listWithLimitByCategory: JobMethods.ListWithLimitByCategory
15 listForApi: JobMethods.ListForApi,
12} 16}
13 17
14export interface JobAttributes { 18export interface JobAttributes {
15 state: JobState 19 state: JobState
20 category: JobCategory
16 handlerName: string 21 handlerName: string
17 handlerInputData: any 22 handlerInputData: any
18} 23}
@@ -21,6 +26,8 @@ export interface JobInstance extends JobClass, JobAttributes, Sequelize.Instance
21 id: number 26 id: number
22 createdAt: Date 27 createdAt: Date
23 updatedAt: Date 28 updatedAt: Date
29
30 toFormattedJSON: JobMethods.ToFormattedJSON
24} 31}
25 32
26export interface JobModel extends JobClass, Sequelize.Model<JobInstance, JobAttributes> {} 33export interface JobModel extends JobClass, Sequelize.Model<JobInstance, JobAttributes> {}
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 @@
1import { values } from 'lodash' 1import { values } from 'lodash'
2import * as Sequelize from 'sequelize' 2import * as Sequelize from 'sequelize'
3
4import { JOB_STATES, JOB_CATEGORIES } from '../../initializers'
5
6import { addMethodsToModel } from '../utils'
7import {
8 JobInstance,
9 JobAttributes,
10
11 JobMethods
12} from './job-interface'
13import { JobCategory, JobState } from '../../../shared/models/job.model' 3import { JobCategory, JobState } from '../../../shared/models/job.model'
4import { JOB_CATEGORIES, JOB_STATES } from '../../initializers'
5import { addMethodsToModel, getSort } from '../utils'
6import { JobAttributes, JobInstance, JobMethods } from './job-interface'
14 7
15let Job: Sequelize.Model<JobInstance, JobAttributes> 8let Job: Sequelize.Model<JobInstance, JobAttributes>
16let listWithLimitByCategory: JobMethods.ListWithLimitByCategory 9let listWithLimitByCategory: JobMethods.ListWithLimitByCategory
10let listForApi: JobMethods.ListForApi
11let toFormattedJSON: JobMethods.ToFormattedJSON
17 12
18export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { 13export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
19 Job = sequelize.define<JobInstance, JobAttributes>('Job', 14 Job = sequelize.define<JobInstance, JobAttributes>('Job',
@@ -44,12 +39,30 @@ export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes: Se
44 } 39 }
45 ) 40 )
46 41
47 const classMethods = [ listWithLimitByCategory ] 42 const classMethods = [
48 addMethodsToModel(Job, classMethods) 43 listWithLimitByCategory,
44 listForApi
45 ]
46 const instanceMethods = [
47 toFormattedJSON
48 ]
49 addMethodsToModel(Job, classMethods, instanceMethods)
49 50
50 return Job 51 return Job
51} 52}
52 53
54toFormattedJSON = function (this: JobInstance) {
55 return {
56 id: this.id,
57 state: this.state,
58 category: this.category,
59 handlerName: this.handlerName,
60 handlerInputData: this.handlerInputData,
61 createdAt: this.createdAt,
62 updatedAt: this.updatedAt
63 }
64}
65
53// --------------------------------------------------------------------------- 66// ---------------------------------------------------------------------------
54 67
55listWithLimitByCategory = function (limit: number, state: JobState, jobCategory: JobCategory) { 68listWithLimitByCategory = function (limit: number, state: JobState, jobCategory: JobCategory) {
@@ -66,3 +79,18 @@ listWithLimitByCategory = function (limit: number, state: JobState, jobCategory:
66 79
67 return Job.findAll(query) 80 return Job.findAll(query)
68} 81}
82
83listForApi = function (start: number, count: number, sort: string) {
84 const query = {
85 offset: start,
86 limit: count,
87 order: [ getSort(sort) ]
88 }
89
90 return Job.findAndCountAll(query).then(({ rows, count }) => {
91 return {
92 data: rows,
93 total: count
94 }
95 })
96}