]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/job.ts
Type models
[github/Chocobozzz/PeerTube.git] / server / models / job.ts
1 import { values } from 'lodash'
2 import * as Sequelize from 'sequelize'
3
4 import { JOB_STATES } from '../initializers'
5
6 import { addMethodsToModel } from './utils'
7 import {
8 JobClass,
9 JobInstance,
10 JobAttributes,
11
12 JobMethods
13 } from './job-interface'
14
15 let Job: Sequelize.Model<JobInstance, JobAttributes>
16 let listWithLimit: JobMethods.ListWithLimit
17
18 export default function defineJob (sequelize: Sequelize.Sequelize, DataTypes) {
19 Job = sequelize.define<JobInstance, JobAttributes>('Job',
20 {
21 state: {
22 type: DataTypes.ENUM(values(JOB_STATES)),
23 allowNull: false
24 },
25 handlerName: {
26 type: DataTypes.STRING,
27 allowNull: false
28 },
29 handlerInputData: {
30 type: DataTypes.JSON,
31 allowNull: true
32 }
33 },
34 {
35 indexes: [
36 {
37 fields: [ 'state' ]
38 }
39 ]
40 }
41 )
42
43 const classMethods = [ listWithLimit ]
44 addMethodsToModel(Job, classMethods)
45
46 return Job
47 }
48
49 // ---------------------------------------------------------------------------
50
51 listWithLimit = function (limit, state, callback) {
52 const query = {
53 order: [
54 [ 'id', 'ASC' ]
55 ],
56 limit: limit,
57 where: {
58 state
59 }
60 }
61
62 return Job.findAll(query).asCallback(callback)
63 }