@chevre/domain 25.2.0-alpha.55 → 25.2.0-alpha.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,52 @@
1
+ import type { Connection } from 'mongoose';
2
+ import { factory } from '../factory';
3
+ import { IModel } from './mongoose/schemas/task';
4
+ type ICreatingTaskKeys = 'data' | 'executionResults' | 'name' | 'numberOfTried' | 'project' | 'remainingNumberOfTries' | 'runsAt' | 'status' | 'identifier' | 'description';
5
+ /**
6
+ * リトライ可能なタスク作成属性
7
+ */
8
+ type ICreatingTask = Pick<factory.task.importEventCapacitiesFromCOA.IAttributes, ICreatingTaskKeys> | Pick<factory.task.importEventsFromCOA.IAttributes, ICreatingTaskKeys>;
9
+ /**
10
+ * 予定タスクリポジトリ
11
+ */
12
+ export declare class ScheduledTaskRepo {
13
+ readonly taskModel: IModel;
14
+ constructor(connection: Connection);
15
+ addScheduledTasks(taskAttributes: ICreatingTask[]): Promise<{
16
+ id: string;
17
+ }[]>;
18
+ countPotentiallyRunningScheduledTasks(params: {
19
+ name: {
20
+ $eq: factory.taskName;
21
+ };
22
+ runsAt: {
23
+ $lt: Date;
24
+ };
25
+ limit?: number;
26
+ }): Promise<{
27
+ count: number;
28
+ }>;
29
+ /**
30
+ * 実行日時を一定期間過ぎたReadyタスクについて、Runningスタータスに変更した上で、Runningイベントを発生させる
31
+ */
32
+ emitRunningScheduledTaskIfExists(params: {
33
+ /**
34
+ * 必ずタスク名指定で実行する
35
+ */
36
+ name: {
37
+ $eq: factory.taskName;
38
+ };
39
+ runsAt: {
40
+ $lt: Date;
41
+ };
42
+ sort: {
43
+ numberOfTried?: factory.sortType;
44
+ runsAt?: factory.sortType;
45
+ };
46
+ executor: {
47
+ name: string;
48
+ };
49
+ nameFilterBeforeRunsAt: boolean;
50
+ }): Promise<Pick<factory.task.ITask<factory.taskName>, 'id' | 'name'> | null>;
51
+ }
52
+ export {};
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScheduledTaskRepo = void 0;
4
+ const task_1 = require("../eventEmitter/task");
5
+ const factory_1 = require("../factory");
6
+ const settings_1 = require("../settings");
7
+ const task_2 = require("./mongoose/schemas/task");
8
+ /**
9
+ * 予定タスクリポジトリ
10
+ */
11
+ class ScheduledTaskRepo {
12
+ taskModel;
13
+ constructor(connection) {
14
+ this.taskModel = connection.model(task_2.modelName, (0, task_2.createSchema)());
15
+ }
16
+ async addScheduledTasks(taskAttributes) {
17
+ if (taskAttributes.length > 0) {
18
+ // resolve uniqueness of identifier(2025-03-27~)
19
+ const creatingTasks = taskAttributes.map(({ identifier, ...creatingTask }) => creatingTask); // eslint-disable-line @typescript-eslint/no-unused-vars
20
+ const result = await this.taskModel.insertMany(creatingTasks, { ordered: false, rawResult: true });
21
+ if (result.insertedCount !== taskAttributes.length) {
22
+ throw new factory_1.factory.errors.Internal('all tasks not saved');
23
+ }
24
+ const savedTasks = Object.values(result.insertedIds)
25
+ .map((objectId) => {
26
+ return { id: objectId.toHexString() };
27
+ });
28
+ // イベントは発火しない
29
+ // if (emitImmediately) {
30
+ // savedTasks.forEach((savedTask) => {
31
+ // taskEventEmitter.emitTaskStatusChanged({
32
+ // id: savedTask.id,
33
+ // status: factory.taskStatus.Ready
34
+ // });
35
+ // });
36
+ // }
37
+ return savedTasks;
38
+ }
39
+ else {
40
+ return [];
41
+ }
42
+ }
43
+ async countPotentiallyRunningScheduledTasks(params) {
44
+ const { runsAt, limit, name } = params;
45
+ const nameEq = name.$eq;
46
+ if (!(runsAt.$lt instanceof Date)) {
47
+ throw new factory_1.factory.errors.Argument('runsAt.$lt', 'must be Date');
48
+ }
49
+ const query = this.taskModel.countDocuments({
50
+ status: { $eq: factory_1.factory.taskStatus.Ready },
51
+ runsAt: { $lt: params.runsAt.$lt },
52
+ name: { $eq: nameEq }
53
+ });
54
+ if (typeof limit === 'number' && limit >= 0) {
55
+ query.limit(limit);
56
+ }
57
+ const count = await query.setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
58
+ .exec();
59
+ return { count };
60
+ }
61
+ /**
62
+ * 実行日時を一定期間過ぎたReadyタスクについて、Runningスタータスに変更した上で、Runningイベントを発生させる
63
+ */
64
+ async emitRunningScheduledTaskIfExists(params) {
65
+ if (!(params.runsAt.$lt instanceof Date)) {
66
+ throw new factory_1.factory.errors.Argument('runsAt.$lt', 'must be Date');
67
+ }
68
+ const projection = {
69
+ _id: 0,
70
+ id: { $toString: '$_id' },
71
+ name: 1
72
+ };
73
+ const nameEq = params.name.$eq;
74
+ const { nameFilterBeforeRunsAt } = params;
75
+ const filter = {
76
+ status: { $eq: factory_1.factory.taskStatus.Ready },
77
+ ...(nameFilterBeforeRunsAt) ? { name: params.name } : undefined,
78
+ runsAt: { $lt: params.runsAt.$lt },
79
+ ...(!nameFilterBeforeRunsAt) ? { name: params.name } : undefined
80
+ };
81
+ const doc = await this.taskModel.findOneAndUpdate(filter, {
82
+ $set: {
83
+ status: factory_1.factory.taskStatus.Running, // 実行中に変更
84
+ lastTriedAt: new Date(),
85
+ executor: params.executor
86
+ },
87
+ $inc: {
88
+ remainingNumberOfTries: -1, // 残りトライ可能回数減らす
89
+ numberOfTried: 1 // トライ回数増やす
90
+ }
91
+ }, {
92
+ new: true,
93
+ projection,
94
+ ...(typeof params.sort.numberOfTried === 'number' || typeof params.sort.runsAt === 'number')
95
+ ? { sort: params.sort }
96
+ : undefined
97
+ })
98
+ .setOptions({ maxTimeMS: settings_1.MONGO_MAX_TIME_MS })
99
+ .lean()
100
+ .exec();
101
+ if (doc === null) {
102
+ return null;
103
+ }
104
+ const changedTask = {
105
+ id: doc.id,
106
+ status: factory_1.factory.taskStatus.Running,
107
+ name: nameEq
108
+ };
109
+ task_1.taskEventEmitter.emitTaskStatusChanged(changedTask);
110
+ return doc;
111
+ }
112
+ }
113
+ exports.ScheduledTaskRepo = ScheduledTaskRepo;
@@ -88,6 +88,7 @@ import type { MemberSettingRepo } from './repo/setting/member';
88
88
  import type { RateLimitSettingRepo } from './repo/setting/rateLimit';
