@chevre/domain
Version:
Chevre Domain Library for Node.js
238 lines (237 loc) • 6.31 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, 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;
}