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(); }); };