|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { FindOptions } from 'sequelize'
- import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Table, UpdatedAt } from 'sequelize-typescript'
- import { MRunner } from '@server/types/models/runners/index.js'
- import { Runner } from '@peertube/peertube-models'
- import { SequelizeModel, getSort } from '../shared/index.js'
- import { RunnerRegistrationTokenModel } from './runner-registration-token.js'
- import { CONSTRAINTS_FIELDS } from '@server/initializers/constants.js'
-
- @Table({
- tableName: 'runner',
- indexes: [
- {
- fields: [ 'runnerToken' ],
- unique: true
- },
- {
- fields: [ 'runnerRegistrationTokenId' ]
- },
- {
- fields: [ 'name' ],
- unique: true
- }
- ]
- })
- export class RunnerModel extends SequelizeModel<RunnerModel> {
-
- // Used to identify the appropriate runner when it uses the runner REST API
- @AllowNull(false)
- @Column
- runnerToken: string
-
- @AllowNull(false)
- @Column
- name: string
-
- @AllowNull(true)
- @Column(DataType.STRING(CONSTRAINTS_FIELDS.RUNNERS.DESCRIPTION.max))
- description: string
-
- @AllowNull(false)
- @Column
- lastContact: Date
-
- @AllowNull(false)
- @Column
- ip: string
-
- @CreatedAt
- createdAt: Date
-
- @UpdatedAt
- updatedAt: Date
-
- @ForeignKey(() => RunnerRegistrationTokenModel)
- @Column
- runnerRegistrationTokenId: number
-
- @BelongsTo(() => RunnerRegistrationTokenModel, {
- foreignKey: {
- allowNull: false
- },
- onDelete: 'cascade'
- })
- RunnerRegistrationToken: Awaited<RunnerRegistrationTokenModel>
-
- // ---------------------------------------------------------------------------
-
- static load (id: number) {
- return RunnerModel.findByPk(id)
- }
-
- static loadByToken (runnerToken: string) {
- const query = {
- where: { runnerToken }
- }
-
- return RunnerModel.findOne(query)
- }
-
- static loadByName (name: string) {
- const query = {
- where: { name }
- }
-
- return RunnerModel.findOne(query)
- }
-
- static listForApi (options: {
- start: number
- count: number
- sort: string
- }) {
- const { start, count, sort } = options
-
- const query: FindOptions = {
- offset: start,
- limit: count,
- order: getSort(sort)
- }
-
- return Promise.all([
- RunnerModel.count(query),
- RunnerModel.findAll<MRunner>(query)
- ]).then(([ total, data ]) => ({ total, data }))
- }
-
- // ---------------------------------------------------------------------------
-
- toFormattedJSON (this: MRunner): Runner {
- return {
- id: this.id,
-
- name: this.name,
- description: this.description,
-
- ip: this.ip,
- lastContact: this.lastContact,
-
- createdAt: this.createdAt,
- updatedAt: this.updatedAt
- }
- }
- }
|