@chevre/domain
Version:
Chevre Domain Library for Node.js
285 lines (284 loc) • 7.87 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.modelName = exports.indexes = void 0;
exports.createSchema = createSchema;
const mongoose_1 = require("mongoose");
const writeConcern_1 = require("../writeConcern");
const settings_1 = require("../../../settings");
const modelName = 'Event';
exports.modelName = modelName;
const schemaDefinition = {
project: {
type: mongoose_1.SchemaTypes.Mixed,
required: true
},
organizer: {
type: mongoose_1.SchemaTypes.Mixed,
required: true
},
_id: String,
typeOf: {
type: String,
required: true
},
identifier: String,
name: mongoose_1.SchemaTypes.Mixed,
additionalProperty: mongoose_1.SchemaTypes.Mixed,
description: mongoose_1.SchemaTypes.Mixed,
doorTime: Date,
endDate: Date,
eventStatus: String,
location: mongoose_1.SchemaTypes.Mixed,
startDate: Date,
superEvent: mongoose_1.SchemaTypes.Mixed,
offers: mongoose_1.SchemaTypes.Mixed,
maximumAttendeeCapacity: { type: Number },
remainingAttendeeCapacity: { type: Number },
checkInCount: { type: Number },
attendeeCount: { type: Number },
aggregateReservation: mongoose_1.SchemaTypes.Mixed,
aggregateOffer: mongoose_1.SchemaTypes.Mixed,
coaInfo: mongoose_1.SchemaTypes.Mixed
// ↓discontinue EventSeries(2024-09-17~)
// alternateName: SchemaTypes.Mixed,
// alternativeHeadline: SchemaTypes.Mixed,
// duration: String,
// headline: SchemaTypes.Mixed,
// workPerformed: SchemaTypes.Mixed,
// videoFormat: SchemaTypes.Mixed,
// soundFormat: SchemaTypes.Mixed,
// subtitleLanguage: SchemaTypes.Mixed,
// dubLanguage: SchemaTypes.Mixed,
// kanaName: String,
};
const schemaOptions = {
autoIndex: settings_1.MONGO_AUTO_INDEX,
autoCreate: false,
collection: 'events',
id: true,
read: settings_1.MONGO_READ_PREFERENCE,
writeConcern: writeConcern_1.writeConcern,
strict: true,
strictQuery: false,
timestamps: false, // 2024-09-06~
versionKey: false, // 2024-09-06~
toJSON: {
getters: false,
virtuals: false,
minimize: false,
versionKey: false
},
toObject: {
getters: false,
virtuals: true,
minimize: false,
versionKey: false
}
};
const indexes = [
[
{ 'project.id': 1, startDate: 1 },
{
name: 'searchByProjectId-v20220721'
}
],
[
{ 'organizer.id': 1, startDate: 1 },
{
name: 'searchByOrganizerId',
partialFilterExpression: {
'organizer.id': { $exists: true }
}
}
],
[
{ typeOf: 1, startDate: 1 },
{ name: 'searchByTypeOf' }
],
[
{ eventStatus: 1, startDate: 1 },
{ name: 'searchByEventStatus' }
],
[
{ name: 1, startDate: 1 },
{ name: 'searchByName' }
],
[
{ 'superEvent.id': 1, startDate: 1 },
{
name: 'searchBySuperEventId',
partialFilterExpression: {
'superEvent.id': { $exists: true }
}
}
],
[
{ 'location.id': 1, startDate: 1 },
{
name: 'searchByLocationId',
partialFilterExpression: {
'location.id': { $exists: true }
}
}
],
[
{ 'location.branchCode': 1, startDate: 1 },
{
name: 'searchByLocationBranchCode',
partialFilterExpression: {
'location.branchCode': { $exists: true }
}
}
],
[
{ 'superEvent.location.branchCode': 1, startDate: 1 },
{
name: 'searchBySuperEventLocationBranchCode',
partialFilterExpression: {
'superEvent.location.branchCode': { $exists: true }
}
}
],
[
{ 'superEvent.location.id': 1, startDate: 1 },
{
name: 'searchBySuperEventLocationId',
partialFilterExpression: {
'superEvent.location.id': { $exists: true }
}
}
],
[
{ 'superEvent.workPerformed.identifier': 1, startDate: 1 },
{
name: 'searchBySuperEventWorkPerformedIdentifier',
partialFilterExpression: {
'superEvent.workPerformed.identifier': { $exists: true }
}
}
],
[
{ startDate: 1 },
{ name: 'searchByStartDate' }
],
[
{ endDate: 1, startDate: 1 },
{ name: 'searchByEndDate' }
],
[
{
'offers.itemOffered.serviceOutput.reservedTicket.ticketedSeat.typeOf': 1,
startDate: 1
},
{
partialFilterExpression: {
'offers.itemOffered.serviceOutput.reservedTicket.ticketedSeat.typeOf': { $exists: true }
},
name: 'searchByOffersItemOfferedServiceOutputReservedTicketTicketedSeatTypeOf'
}
],
[
{
'offers.itemOffered.serviceType.id': 1,
startDate: 1
},
{
partialFilterExpression: {
'offers.itemOffered.serviceType.id': { $exists: true }
},
name: 'searchByOffersItemOfferedServiceTypeId'
}
],
[
{
'offers.itemOffered.id': 1,
startDate: 1
},
{
partialFilterExpression: {
'offers.itemOffered.id': { $exists: true }
},
name: 'searchByOffersItemOfferedId'
}
],
[
{ 'offers.seller.makesOffer': 1, startDate: 1 },
{
name: 'searchBySellerMakesOffer',
partialFilterExpression: {
'offers.seller.makesOffer': { $exists: true }
}
}
],
[
{ 'offers.seller.makesOffer.availableAtOrFrom.id': 1, startDate: 1 },
{
name: 'sellerMakesOfferAvailableAtOrFromId',
partialFilterExpression: {
'offers.seller.makesOffer.availableAtOrFrom.id': { $exists: true }
}
}
],
// [
// { 'offers.seller.makesOffer.offeredBy.identifier': 1, startDate: 1 },
// {
// name: 'offeredByIdentifier',
// partialFilterExpression: {
// 'offers.seller.makesOffer.offeredBy.identifier': { $exists: true }
// }
// }
// ],
[
{ 'project.id': 1, identifier: 1 },
{
name: 'uniqueIdentifier',
unique: true,
partialFilterExpression: {
identifier: { $exists: true }
}
}
],
[
{ 'name.ja': 1, startDate: 1 },
{
name: 'searchByNameJa',
partialFilterExpression: {
'name.ja': { $exists: true }
}
}
],
[
{ 'name.en': 1, startDate: 1 },
{
name: 'searchByNameEn',
partialFilterExpression: {
'name.en': { $exists: true }
}
}
],
[
{ additionalProperty: 1, startDate: 1 },
{
name: 'searchByAdditionalProperty',
partialFilterExpression: {
additionalProperty: { $exists: true }
}
}
]
];
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;
}