123 lines
3.2 KiB
JavaScript
123 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
const config = require('../../../ivis-core/server/lib/config');
|
|
const moment = require('moment');
|
|
const knex = require('../../../ivis-core/server/lib/knex');
|
|
const router = require('../../../ivis-core/server/lib/router-async').create();
|
|
const log = require('../../../ivis-core/server/lib/log');
|
|
const signalSets = require('../../../ivis-core/server/models/signal-sets');
|
|
const { SignalType } = require('../../../ivis-core/shared/signals');
|
|
const contextHelpers = require('../../../ivis-core/server/lib/context-helpers');
|
|
const namespaces = require('../../../ivis-core/server/models/namespaces');
|
|
|
|
/*
|
|
async function ensureCampaignTracker() {
|
|
const schema = {
|
|
type: {
|
|
type: SignalType.INTEGER,
|
|
name: 'Type',
|
|
settings: {},
|
|
indexed: true,
|
|
weight_list: 0,
|
|
weight_edit: 0
|
|
},
|
|
timestamp: {
|
|
type: SignalType.DATE_TIME,
|
|
name: 'Timestamp',
|
|
settings: {},
|
|
indexed: true,
|
|
weight_list: 1,
|
|
weight_edit: 1
|
|
},
|
|
campaignId: {
|
|
type: SignalType.INTEGER,
|
|
name: 'Campaign ID',
|
|
settings: {},
|
|
indexed: true,
|
|
weight_list: 2,
|
|
weight_edit: 2
|
|
},
|
|
listId: {
|
|
type: SignalType.INTEGER,
|
|
name: 'List ID',
|
|
settings: {},
|
|
indexed: true,
|
|
weight_list: 3,
|
|
weight_edit: 3
|
|
},
|
|
subscriptionId: {
|
|
type: SignalType.INTEGER,
|
|
name: 'Subscription ID',
|
|
settings: {},
|
|
indexed: true,
|
|
weight_list: 4,
|
|
weight_edit: 4
|
|
},
|
|
|
|
};
|
|
|
|
return await signalSets.ensure(
|
|
req.context,
|
|
'campaignTracker',
|
|
schema,
|
|
'Campaign Tracker',
|
|
'',
|
|
config.mailtrain.namespace
|
|
);
|
|
}
|
|
|
|
async function ingestCampaignTrackerRecord(record) {
|
|
return {
|
|
id: TODO
|
|
};
|
|
}
|
|
|
|
const types = {
|
|
campaign_tracker: {
|
|
ensure: ensureCampaignTracker,
|
|
ingest: ingestCampaignTrackerRecord
|
|
}
|
|
}
|
|
|
|
router.postAsync('/events', async (req, res) => {
|
|
const batch = req.body;
|
|
|
|
const recordsByType = {};
|
|
const signalSetWithSignalMapByType = {};
|
|
|
|
for (const type in types) {
|
|
recordsByType[type] = [];
|
|
signalSetWithSignalMapByType[type] = await types[type].ensure();
|
|
}
|
|
|
|
for (const dataEntry of batch.data) {
|
|
const record = {
|
|
id: dataEntry[idField],
|
|
signals: {}
|
|
};
|
|
|
|
for (const fieldId in dataEntry) {
|
|
if (fieldId !== idField) {
|
|
if (!(fieldId in schema)) {
|
|
throw new Error(`Unknown data field "${fieldId}`);
|
|
}
|
|
|
|
let value = dataEntry[fieldId];
|
|
if (schema[fieldId].type === SignalType.DATE_TIME) {
|
|
value = moment(value);
|
|
}
|
|
|
|
record.signals[fieldId] = value;
|
|
}
|
|
}
|
|
|
|
records.push(record);
|
|
}
|
|
|
|
await signalSets.insertRecords(req.context, signalSetWithSignalMap, records);
|
|
|
|
return res.json();
|
|
});
|
|
*/
|
|
|
|
module.exports = router;
|