Source: job-dto.js

import FieldDTO from './field-dto.js'
import JobNotificationDTO from './job-notification-dto.js'
import JobRecordDTO from './job-record-dto.js'

/**
 *
 */
class JobDTO {
  /**
   * @param {any} [json]
   */
  constructor (json) {
    if (!json) {
      json = {}
    }
    this.json = json
    this.notifications = json.notifications?.map(o => new JobNotificationDTO(o)) || undefined
    this.records = json.records?.map(o => new JobRecordDTO(o))
  }

  /**
   * @type {number}
   */
  get concurrency () {
    return this.json.concurrency
  }

  /**
   * @type {number}
   */
  get concurrencyDelay () {
    return this.json.concurrencyDelay
  }

  /**
   * @type {string}
   */
  get cron () {
    return this.json.cron
  }

  set cron (s) {
    this.json.cron = s
  }

  /**
   * @returns {number}
   */
  get duration () {
    return this.json.duration
  }

  /**
   * @type {FieldDTO[]}
   */
  get fields () {
    return this.json.fields.map(o => new FieldDTO(o))
  }

  /**
   * @type {string}
   */
  get id () {
    return this.json.id
  }

  /**
   * @type {string}
   */
  get name () {
    return this.json.name
  }

  set name (v) {
    this.json.name = v
  }

  /**
   * @returns {boolean}
   */
  get scheduled () {
    return this.json.scheduled
  }

  set scheduled (b) {
    this.json.scheduled = b
  }

  /**
   * @returns {string}
   */
  get webhookURL () {
    return this.json.webhookURL
  }

  set webhookURL (s) {
    this.json.webhookURL = s
  }

  /**
   *
   * @param {JobRecordDTO} record
   * @returns {void}
   */
  addRecord (record) {
    this.json.records.push(record.json)
  }

  /**
   * @returns {FieldDTO[]}
   */
  expectedFields () {
    return this.fields.filter(f => f.fieldType === 'EXPECTED')
  }

  /**
   *
   * @param {string} name
   * @returns {FieldDTO | undefined}
   */
  field (name) {
    return this.fields.find(f => f.name === name)
  }

  /**
   * @returns {FieldDTO[]}
   */
  inputFields () {
    return this.fields.filter(f => f.fieldType === 'INPUT')
  }
}

export default JobDTO