Files
Eventment-API/routes/demo.js

103 lines
2.6 KiB
JavaScript

const aqp = require('api-query-params');
const errors = require('restify-errors');
const EventFixture = require('../fixtures/event');
const ItemFixture = require('../fixtures/item');
const Event = require('../models/event');
const Item = require('../models/item');
const mergeItemTicketsWithEventStubTickets = (items, ticketStubs, callback) => {
const getMatchingTicket = (doc) => {
for (let i = 0; i < ticketStubs.length; i++) {
if (doc.title === ticketStubs[i].name) {
ticketStubs[i].itemId = doc.id;
return ticketStubs[i];
}
}
return null;
};
let ticketsWithItemIds = [];
items.forEach((item) => {
if (item.type === 'ticket') {
const mergedTicket = getMatchingTicket(item);
if (mergedTicket) {
ticketsWithItemIds.push(mergedTicket);
}
}
});
callback(ticketsWithItemIds);
};
module.exports = function (server, auth) {
server.get('/demo/populate', auth.manager, (req, res, next) => {
const eventStub = EventFixture.getEvent(true);
const eventTickets = eventStub.ticketClasses;
delete eventStub.ticketClasses;
Event.create(eventStub, (err, event) => {
if (err) {
return next(err);
}
if (!event) {
return next(err, false, 'There was a problem creating the event');
}
const itemsStub = ItemFixture({
eventId: event.id,
auction: 10,
ticket: eventTickets,
eventStart: eventStub.startTime,
eventEnd: eventStub.endTime,
});
Item.insertMany(itemsStub, (err, items) => {
if (err) {
return next(err);
}
if (!items.length) {
return next(err, false, 'No items were inserted.');
}
mergeItemTicketsWithEventStubTickets(items, eventTickets, (ticketsWithIds) => {
Event.updateOne(
{ _id: event.id },
{ $set: { ticketed: true, ticketClasses: ticketsWithIds } },
(err, event) => {
if (err) {
return next(err);
}
res.send({ success: true, info: 'Demo data successfully inserted.' });
next();
},
);
});
});
});
});
server.get('/demo/depopulate', auth.manager, (req, res, next) => {
let report = { items: null, events: null };
Event.deleteMany({}, (err, { deletedCount = 0 }) => {
report.events = deletedCount;
Item.deleteMany({}, (err, { deletedCount = 0 }) => {
report.items = deletedCount;
res.send({ report });
return next();
});
});
next();
});
};