DEFRA/ivory-front-office

View on GitHub
server/modules/confirmation/confirmation-notify.handlers.js

Summary

Maintainability
A
0 mins
Test Coverage
const { logger } = require('defra-logging-facade')
const moment = require('moment')
const { Registration, Agent, Owner } = require('ivory-data-mapping').cache
const config = require('../../config')

const NotifyClient = require('notifications-node-client').NotifyClient

class ConfirmationHandlers extends require('defra-hapi-handlers') {
  async notifyRegistration (contact, registrationNumber, registrationId) {
    const { notifyApiKey, notifyConfirmationTemplateId, notifyEmailReplyToId, serviceUrl } = config
    const { fullName, email: emailAddress } = contact || {}
    const reference = registrationNumber + Date.now()
    const personalisation = {
      registrationNumber,
      fullName,
      link_to_document: `${serviceUrl}/restore/${registrationId}`
    }
    const emailReplyToId = notifyEmailReplyToId
    const notifyClient = new NotifyClient(notifyApiKey)
    try {
      return await notifyClient
        .sendEmail(notifyConfirmationTemplateId, emailAddress, {
          // email_address: emailAddress,
          personalisation,
          reference,
          emailReplyToId
        })
    } catch (err) {
      return err
    }
  }

  // Overrides parent class handleGet
  async handleGet (request, h) {
    const [registration, agent, owner] = await Promise.all([
      Registration.get(request),
      Agent.get(request),
      Owner.get(request)
    ])
    const contact = agent || owner
    const { registrationNumber, id: registrationId } = registration || {}
    if (config.notifyEnabled) {
      const result = await this.notifyRegistration(contact, registrationNumber, registrationId)
      if (result.error) {
        logger.error('Failed to send confirmation email:', result.error)
      } else {
        registration.confirmationSent = true
      }
    }

    registration.submittedDate = moment().format('YYYY-MM-DDTHH:mm:ss.000Z')

    await Registration.set(request, registration)
    const nextPath = await this.getNextPath(request)

    return h.redirect(nextPath)
  }
}

module.exports = ConfirmationHandlers