UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

137 lines (136 loc) 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.modelName = exports.indexes = void 0; exports.createSchema = createSchema; const mongoose_1 = require("mongoose"); const settings_1 = require("../../../settings"); const writeConcern_1 = require("../writeConcern"); const modelName = 'PendingReservation'; exports.modelName = modelName; const schemaDefinition = { project: { type: mongoose_1.SchemaTypes.Mixed, required: true }, provider: { type: mongoose_1.SchemaTypes.Mixed, required: true }, typeOf: { type: String, required: true }, numSeats: { type: Number, required: true }, reservationFor: { type: mongoose_1.SchemaTypes.Mixed, required: true }, reservationNumber: { type: String, required: true }, subReservation: [mongoose_1.SchemaTypes.Mixed], bookingTime: { type: Date, required: true }, expires: { type: Date, required: true }, dateCreated: { type: Date, required: true }, dateModified: { type: Date, required: false } }; const schemaOptions = { autoIndex: settings_1.MONGO_AUTO_INDEX, autoCreate: false, collection: 'pendingReservations', id: true, read: settings_1.MONGO_READ_PREFERENCE, writeConcern: writeConcern_1.writeConcern, strict: true, strictQuery: false, timestamps: false, versionKey: false, toJSON: { getters: false, virtuals: false, minimize: false, versionKey: false }, toObject: { getters: false, virtuals: true, minimize: false, versionKey: false } }; const indexes = [ [ { bookingTime: -1 }, { name: 'bookingTime' } ], [ { 'project.id': 1, bookingTime: -1 }, { name: 'projectId' } ], [ { 'provider.id': 1, bookingTime: -1 }, { name: 'providerId' } ], [ { 'reservationFor.id': 1, bookingTime: -1 }, { name: 'reservationForId' } ], [ { reservationNumber: 1, bookingTime: -1 }, { name: 'reservationNumber' } ], [ { 'subReservation.identifier': 1, bookingTime: -1 }, { name: 'subReservationIdentifier' } ], [ { reservationNumber: 1 }, { unique: true, name: 'uniqueReservationNumber' } ], [ { 'reservationFor.id': 1, reservationNumber: 1, 'subReservation.identifier': 1 }, { name: 'deleteReservationIfExists', partialFilterExpression: { 'subReservation.identifier': { $exists: true } } } ], [ { 'reservationFor.id': 1, 'subReservation.identifier': 1 }, { unique: true, name: 'uniqueReservationIdentifier', partialFilterExpression: { 'subReservation.identifier': { $exists: true } // numSeats: { $gte: 1 }よりも明らかに性能が高い } } ], [ { 'reservationFor.id': 1, numSeats: 1, bookingTime: 1, dateCreated: 1 }, { name: 'aggregateNumSeats', partialFilterExpression: { numSeats: { $gte: 1 } // 'subReservation.identifier': { $exists: true }よりも明らかに性能が高い } } ], [ { expires: 1 }, { name: 'deleteExpiredMany' } ] ]; exports.indexes = indexes; /** * 保留予約スキーマ */ let schema; function createSchema() { if (schema === undefined) { schema = new mongoose_1.Schema(schemaDefinition, schemaOptions); if (settings_1.MONGO_AUTO_INDEX) { indexes.forEach((indexParams) => { schema === null || schema === void 0 ? void 0 : schema.index(...indexParams); }); } } return schema; }