/**
* @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,
}
})
}
Source