Files
Eventment-API/models/event.js

140 lines
2.1 KiB
JavaScript

const config = require('../config.js');
const mongoose = require('mongoose');
const timestamps = require('mongoose-timestamp');
const PostSchema = new mongoose.Schema(
{
author: String,
title: {
type: String,
required: true,
},
content: {
type: String,
required: true,
},
isPublic: {
type: Boolean,
default: true,
},
scheduledPost: {
type: Boolean,
default: false,
},
sendNotification: Date,
notificationContent: String,
notificationLinksTo: String,
timestamp: Date,
}
);
const TicketSchema = new mongoose.Schema(
{
name: {
type: String,
required: true,
trim: true,
},
price: {
type: Number,
default: 0,
},
capacity: {
type: Number,
required: true,
},
available: {
type: Number,
required: true,
},
itemId: {
type: String,
required: true,
trim: true,
},
startSale: {
type: Date,
required: true,
},
endSale: {
type: Date,
required: true,
},
},
{ minimize: false },
);
const EventSchema = new mongoose.Schema(
{
startTime: {
type: Date,
required: true,
},
endTime: {
type: Date,
required: true,
},
title: {
type: String,
required: true,
trim: true,
},
tagline: {
type: String,
required: true,
trim: true,
},
description: {
type: String,
required: true,
trim: true,
},
isTicketed: {
type: Boolean,
default: false,
},
ticketClasses: [ TicketSchema ],
showFrom: {
type: Date,
required: true,
},
showUntil: {
type: Date,
required: true,
},
requireLoginToSeeAuction: {
type: Boolean,
default: false,
},
images: [{
url: String,
}],
url: String,
posts: [ PostSchema ],
},
{ minimize: false },
);
EventSchema.plugin(timestamps);
EventSchema.path('images').get(v => `${config.assetStoreUrl}${v.url}`)
const Event = mongoose.model('Event', EventSchema);
module.exports = Event;