@chevre/domain
Version: 
Chevre Domain Library for Node.js
247 lines (246 loc) • 6.55 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 = 'Task';
exports.modelName = modelName;
const schemaDefinition = {
    alternateName: String, // add(2025-03-28~)
    identifier: String,
    description: String, // add(2025-03-30~)
    project: { type: mongoose_1.SchemaTypes.Mixed, required: true },
    name: { type: String, required: true },
    status: { type: String, required: true },
    runsAt: { type: Date, required: true },
    remainingNumberOfTries: { type: Number, required: true },
    numberOfTried: { type: Number, required: true },
    lastTriedAt: Date,
    executionResults: [mongoose_1.SchemaTypes.Mixed],
    executor: mongoose_1.SchemaTypes.Mixed,
    data: mongoose_1.SchemaTypes.Mixed,
    dateAborted: Date,
    expires: Date // add(2024-04-23~)
};
const schemaOptions = {
    autoIndex: settings_1.MONGO_AUTO_INDEX,
    autoCreate: false,
    collection: 'tasks',
    id: true,
    read: 'primary',
    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 = [
    [
        { 'project.id': 1, runsAt: -1 },
        { name: 'searchByProjectId-v20220721' }
    ],
    [
        { name: 1, runsAt: -1 },
        { name: 'searchByName-v2' }
    ],
    [
        { status: 1, runsAt: -1 },
        { name: 'searchByStatus-v2' }
    ],
    [
        { runsAt: -1 },
        { name: 'searchByRunsAt-v2' }
    ],
    [
        // identifier追加(2023-09-01~)
        { identifier: 1, runsAt: -1 },
        {
            name: 'searchByIdentifier',
            partialFilterExpression: {
                identifier: { $exists: true }
            }
        }
    ],
    [
        { dateAborted: 1, runsAt: -1 },
        {
            name: 'searchByDateAborted',
            partialFilterExpression: {
                dateAborted: { $type: 'date' }
            }
        }
    ],
    [
        { lastTriedAt: 1, runsAt: -1 },
        {
            name: 'searchByLastTriedAt-v2',
            partialFilterExpression: {
                lastTriedAt: { $type: 'date' }
            }
        }
    ],
    [
        { expires: 1, runsAt: -1 },
        {
            name: 'expires',
            partialFilterExpression: {
                expires: { $exists: true }
            }
        }
    ],
    [
        { remainingNumberOfTries: 1, runsAt: -1 },
        { name: 'searchByRemainingNumberOfTries-v2' }
    ],
    [
        { 'data.agent.id': 1, runsAt: -1 },
        {
            name: 'searchByDataAgentId',
            partialFilterExpression: {
                'data.agent.id': { $exists: true }
            }
        }
    ],
    [
        { 'data.object.orderNumber': 1, runsAt: -1 },
        {
            name: 'searchByDataObjectOrderNumber',
            partialFilterExpression: {
                'data.object.orderNumber': { $exists: true }
            }
        }
    ],
    [
        { 'data.object.transactionNumber': 1, runsAt: -1 },
        {
            name: 'searchByDataObjectTransactionNumber',
            partialFilterExpression: {
                'data.object.transactionNumber': { $exists: true }
            }
        }
    ],
    [
        { 'data.object.id': 1, runsAt: -1 },
        {
            name: 'searchByDataObjectId',
            partialFilterExpression: {
                'data.object.id': { $exists: true }
            }
        }
    ],
    [
        { 'data.purpose.id': 1, runsAt: -1 },
        {
            name: 'searchByDataPurposeId',
            partialFilterExpression: {
                'data.purpose.id': { $exists: true }
            }
        }
    ],
    [
        { 'data.purpose.orderNumber': 1, runsAt: -1 },
        {
            name: 'searchByDataPurposeOrderNumber',
            partialFilterExpression: {
                'data.purpose.orderNumber': { $exists: true }
            }
        }
    ],
    [
        { 'data.id': 1, runsAt: -1 },
        {
            name: 'searchByDataId',
            partialFilterExpression: {
                'data.id': { $exists: true }
            }
        }
    ],
    [
        { status: 1, name: 1, numberOfTried: 1, runsAt: 1 },
        { name: 'executeOneByName' }
    ],
    [
        { status: 1, runsAt: 1, name: 1 },
        { name: 'executeOneByNameIfExists' } // add(2025-03-08~)
    ],
    [
        { status: 1, remainingNumberOfTries: 1, lastTriedAt: 1 },
        {
            name: 'retry',
            partialFilterExpression: {
                lastTriedAt: { $type: 'date' }
            }
        }
    ],
    [
        { status: 1, lastTriedAt: 1, remainingNumberOfTries: 1, name: 1 },
        {
            name: 'abortMany',
            partialFilterExpression: {
                lastTriedAt: { $type: 'date' }
            }
        }
    ],
    [
        { status: 1, expires: 1 },
        {
            name: 'makeExpiredMany',
            partialFilterExpression: {
                expires: { $exists: true }
            }
        }
    ],
    [
        // add unique index(2025-03-28~)
        { alternateName: 1 },
        {
            unique: true,
            name: 'uniqueAlternateName',
            partialFilterExpression: {
                alternateName: { $exists: true }
            }
        }
    ]
    // tslint:disable-next-line:no-suspicious-comment
    // TODO add unique index(2025-03-28~)
    // [
    //     { identifier: 1 },
    //     {
    //         unique: true,
    //         name: 'uniqueIdentifier',
    //         partialFilterExpression: {
    //             identifier: { $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;
}