Skip to content
Snippets Groups Projects
triggers.service.ts 2.89 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Client } from 'cozy-client'
    import {
      Account,
      Konnector,
      Trigger,
      TriggerAttributes,
      TriggerState,
    } from 'models'
    import { buildAttributes } from 'cozy-harvest-lib/dist/helpers/triggers'
    import triggersMutations from 'cozy-harvest-lib/dist/connections/triggers'
    
    import ConfigService from 'services/fluidConfig.service'
    
    
    export default class TriggerService {
      private _client: Client
    
      constructor(_client: Client) {
        this._client = _client
      }
    
      private createTriggerAttributes(account: Account, konnector: Konnector) {
    
        const configService = new ConfigService()
        const cronArgs = configService.getCronArgs()
    
        const triggerAttributes: TriggerAttributes = buildAttributes({
          account: account,
          cron: cronArgs,
          folder: null,
          konnector: konnector,
        })
    
        return triggerAttributes
      }
    
      public async createTrigger(
        account: Account,
        konnector: Konnector
      ): Promise<Trigger> {
        const triggerAttributes = this.createTriggerAttributes(account, konnector)
        if (!triggerAttributes) {
          throw new Error(
            'TriggersServices : createTrigger - _triggerAttributes not found'
          )
        }
        const trigger = await triggersMutations(this._client).createTrigger(
          triggerAttributes
        )
        return trigger
      }
    
      public async getTrigger(
        account: Account,
        konnector: Konnector
      ): Promise<Trigger> {
        const query = this._client
          .find('io.cozy.triggers')
          .where({
            'message.account': account._id,
            'message.konnector': konnector.slug,
          })
          .sortBy([{ 'cozyMetadata.updatedAt': 'desc' }])
          .limitBy(1)
        const result = await this._client.query(query)
        return result.data[0] ? result.data[0] : null
      }
    
      public static async fetchTriggerFromAccount(
        client: Client,
        account: Account
      ) {
        if (account == null) return null
        const query = client
          .find('io.cozy.triggers')
          .where({ 'message.account': account._id })
          .sortBy([{ 'cozyMetadata.updatedAt': 'desc' }])
          .limitBy(1)
        const result = await client.query(query)
        return result.data[0] ? result.data[0] : null
      }
    
      public async launchTrigger(trigger: Trigger): Promise<any> {
        if (!trigger) {
          throw new Error('TriggersServices : createTrigger - trigger not found')
        }
        console.log(
          '%c Launched Trigger is : ' + trigger._id,
          'background: #222; color: white'
        )
        const job = await triggersMutations(this._client).launchTrigger(trigger)
        return job
      }
    
      public async fetchTriggerState(
        trigger: Trigger
      ): Promise<TriggerState | null> {
        if (trigger == null) return null
        const triggerState = await this._client
          .getStackClient()
          .fetchJSON('GET', `/jobs/triggers/${trigger._id}`)
    
    Rémi PAPIN's avatar
    Rémi PAPIN committed
        console.log('triggerState')
        console.log(triggerState)
    
        return triggerState.data.attributes.current_state
          ? triggerState.data.attributes.current_state
          : null
      }
    }