@chevre/domain
Version: 
Chevre Domain Library for Node.js
114 lines (113 loc) • 3.01 kB
JavaScript
;
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 factory = require("../../../factory");
const settings_1 = require("../../../settings");
const modelName = 'Member';
exports.modelName = modelName;
const schemaDefinition = {
    project: {
        type: mongoose_1.SchemaTypes.Mixed,
        required: true
    },
    typeOf: {
        type: String,
        required: true
    },
    member: {
        type: mongoose_1.SchemaTypes.Mixed,
        required: true
    }
};
const schemaOptions = {
    autoIndex: settings_1.MONGO_AUTO_INDEX,
    autoCreate: false,
    collection: 'members',
    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 = [
    [
        { 'member.id': 1 },
        { name: 'searchByMemberId' }
    ],
    [
        { 'project.id': 1, 'member.id': 1 },
        {
            name: 'uniqueByMemberId', // プロジェクトメンバーは販売者メンバーになれない
            unique: true,
            partialFilterExpression: {
                'member.memberOf.typeOf': { $eq: factory.organizationType.Project }
            }
        }
    ],
    [
        { 'project.id': 1, 'member.id': 1, 'member.memberOf.id': 1 },
        {
            name: 'uniqueIAMMember',
            unique: true
        }
    ],
    [
        { 'member.typeOf': 1, 'member.id': 1 },
        {
            name: 'searchByMemberTypeOf',
            partialFilterExpression: {
                'member.typeOf': { $exists: true }
            }
        }
    ],
    [
        { 'member.hasRole.roleName': 1, 'member.id': 1 },
        {
            name: 'searchByMemberHasRoleRoleName',
            partialFilterExpression: {
                'member.hasRole.roleName': { $exists: true }
            }
        }
    ],
    [
        { 'member.memberOf.typeOf': 1, 'member.id': 1 },
        { name: 'searchByMemberMemberOfTypeOf' }
    ],
    [
        { 'member.memberOf.id': 1, 'member.id': 1 },
        { name: 'searchByMemberMemberOfId' }
    ]
];
exports.indexes = indexes;
/**
 * IAMメンバースキーマ
 */
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;
}