Source

api/alerts-api.js

/**
 * @namespace api
 * @category api
 * @module alerts-api
 * */

import Vue from 'vue'
import store from '@/store'
import api from '@/api'
import { getNestedValue } from '@/utils/object'
import moment from 'moment'
import { getQueryStringValue } from '@/utils/querystring'
import { computeStatusLabel } from '@/services/alert-service.js'
import APIUrls, {
  APIV2RequestDatetimeFormat,
} from '@/config/simpliciti-apis.js'
import { generateShortId } from '@/utils/crypto.js'

/**
 *
 * @param {*} messageId
 * @returns {Object}
 */
export async function acknowledgeAlert(messageId) {
  return await api.v2.post(
    `${APIUrls.APIV2_MESSAGE_ACK}?message_id=${messageId}`
  )
}

/**
 *
 * @returns {Array}
 */
export async function fetchAlertTypes() {
  return ((await api.v2.get(APIUrls.APIV2_CDM_TYPE_ALERTE)).data || [])
    .map((item) => ({
      id: getNestedValue(item, 'id'),
      label: getNestedValue(item, 'libelle'),
      description: getNestedValue(item, 'description'),
    }))
    .sort((a, b) => (a.label > b.label ? 1 : -1))
}

/**
 *
 * @param {*} vehicleIds
 * @param {*} fromDate
 * @param {*} toDate
 * @param {*} options
 * @returns {Array}
 */
export async function fetchAlerts(
  vehicleIds,
  fromDate = null,
  toDate = null,
  options = {}
) {
  let alertTypes = options.types || []
  let alertStatus = options.status || []
  fromDate = moment(fromDate)
    .hour(0)
    .minute(0)
    .second(0)
    .format(APIV2RequestDatetimeFormat)
  toDate = moment(toDate)
    .hour(23)
    .minute(59)
    .second(59)
    .format(APIV2RequestDatetimeFormat)
  alertTypes =
    alertTypes.length > 0 ? `&typealerte_id=${alertTypes.join(',')}` : ``
  alertStatus = alertStatus.length > 0 ? `&statut=${alertStatus.join(',')}` : ``
  let userId = getQueryStringValue('user_id')
    ? getQueryStringValue('user_id')
    : store.state.auth.user_infos.userId
  let arr =
    (getQueryStringValue('test') === '1' &&
      require('@/api/mocks/v2/cdm/messages_alertes/fixtures.json').data
        .items) ||
    (
      await api.v2.get(
        `${APIUrls.APIV2_MESSAGES_ALERTES}?vehicule_id=${vehicleIds}&dateheure_debut=${fromDate}&dateheure_fin=${toDate}&utilisateur_id=${userId}${alertTypes}${alertStatus}`
      )
    ).data
  arr = arr.map ? arr : []

  return arr.map((item) => {
    let isAck = !!getNestedValue(item, 'date_ack')
    let datetimeM = moment(getNestedValue(item, ['date_creation']))
    let datetime = datetimeM.isValid() ? datetimeM : null
    let timestamp = datetimeM.isValid() ? datetime._d.getTime() : 0
    let vehicleName = getNestedValue(item, 'vehicule_nom')
    let vehicleCategory = getNestedValue(item, 'categorie_nom')
    return {
      id:
        getQueryStringValue('test') === '1'
          ? generateShortId()
          : getNestedValue(item, 'message_id'),
      title: getNestedValue(item, ['alerte_titre']),
      datetime,
      vehicleName,
      vehicleCategory,
      type: getNestedValue(item, 'type'),
      message: getNestedValue(item, 'message'),
      address: getNestedValue(item, 'adresse'),
      lat: getNestedValue(item, 'latitude'),
      lng: getNestedValue(item, 'longitude'),
      isAck,
      timestamp,
      statusLabel: computeStatusLabel(isAck),
      datetimeFormatted: Vue.$date.formatDatetime(datetime),
      dateFormatted: Vue.$date.formatDate(datetime),
      timeFormatted: Vue.$date.formatTimeWithSeconds(datetime),
      vehicleLabel: vehicleCategory
        ? `${vehicleName} (${vehicleCategory})`
        : vehicleName,
    }
  })
}