103 lines
2.6 KiB
JavaScript
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();
|
|
});
|
|
};
|