@chevre/domain
Version:
Chevre Domain Library for Node.js
204 lines (203 loc) • 5.88 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 = 'Place';
exports.modelName = modelName;
const schemaDefinition = {
project: {
type: mongoose_1.SchemaTypes.Mixed,
required: true
},
// 必須化(2023-07-14~)
parentOrganization: {
type: mongoose_1.SchemaTypes.Mixed,
required: true
},
typeOf: {
type: String,
required: true
},
name: mongoose_1.SchemaTypes.Mixed,
description: mongoose_1.SchemaTypes.Mixed,
address: mongoose_1.SchemaTypes.Mixed,
branchCode: { type: String, required: true },
containedInPlace: mongoose_1.SchemaTypes.Mixed,
containsPlace: [mongoose_1.SchemaTypes.Mixed],
maximumAttendeeCapacity: Number,
openingHoursSpecification: mongoose_1.SchemaTypes.Mixed,
smokingAllowed: Boolean,
additionalProperty: [mongoose_1.SchemaTypes.Mixed],
// ↓ルームの施設からの分離に伴い属性追加(2023-06-22~)
openSeatingAllowed: mongoose_1.SchemaTypes.Mixed,
amenityFeature: mongoose_1.SchemaTypes.Mixed
// ↓migrated to civicStructures(2024-09-19~)
// alternateName: SchemaTypes.Mixed,
// hasEntranceGate: [SchemaTypes.Mixed],
// hasPOS: [SchemaTypes.Mixed],
// sameAs: String,
// telephone: String,
// url: String,
// kanaName: String,
// offers: SchemaTypes.Mixed,
};
const schemaOptions = {
autoIndex: settings_1.MONGO_AUTO_INDEX,
autoCreate: false,
collection: 'places',
id: true,
read: settings_1.MONGO_READ_PREFERENCE,
writeConcern: writeConcern_1.writeConcern,
strict: true,
strictQuery: false,
timestamps: false, // 2024-09-03~
versionKey: false, // 2024-09-03~
toJSON: {
getters: false,
virtuals: false,
minimize: false,
versionKey: false
},
toObject: {
getters: false,
virtuals: true,
minimize: false,
versionKey: false
}
};
const indexes = [
[
{ branchCode: 1 },
{ name: 'searchByBranchCode-v2' }
],
[
{ typeOf: 1, branchCode: 1 },
{ name: 'searchByTypeOf-v2' }
],
[
{ 'project.id': 1, branchCode: 1 },
{ name: 'searchByProjectId-v20220721' }
],
[
{ 'name.ja': 1, branchCode: 1 },
{
name: 'searchByNameJa',
partialFilterExpression: {
'name.ja': { $exists: true }
}
}
],
[
{ 'name.en': 1, branchCode: 1 },
{
name: 'searchByNameEn',
partialFilterExpression: {
'name.en': { $exists: true }
}
}
],
[
{ 'parentOrganization.id': 1, branchCode: 1 },
{
name: 'searchByParentOrganization',
partialFilterExpression: {
'parentOrganization.id': { $exists: true }
}
}
],
[
{ 'containsPlace.branchCode': 1, branchCode: 1 },
{
name: 'searchByContainsPlaceBranchCode',
partialFilterExpression: {
'containsPlace.branchCode': { $exists: true }
}
}
],
[
{ 'containsPlace.containsPlace.branchCode': 1, branchCode: 1 },
{
name: 'searchByContainsPlaceContainsPlaceBranchCode',
partialFilterExpression: {
'containsPlace.containsPlace.branchCode': { $exists: true }
}
}
],
[
{ additionalProperty: 1, branchCode: 1 },
{
name: 'searchByAdditionalProperty',
partialFilterExpression: {
additionalProperty: { $exists: true }
}
}
],
[
{ 'containsPlace.additionalProperty': 1, branchCode: 1 },
{
name: 'searchByContainsPlaceAdditionalProperty',
partialFilterExpression: {
'containsPlace.additionalProperty': { $exists: true }
}
}
],
[
{ 'containsPlace.containsPlace.additionalProperty': 1, branchCode: 1 },
{
name: 'searchByContainsPlaceContainsPlaceAdditionalProperty',
partialFilterExpression: {
'containsPlace.containsPlace.additionalProperty': { $exists: true }
}
}
],
[
{ 'containedInPlace.id': 1, branchCode: 1 },
{
name: 'searchByContainedInPlaceId',
partialFilterExpression: {
'containedInPlace.id': { $exists: true }
}
}
],
[
{ 'containedInPlace.branchCode': 1, branchCode: 1 },
{
name: 'searchByContainedInPlaceBranchCode',
partialFilterExpression: {
'containedInPlace.branchCode': { $exists: true }
}
}
]
// [
// {
// typeOf: 1,
// 'project.id': 1,
// 'containedInPlace.branchCode': 1,
// branchCode: 1,
// 'containsPlace.branchCode': 1,
// 'containsPlace.containsPlace.branchCode': 1
// },
// {
// name: 'projectSeatsUsingSort'
// }
// ]
];
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;
}