booking-db
Version:
Chairs reservation system in PicsArt
56 lines (47 loc) • 1.22 kB
JavaScript
const mongoose = require('mongoose');
const idValidator = require('mongoose-id-validator');
const uniqueValidator = require('mongoose-beautiful-unique-validation');
const { Schema } = mongoose;
const TableSchema = new Schema({
table_number: {
unique: false,
type: Number,
required: true,
},
team_id: {
type: Schema.Types.ObjectId,
ref: 'Team',
required: true,
},
chairs_count: {
type: Number,
required: true,
default: 6,
},
table_config: Object,
}, { timestamps: true, versionKey: false });
TableSchema.index({
team_id: 1,
table_number: 1
}, { unique: '[team, table] pair already exists.' });
TableSchema.virtual('chairs', {
ref: 'Chair',
localField: '_id',
foreignField: 'table_id',
});
TableSchema.pre(
'deleteOne',
{ document: false, query: true },
async (next) => {
const doc = await this.model.findOne(this.getFilter());
await mongoose
.model('Chair')
.deleteMany({ table_id: doc._id }, next);
await mongoose
.model('Reservation')
.deleteMany({ table_id: doc._id }, next);
}
);
TableSchema.plugin(idValidator);
TableSchema.plugin(uniqueValidator);
module.exports = mongoose.model('Table', TableSchema);