'use strict'; const Nantum = require('@hw/edge-sdks'); const { API } = Nantum; const logger = require('../logger'); const { company, nantumUrl } = require('../config'); const { request } = API({ company, logger }); async function getVenRegistration(clientCertificateFingerprint) { const results = await request({ uri: `${nantumUrl}/oadr_ven_registrations`, query: { client_certificate_fingerprint: clientCertificateFingerprint, }, }); return results[0]; } async function createVenRegistration(ven) { await request({ method: 'POST', uri: `${nantumUrl}/oadr_ven_registrations`, body: ven, }); } async function deleteVenRegistration(id) { await request({ method: 'DELETE', uri: `${nantumUrl}/oadr_ven_registrations/${id}` }); } async function getVenReports(oadrVenRegistrationId) { const results = await request({ uri: `${nantumUrl}/oadr_ven_reports`, query: { oadr_ven_registration_id: oadrVenRegistrationId, }, }); return results[0]; } async function getSeenEvents(oadrVenRegistrationId) { const results = await request({ uri: `${nantumUrl}/oadr_ven_seen_events`, query: { oadr_ven_registration_id: oadrVenRegistrationId, }, }); return results; } async function updateVenReports(id, reports) { await request({ method: 'PUT', uri: `${nantumUrl}/oadr_ven_reports/${id}`, body: { reports }, }); } async function createVenReports(venReports) { await request({ method: 'POST', uri: `${nantumUrl}/oadr_ven_reports`, body: venReports, }); } async function getEventResponse(venId, eventId, modificationNumber) { const results = await request({ uri: `${nantumUrl}/oadr_event_responses`, query: { oadr_ven_id: venId, oadr_event_id: eventId, modification_number: modificationNumber, }, }); return results[0]; } async function createEventResponse(eventResponse) { await request({ method: 'POST', uri: `${nantumUrl}/oadr_event_responses`, body: eventResponse, }); } async function updateEventResponse(oadrEventResponseId, newProperties) { await request({ method: 'PUT', uri: `${nantumUrl}/oadr_event_responses/${oadrEventResponseId}`, body: newProperties, }); } async function markEventAsSeen(oadrVenRegistrationId, eventId, modificationNumber) { await request({ method: 'POST', uri: `${nantumUrl}/oadr_ven_seen_events`, body: { oadr_ven_registration_id: oadrVenRegistrationId, oadr_event_id: eventId, modification_number: modificationNumber }, }); } async function getEvents(venRegistrationId) { const ven = await getVen(venRegistrationId); if (!ven) return []; // no ven: no events const eventVens = await request({ uri: `${nantumUrl}/oadr_event_vens`, query: { oadr_ven_id: ven._id }, }); const eventIds = eventVens.map(eventVen => eventVen.oadr_event_id); return await request({ uri: `${nantumUrl}/oadr_events`, query: { _id: eventIds }, }); } async function sendReportReadings(ven, readings) { logger.info( 'received report readings', ven._id, JSON.stringify(readings, null, 2), ); } async function getVen(venRegistrationId) { const results = await request({ uri: `${nantumUrl}/oadr_vens`, query: { oadr_ven_registration_id: venRegistrationId, }, }); return results[0]; } module.exports = { getEvents, getEventResponse, createEventResponse, updateEventResponse, markEventAsSeen, getVenRegistration, deleteVenRegistration, createVenRegistration, sendReportReadings, getVenReports, updateVenReports, createVenReports, getSeenEvents, getVen };