89
89
  import type { WaiterSettingRepo } from './repo/setting/waiter';
90
90
  import type { StockHolderRepo } from './repo/stockHolder';
91
+ import type { ScheduledTaskRepo } from './repo/scheduledTask';
91
92
  import type { TaskRepo } from './repo/task';
92
93
  import type { TicketRepo } from './repo/ticket';
93
94
  import type { TransactionRepo } from './repo/transaction';
@@ -477,6 +478,10 @@ export type StockHolder = StockHolderRepo;
477
478
  export declare namespace StockHolder {
478
479
  function createInstance(...params: ConstructorParameters<typeof StockHolderRepo>): Promise<StockHolderRepo>;
479
480
  }
481
+ export type ScheduledTask = ScheduledTaskRepo;
482
+ export declare namespace ScheduledTask {
483
+ function createInstance(...params: ConstructorParameters<typeof ScheduledTaskRepo>): Promise<ScheduledTaskRepo>;
484
+ }
480
485
  export type Task = TaskRepo;
481
486
  export declare namespace Task {
482
487
  function createInstance(...params: ConstructorParameters<typeof TaskRepo>): Promise<TaskRepo>;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PendingReservation = exports.PaymentServiceProvider = exports.PaymentServiceChannel = exports.PaymentService = exports.Passport = exports.OwnershipInfo = exports.OrderNumber = exports.OrderInTransaction = exports.Order = exports.Offer = exports.OfferItemCondition = exports.OfferCatalogItem = exports.OfferCatalog = exports.NoteAboutOrder = exports.Note = exports.MovieTicketType = exports.Message = exports.MerchantReturnPolicy = exports.MemberProgram = exports.Member = exports.Issuer = exports.IdentityProvider = exports.Identity = exports.EventSeries = exports.EventSellerMakesOffer = exports.EventOffer = exports.Event = exports.EmailMessage = exports.CustomerType = exports.Customer = exports.Credentials = exports.CreativeWork = exports.ConfirmationNumber = exports.Authorization = exports.CategoryCode = exports.assetTransaction = exports.AssetTransaction = exports.Aggregation = exports.AggregateReservation = exports.AggregateOrder = exports.AggregateOffer = exports.AggregateTask = exports.AggregateAction = exports.AdminTask = exports.AdditionalProperty = exports.action = exports.Action = exports.AccountTitle = exports.AccountingReport = exports.AcceptedOffer = void 0;
4
- exports.WebSite = exports.rateLimit = exports.TransactionProcess = exports.TransactionNumber = exports.transaction = exports.Transaction = exports.Ticket = exports.AsyncAction = exports.Task = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductHasOfferCatalog = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Person = void 0;
4
+ exports.WebSite = exports.rateLimit = exports.TransactionProcess = exports.TransactionNumber = exports.transaction = exports.Transaction = exports.Ticket = exports.AsyncAction = exports.Task = exports.ScheduledTask = exports.StockHolder = exports.setting = exports.Setting = exports.ServiceAvailableHour = exports.SellerReturnPolicy = exports.SellerPaymentAccepted = exports.SellerMakesOffer = exports.Seller = exports.Schedule = exports.Role = exports.ReserveInterface = exports.Reservation = exports.ProjectMakesOffer = exports.Project = exports.ProductHasOfferCatalog = exports.Product = exports.PriceSpecification = exports.PotentialAction = exports.place = exports.Person = void 0;
5
5
  var AcceptedOffer;
6
6
  (function (AcceptedOffer) {
7
7
  let repo;
@@ -1000,6 +1000,17 @@ var StockHolder;
1000
1000
  }
1001
1001
  StockHolder.createInstance = createInstance;
1002
1002
  })(StockHolder || (exports.StockHolder = StockHolder = {}));
1003
+ var ScheduledTask;
1004
+ (function (ScheduledTask) {
1005
+ let repo;
1006
+ async function createInstance(...params) {
1007
+ if (repo === undefined) {
1008
+ repo = (await import('./repo/scheduledTask.js')).ScheduledTaskRepo;
1009
+ }
1010
+ return new repo(...params);
1011
+ }
1012
+ ScheduledTask.createInstance = createInstance;
1013
+ })(ScheduledTask || (exports.ScheduledTask = ScheduledTask = {}));
1003
1014
  var Task;
1004
1015
  (function (Task) {
1005
1016
  let repo;
package/package.json CHANGED
@@ -88,5 +88,5 @@
88
88
  "postversion": "git push origin --tags",
89
89
  "prepublishOnly": "npm run clean && npm run build"
90
90
  },
91
- "version": "25.2.0-alpha.55"
91
+ "version": "25.2.0-alpha.56"
92
92
  }