philips-software/cogito

View on GitHub
workspaces/telepath-queuing-service/source/message-sender.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
export const maximumMessageLength = 100000
export const maximumQueueSize = 10

export class MessageSender {
  constructor ({ state }) {
    this.state = state
  }

  run ({ message, queueId }) {
    if (!this.verifyMessage({ message })) {
      return false
    }

    const queue = this.getQueue({ queueId })
    if (!this.verifyQueue({ queue })) {
      return undefined
    }

    queue.push(message)
    return true
  }

  verifyMessage ({ message }) {
    if (message.length > maximumMessageLength) {
      this.statusCode = 400
      this.error = `Message too large. Only ${maximumMessageLength} characters allowed.`
      return false
    }
    return true
  }

  getQueue ({ queueId }) {
    if (!this.state.get(queueId)) {
      this.state.set(queueId, [])
    }

    return this.state.get(queueId)
  }

  verifyQueue ({ queue }) {
    if (queue.length >= maximumQueueSize) {
      this.statusCode = 429
      this.error = 'Too many requests, maximum queue size reached.'
      return false
    }
    return true
  }
}