/**
* Copyright Mind Powered Corporation 2020
*
* https://mindpowered.dev/
*/
const maglev = require('@mindpowered/maglev');
const reservedseating = require('../lib/reservedseating.js');
/**
* An Library for Reserved Seating
* Venues have Seats, Events are at Venues
* Reservations are Seats at Events
*/
class ReservedSeating {
constructor() {
let bus = maglev.maglev.MagLev.getInstance('default');
let lib = new reservedseating.reservedseating.ReservedSeating(bus);
}
/**
* Create a new venue
* @param {string} ownerId Who is responsible for this venue
* @param {string} name Name of Venue
* @param {number} maxPeople Maximum people permitted in venue
* @return {Promise} the id of the new venue Promise will resolve to type string.
*/
CreateVenue(ownerId, name, maxPeople) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [ownerId, name, maxPeople];
let ret = jsbus.call('ReservedSeating.CreateVenue', args);
return ret;
}
/**
* Create a new Venue Congiguration
* @param {string} venueId Venue
* @param {string} name Name of Venue Configuration
* @param {number} maxPeople Maximum number of people permitted in this Venue Configuration
* @return {Promise} the id of the new Venue Configuration Promise will resolve to type string.
*/
CreateVenueConfiguration(venueId, name, maxPeople) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [venueId, name, maxPeople];
let ret = jsbus.call('ReservedSeating.CreateVenueConfiguration', args);
return ret;
}
/**
* Create a new seat
* @param {string} name The seat name
* @param {string} seatClass The class of seat
* @param {string} venueConfigId the Venue Configuration the seat belongs to
* @param {array} nextTo the seats that are next to this one
* @param {string} tableId the table this seat is at
* @param {object} geometry Information about where the Seat is
* @return {Promise} the id of the new seat Promise will resolve to type string.
*/
CreateSeat(name, seatClass, venueConfigId, nextTo, tableId, geometry) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [name, seatClass, venueConfigId, nextTo, tableId, geometry];
let ret = jsbus.call('ReservedSeating.CreateSeat', args);
return ret;
}
/**
* Create a new Event
* @param {string} ownerId Who is responsible for this event
* @param {string} venueConfigId Venue Configuration to use for this event
* @param {number} maxPeople Maximum people permitted in venue
* @return {Promise} the id of the new Event Promise will resolve to type string.
*/
CreateEvent(ownerId, venueConfigId, maxPeople) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [ownerId, venueConfigId, maxPeople];
let ret = jsbus.call('ReservedSeating.CreateEvent', args);
return ret;
}
/**
* Create a new Table
* @param {string} venueConfigId Venue Configuration to use for this event
* @param {number} minSeats Minimum number of people in a party to reserve the table
* @param {number} maxSeats Maximum number of people that can sit at this table
* @param {object} geometry Information about where the Table is
* @return {Promise} the id of the new Table Promise will resolve to type string.
*/
CreateTable(venueConfigId, minSeats, maxSeats, geometry) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [venueConfigId, minSeats, maxSeats, geometry];
let ret = jsbus.call('ReservedSeating.CreateTable', args);
return ret;
}
/**
* Create a new Order
* @param {string} userId The user who is placing the reservation
* @param {string} eventId The event that the order is for
* @param {number} expires Timestamp when order expires and is considered abondoned
* @return {Promise} the id of the new Order Promise will resolve to type string.
*/
CreateOrder(userId, eventId, expires) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [userId, eventId, expires];
let ret = jsbus.call('ReservedSeating.CreateOrder', args);
return ret;
}
/**
* Get a Venue
* @param {string} id Venue ID
* @return {Promise} the Venue data as an object Promise will resolve to type object.
*/
GetVenue(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
let ret = jsbus.call('ReservedSeating.GetVenue', args);
return ret;
}
/**
* Get a Venue Configuration
* @param {string} id Venue Configuration ID
* @return {Promise} the VenueConfiguration data as an object Promise will resolve to type object.
*/
GetVenueConfiguration(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
let ret = jsbus.call('ReservedSeating.GetVenueConfiguration', args);
return ret;
}
/**
* Get a Seat
* @param {string} id Seat ID
* @return {Promise} the Seat data as an object Promise will resolve to type object.
*/
GetSeat(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
let ret = jsbus.call('ReservedSeating.GetSeat', args);
return ret;
}
/**
* Get an Event
* @param {string} id Event ID
* @return {Promise} the Event data as an object Promise will resolve to type object.
*/
GetEvent(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
let ret = jsbus.call('ReservedSeating.GetEvent', args);
return ret;
}
/**
* Get a Table
* @param {string} id Table ID
* @return {Promise} the Table data as an object Promise will resolve to type object.
*/
GetTable(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
let ret = jsbus.call('ReservedSeating.GetTable', args);
return ret;
}
/**
* Update a Venue
* @param {object} data Venue data to update
* @param {boolean} complete if set to true, missing fields should be deleted
*/
UpdateVenue(data, complete) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [data, complete];
jsbus.call('ReservedSeating.UpdateVenue', args);
}
/**
* Update a Venue Configuration
* @param {object} data Venue Configuration data to update
* @param {boolean} complete if set to true, missing fields should be deleted
*/
UpdateVenueConfiguration(data, complete) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [data, complete];
jsbus.call('ReservedSeating.UpdateVenueConfiguration', args);
}
/**
* Update a Seat
* @param {object} data Seat data to update
* @param {boolean} complete if set to true, missing fields should be deleted
*/
UpdateSeat(data, complete) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [data, complete];
jsbus.call('ReservedSeating.UpdateSeat', args);
}
/**
* Update an Event
* @param {object} data Event data to update
* @param {boolean} complete if set to true, missing fields should be deleted
*/
UpdateEvent(data, complete) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [data, complete];
jsbus.call('ReservedSeating.UpdateEvent', args);
}
/**
* Update a Table
* @param {object} data Table data to update
* @param {boolean} complete if set to true, missing fields should be deleted
*/
UpdateTable(data, complete) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [data, complete];
jsbus.call('ReservedSeating.UpdateTable', args);
}
/**
* Delete a Venue
* @param {string} id Venue ID
*/
DeleteVenue(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteVenue', args);
}
/**
* Delete a Venue Configuration
* Must be unavailable first
* @param {string} id Venue Configuration ID
*/
DeleteVenueConfiguration(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteVenueConfiguration', args);
}
/**
* Delete a Seat
* Venue Configuration must be unavailable first
* @param {string} id Seat ID
*/
DeleteSeat(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteSeat', args);
}
/**
* Delete an Event
* Events on sale must be cancelled before being deleted.
* @param {string} id Event ID
*/
DeleteEvent(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteEvent', args);
}
/**
* Delete a Table
* Venue Configuration must be unavailable first
* @param {string} id Table ID
*/
DeleteTable(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteTable', args);
}
/**
* Delete an Order
* Reservations must be cancelled first
* @param {string} id Order ID
*/
DeleteOrder(id) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [id];
jsbus.call('ReservedSeating.DeleteOrder', args);
}
/**
* Complete order and convert holds into reservations
* @param {string} orderId Order ID
*/
CompleteOrder(orderId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [orderId];
jsbus.call('ReservedSeating.CompleteOrder', args);
}
/**
* Place a hold on a seat and add it to an order
* @param {string} orderId Order ID
* @param {string} seatId Seat ID
*/
AddSeatToOrder(orderId, seatId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [orderId, seatId];
jsbus.call('ReservedSeating.AddSeatToOrder', args);
}
/**
* Keep an order from expiring and becoming abondoned
* @param {string} orderId Order ID
* @param {number} expires New timestamp when order will expire
*/
ContinueOrder(orderId, expires) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [orderId, expires];
jsbus.call('ReservedSeating.ContinueOrder', args);
}
/**
* Automatically select some seats and add them to the order
* @param {number} numSeats Number of seats to select
* @param {array} seatClassPreference Which seat classes to prefer in order
*/
AutoSelect(numSeats, seatClassPreference) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [numSeats, seatClassPreference];
jsbus.call('ReservedSeating.AutoSelect', args);
}
/**
* Cancel an event and all reservations for that event
* @param {string} eventId Event ID
*/
CancelEvent(eventId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [eventId];
jsbus.call('ReservedSeating.CancelEvent', args);
}
/**
* Cancel a reservation and release the seats
* @param {string} orderId Order ID
* @param {string} seatId Seat ID
*/
CancelReservation(orderId, seatId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [orderId, seatId];
jsbus.call('ReservedSeating.CancelReservation', args);
}
/**
* Get all Seats and Tables for an Event
* @param {string} eventId Event ID
* @param {number} page page number
* @param {number} perpage per page
*/
GetSeatsAndTablesForEvent(eventId, page, perpage) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [eventId, page, perpage];
jsbus.call('ReservedSeating.GetSeatsAndTablesForEvent', args);
}
/**
* Get any abondoned (expired) orders
* @param {number} page page number
* @param {number} perpage per page
* @return {Promise} abondoned orders Promise will resolve to type array.
*/
FindAbandonedOrders(page, perpage) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [page, perpage];
let ret = jsbus.call('ReservedSeating.FindAbandonedOrders', args);
return ret;
}
/**
* Get a users orders
* @param {string} userId User ID
* @param {number} page page number
* @param {number} perpage per page
* @return {Promise} orders for user Promise will resolve to type array.
*/
GetOrdersForUser(userId, page, perpage) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [userId, page, perpage];
let ret = jsbus.call('ReservedSeating.GetOrdersForUser', args);
return ret;
}
/**
* Get all Events marked on sale
* @param {number} page page number
* @param {number} perpage per page
* @return {Promise} events on sale Promise will resolve to type array.
*/
GetAllEventsOnSale(page, perpage) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [page, perpage];
let ret = jsbus.call('ReservedSeating.GetAllEventsOnSale', args);
return ret;
}
/**
* Make a venue configuration available or unavailable.
* Must not have any events for sale using this venute configuration.
* @param {string} venueConfigurationId Venue Configuration ID
* @param {boolean} available availability
*/
UpdateVenueConfigurationAvailability(venueConfigurationId, available) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [venueConfigurationId, available];
jsbus.call('ReservedSeating.UpdateVenueConfigurationAvailability', args);
}
/**
* Get Venue Configurations for a Venue
* @param {string} venueId Venue ID
* @return {Promise} the Venue Configurations for the specified Venue Promise will resolve to type array.
*/
GetVenueConfigurations(venueId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [venueId];
let ret = jsbus.call('ReservedSeating.GetVenueConfigurations', args);
return ret;
}
/**
* Get a summary of an Order
* @param {string} orderId Order ID
* @return {Promise} the summary for the specified Order Promise will resolve to type array.
*/
GetOrderSummary(orderId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [orderId];
let ret = jsbus.call('ReservedSeating.GetOrderSummary', args);
return ret;
}
/**
* Get all Venues for an owner
* @param {string} ownerId owner id
* @return {Promise} List of venues Promise will resolve to type array.
*/
GetAllVenuesByOwner(ownerId) {
let jsbus = maglev.maglev.MagLevJs.getInstance('default');
let args = [ownerId];
let ret = jsbus.call('ReservedSeating.GetAllVenuesByOwner', args);
return ret;
}
}
module.exports = ReservedSeating;