@chevre/domain 25.0.0-alpha.20 → 25.0.0-alpha.22

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.
Files changed (28) hide show
  1. package/lib/chevre/repo/message.d.ts +7 -3
  2. package/lib/chevre/repo/message.js +13 -59
  3. package/lib/chevre/repo/mongoose/schemas/message.d.ts +1 -1
  4. package/lib/chevre/repo/mongoose/schemas/setting.d.ts +5 -0
  5. package/lib/chevre/repo/mongoose/schemas/transaction.js +51 -50
  6. package/lib/chevre/repo/order.d.ts +1 -8
  7. package/lib/chevre/repo/order.js +24 -13
  8. package/lib/chevre/repo/orderInTransaction.d.ts +1 -2
  9. package/lib/chevre/repo/task.d.ts +1 -1
  10. package/lib/chevre/repo/transaction/placeOrder.d.ts +1 -6
  11. package/lib/chevre/repo/transaction/placeOrder.js +25 -16
  12. package/lib/chevre/service/order/deleteOrder.d.ts +6 -10
  13. package/lib/chevre/service/order/deleteOrder.js +7 -48
  14. package/lib/chevre/service/order/onOrderStatusChanged/onOrderCancelled/factory.d.ts +1 -1
  15. package/lib/chevre/service/order/onOrderStatusChanged/onOrderDeliveredPartially/factory.d.ts +1 -1
  16. package/lib/chevre/service/order/onOrderStatusChanged/onOrderReturned/factory.d.ts +1 -1
  17. package/lib/chevre/service/task/deleteTransaction.js +0 -8
  18. package/lib/chevre/service/taskHandler.js +0 -1
  19. package/lib/chevre/service/transaction/deleteTransaction.d.ts +8 -14
  20. package/lib/chevre/service/transaction/deleteTransaction.js +11 -117
  21. package/lib/chevre/service/transaction/placeOrder/confirm.js +4 -1
  22. package/lib/chevre/service/transaction/placeOrder/issueOrderNumberIfNotExist.d.ts +4 -1
  23. package/lib/chevre/service/transaction/placeOrder/issueOrderNumberIfNotExist.js +37 -24
  24. package/lib/chevre/service/transaction/placeOrder/start.d.ts +3 -1
  25. package/lib/chevre/service/transaction/placeOrder/start.js +15 -19
  26. package/package.json +2 -2
  27. package/lib/chevre/service/task/deletePerson.d.ts +0 -6
  28. package/lib/chevre/service/task/deletePerson.js +0 -465
@@ -54,7 +54,6 @@ function executeTask(task, next) {
54
54
  case factory_1.factory.taskName.CheckMovieTicket:
55
55
  case factory_1.factory.taskName.CheckResource:
56
56
  case factory_1.factory.taskName.CreateAccountingReport:
57
- case factory_1.factory.taskName.DeletePerson:
58
57
  case factory_1.factory.taskName.HandleNotification:
59
58
  case factory_1.factory.taskName.ImportEventCapacitiesFromCOA:
60
59
  case factory_1.factory.taskName.ImportEventsFromCOA:
@@ -3,35 +3,29 @@ import type { AcceptedOfferRepo } from '../../repo/acceptedOffer';
3
3
  import type { AccountingReportRepo } from '../../repo/accountingReport';
4
4
  import type { ActionRepo } from '../../repo/action';
5
5
  import type { AssetTransactionRepo } from '../../repo/assetTransaction';
6
- import type { EventRepo } from '../../repo/event';
7
6
  import type { MessageRepo } from '../../repo/message';
8
7
  import type { NoteRepo } from '../../repo/note';
9
8
  import type { OrderRepo } from '../../repo/order';
10
- import type { OwnershipInfoRepo } from '../../repo/ownershipInfo';
11
9
  import type { ReservationRepo } from '../../repo/reservation';
12
- import type { SettingRepo } from '../../repo/setting';
13
- import type { TaskRepo } from '../../repo/task';
14
10
  import type { TransactionRepo } from '../../repo/transaction';
15
11
  import type { PlaceOrderRepo } from '../../repo/transaction/placeOrder';
16
12
  import type { ReturnOrderRepo } from '../../repo/transaction/returnOrder';
17
- /**
18
- * 取引に関わるリソースを削除する
19
- * 冪等性を確保すること
20
- */
21
- export declare function deleteTransaction(params: factory.task.IData<factory.taskName.DeleteTransaction>): (repos: {
13
+ interface IDeleteTransactionRepos {
22
14
  acceptedOffer: AcceptedOfferRepo;
23
15
  accountingReport: AccountingReportRepo;
24
16
  action: ActionRepo;
25
17
  assetTransaction: AssetTransactionRepo;
26
- event: EventRepo;
27
18
  message: MessageRepo;
28
19
  note: NoteRepo;
29
20
  order: OrderRepo;
30
- ownershipInfo: OwnershipInfoRepo;
31
21
  reservation: ReservationRepo;
32
- setting: SettingRepo;
33
- task: TaskRepo;
34
22
  transaction: TransactionRepo;
35
23
  placeOrder: PlaceOrderRepo;
36
24
  returnOrder: ReturnOrderRepo;
37
- }) => Promise<void>;
25
+ }
26
+ /**
27
+ * 取引に関わるリソースを削除する
28
+ * 冪等性を確保すること
29
+ */
30
+ export declare function deleteTransaction(params: factory.task.IData<factory.taskName.DeleteTransaction>): (repos: IDeleteTransactionRepos) => Promise<void>;
31
+ export {};
@@ -11,118 +11,15 @@ const deleteOrder_1 = require("../order/deleteOrder");
11
11
  function deleteTransaction(params) {
12
12
  return async (repos) => {
13
13
  if (params.object.specifyingMethod === factory_1.factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.AgentId) {
14
- // transaction.agent.id指定による取引削除に対応(2023-06-30~)
15
- await createDeleteTransactionTasksByAgentId(params)(repos);
14
+ throw new factory_1.factory.errors.NotImplemented('deleteTransaction by agentId discontinued'); // discontinue(2026-06-28~)
15
+ // // transaction.agent.id指定による取引削除に対応(2023-06-30~)
16
+ // await createDeleteTransactionTasksByAgentId(params)(repos);
16
17
  }
17
18
  else {
18
19
  await deleteTransactionById(params)(repos);
19
20
  }
20
21
  };
21
22
  }
22
- function createDeleteTransactionTasksByAgentId(params) {
23
- return async (repos) => {
24
- if (params.object.specifyingMethod !== factory_1.factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.AgentId) {
25
- throw new factory_1.factory.errors.Argument('object.specifyingMethod', `must be ${factory_1.factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.AgentId}`);
26
- }
27
- const agentIdSpecified = params.object.agent.id;
28
- // agentIdによる全取引についてDeleteTransactionタスクを作成する
29
- if (typeof agentIdSpecified === 'string' && agentIdSpecified.length > 0) {
30
- const transactionTypeOf = params.object.typeOf;
31
- let transactions;
32
- if (transactionTypeOf === factory_1.factory.transactionType.PlaceOrder) {
33
- transactions = await repos.placeOrder.findPlaceOrderTransactions({
34
- project: { id: { $eq: params.object.project.id } },
35
- agent: {
36
- ids: [agentIdSpecified],
37
- typeOf: factory_1.factory.personType.Person
38
- },
39
- typeOf: transactionTypeOf,
40
- inclusion: ['typeOf', 'startDate', 'endDate', 'object', 'project']
41
- });
42
- }
43
- else if (transactionTypeOf === factory_1.factory.transactionType.ReturnOrder) {
44
- transactions = await repos.returnOrder.findReturnOrderTransactions({
45
- project: { id: { $eq: params.object.project.id } },
46
- agent: {
47
- ids: [agentIdSpecified],
48
- typeOf: factory_1.factory.personType.Person
49
- },
50
- typeOf: transactionTypeOf,
51
- inclusion: ['typeOf', 'startDate', 'endDate', 'object', 'project']
52
- });
53
- }
54
- else {
55
- throw new factory_1.factory.errors.NotImplemented(`${transactionTypeOf} not implemented`);
56
- }
57
- const deleteAt = new Date();
58
- let deleteTransactionTasks;
59
- switch (transactionTypeOf) {
60
- case factory_1.factory.transactionType.PlaceOrder:
61
- deleteTransactionTasks = transactions.map((transaction) => {
62
- return {
63
- project: transaction.project,
64
- name: factory_1.factory.taskName.DeleteTransaction,
65
- status: factory_1.factory.taskStatus.Ready,
66
- runsAt: deleteAt,
67
- remainingNumberOfTries: 3,
68
- numberOfTried: 0,
69
- executionResults: [],
70
- data: {
71
- object: {
72
- specifyingMethod: factory_1.factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.Id,
73
- id: transaction.id,
74
- object: {
75
- ...(typeof transaction.object.confirmationNumber === 'string')
76
- ? { confirmationNumber: transaction.object.confirmationNumber }
77
- : undefined,
78
- ...(typeof transaction.object.orderNumber === 'string')
79
- ? { orderNumber: transaction.object.orderNumber }
80
- : undefined
81
- },
82
- project: transaction.project,
83
- startDate: transaction.startDate,
84
- typeOf: transaction.typeOf,
85
- ...(transaction.endDate !== undefined) ? { endDate: transaction.endDate } : undefined
86
- }
87
- }
88
- };
89
- });
90
- break;
91
- case factory_1.factory.transactionType.ReturnOrder:
92
- deleteTransactionTasks = transactions.map((transaction) => {
93
- return {
94
- project: transaction.project,
95
- name: factory_1.factory.taskName.DeleteTransaction,
96
- status: factory_1.factory.taskStatus.Ready,
97
- runsAt: deleteAt,
98
- remainingNumberOfTries: 3,
99
- numberOfTried: 0,
100
- executionResults: [],
101
- data: {
102
- object: {
103
- specifyingMethod: factory_1.factory.action.update.deleteAction.ObjectAsTransactionSpecifyingMethod.Id,
104
- id: transaction.id,
105
- object: {
106
- order: transaction.object.order
107
- },
108
- project: transaction.project,
109
- startDate: transaction.startDate,
110
- typeOf: transaction.typeOf,
111
- ...(transaction.endDate !== undefined) ? { endDate: transaction.endDate } : undefined
112
- }
113
- }
114
- };
115
- });
116
- break;
117
- default:
118
- throw new factory_1.factory.errors.NotImplemented(`${transactionTypeOf} not implemented`);
119
- }
120
- if (deleteTransactionTasks.length > 0) {
121
- await repos.task.saveMany(deleteTransactionTasks, { emitImmediately: true });
122
- }
123
- }
124
- };
125
- }
126
23
  function deleteTransactionById(params) {
127
24
  return async (repos) => {
128
25
  if (typeof params.object.specifyingMethod === 'string'
@@ -133,7 +30,7 @@ function deleteTransactionById(params) {
133
30
  if (typeof deletingTransactionId !== 'string' || deletingTransactionId.length === 0) {
134
31
  throw new factory_1.factory.errors.ArgumentNull('object.id');
135
32
  }
136
- let deletingOrderNumberByTask;
33
+ // let deletingOrderNumberByTask: string | undefined;
137
34
  let transaction;
138
35
  if (params.object.typeOf === factory_1.factory.transactionType.PlaceOrder) {
139
36
  transaction = (await repos.placeOrder.findPlaceOrderTransactions({
@@ -141,7 +38,7 @@ function deleteTransactionById(params) {
141
38
  typeOf: params.object.typeOf,
142
39
  inclusion: ['typeOf', 'project', 'status']
143
40
  })).shift();
144
- deletingOrderNumberByTask = params.object.object.orderNumber;
41
+ // deletingOrderNumberByTask = params.object.object.orderNumber;
145
42
  }
146
43
  else if (params.object.typeOf === factory_1.factory.transactionType.ReturnOrder) {
147
44
  transaction = (await repos.returnOrder.findReturnOrderTransactions({
@@ -191,18 +88,15 @@ function deleteTransactionById(params) {
191
88
  case factory_1.factory.transactionStatusType.Expired:
192
89
  break;
193
90
  case factory_1.factory.transactionStatusType.Confirmed: {
194
- // 削除対象の注文番号についてはタスクを参照する(2026-06-15~)
195
- // const deletingOrder = transaction.result?.order;
196
- // if (typeof deletingOrder?.orderNumber === 'string') {
91
+ // identifierによる削除に変更(2026-06-28~)
92
+ // if (typeof deletingOrderNumberByTask === 'string') {
197
93
  // await deleteOrder({
198
- // object: deletingOrder
94
+ // object: { orderNumber: deletingOrderNumberByTask }
199
95
  // })(repos);
200
96
  // }
201
- if (typeof deletingOrderNumberByTask === 'string') {
202
- await (0, deleteOrder_1.deleteOrder)({
203
- object: { orderNumber: deletingOrderNumberByTask }
204
- })(repos);
205
- }
97
+ await (0, deleteOrder_1.deleteOrder)({
98
+ object: { identifier: transaction.id }
99
+ })(repos);
206
100
  break;
207
101
  }
208
102
  default:
@@ -177,7 +177,10 @@ function confirm(params, options) {
177
177
  await repos.placeOrder.confirmPlaceOrder({
178
178
  typeOf: transaction.typeOf,
179
179
  id: transaction.id,
180
- object: { orderDate: params.result.order.orderDate },
180
+ object: {
181
+ orderDate: params.result.order.orderDate,
182
+ orderNumber
183
+ },
181
184
  result: result,
182
185
  potentialActions: potentialActions
183
186
  });
@@ -1,4 +1,4 @@
1
- import type { OrderInTransactionRepo } from '../../../repo/orderInTransaction';
1
+ import type { OrderInTransactionRepo, IOrderInTransaction } from '../../../repo/orderInTransaction';
2
2
  import type { OrderNumberRepo } from '../../../repo/orderNumber';
3
3
  import type { ProjectRepo } from '../../../repo/project';
4
4
  import type { PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
@@ -16,6 +16,9 @@ declare function issueOrderNumberIfNotExist(params: {
16
16
  object: {
17
17
  orderDate: Date;
18
18
  };
19
+ creatingOrderInTransaction: Pick<IOrderInTransaction, 'broker' | 'seller' | 'customer'>;
20
+ }, options: {
21
+ saveOrderNumberInPlaceOrderInProgress: boolean;
19
22
  }): (repos: {
20
23
  project: ProjectRepo;
21
24
  placeOrder: PlaceOrderRepo;
@@ -2,44 +2,57 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.issueOrderNumberIfNotExist = issueOrderNumberIfNotExist;
4
4
  const factory_1 = require("../../../factory");
5
- // const USE_LEGACY_ISSUE_ORDER_NUMBER = process.env.USE_LEGACY_ISSUE_ORDER_NUMBER === '1';
6
5
  /**
7
6
  * 未発行であれば、注文番号を発行して取引に保管する
8
7
  */
9
- function issueOrderNumberIfNotExist(params) {
8
+ function issueOrderNumberIfNotExist(params, options) {
10
9
  return async (repos) => {
11
- // 1. 最初のチェック
12
- let orderNumber = await repos.placeOrder.findInProgressOrderNumberById({ id: params.id });
13
- // すでに発行済であれば何もしない
14
- if (typeof orderNumber === 'string') {
15
- return orderNumber;
16
- }
17
- // 2. 発行準備
10
+ const { saveOrderNumberInPlaceOrderInProgress } = options;
11
+ // // 1. 最初のチェック
12
+ // let orderNumber = await repos.placeOrder.findInProgressOrderNumberById({ id: params.id });
13
+ // // すでに発行済であれば何もしない
14
+ // if (typeof orderNumber === 'string') {
15
+ // return orderNumber;
16
+ // }
17
+ // 新注文番号発行
18
18
  const { alternateName } = await repos.project.findAlternateNameById({ id: params.project.id });
19
19
  if (typeof alternateName !== 'string') {
20
20
  throw new factory_1.factory.errors.NotFound('project.alternateName');
21
21
  }
22
- // 3. 番号発行
23
22
  const issuedOrderNumber = await repos.orderNumber.issueOrderNumber({
24
23
  project: { alternateName },
25
24
  orderDate: params.object.orderDate
26
25
  });
27
- // 4. 保管を試みる
28
- const { modifiedCount } = await repos.placeOrder.saveOrderNumberIfNotExist({
29
- id: params.id,
30
- orderNumber: issuedOrderNumber
26
+ // 注文ドキュメント作成
27
+ await repos.orderInTransaction.createPlaceOrderIfNotExists({
28
+ ...params.creatingOrderInTransaction,
29
+ orderNumber: issuedOrderNumber,
30
+ project: { id: params.project.id, typeOf: factory_1.factory.organizationType.Project },
31
+ identifier: params.id,
31
32
  });
32
- // 5. 書き込めたなら、自分が発行した番号が「真実」
33
- if (modifiedCount === 1) {
34
- return issuedOrderNumber;
35
- }
36
- // 6. 競合が発生した場合(他者が先に書き込んだ場合)
37
- // DBにある「正解」を再取得して返す
38
- orderNumber = await repos.placeOrder.findInProgressOrderNumberById({ id: params.id });
39
- if (typeof orderNumber !== 'string') {
40
- // ここを通るのは、他者が保存した直後に取引がキャンセル/削除された等の極めて稀なケース
41
- throw new factory_1.factory.errors.Internal('OrderNumber conflict: failed to retrieve existing number');
33
+ // 注文ドキュメント(存在するはず)から注文番号を参照
34
+ const orderNumber = await repos.orderInTransaction.findOrderNumberByIdentifier({
35
+ identifier: params.id,
36
+ project: { id: params.project.id }
37
+ }, { onlyPlaceOrder: true });
38
+ if (saveOrderNumberInPlaceOrderInProgress) {
39
+ // 取引に保管を試みる
40
+ await repos.placeOrder.saveOrderNumberIfNotExist({
41
+ id: params.id,
42
+ orderNumber
43
+ });
42
44
  }
45
+ // // 5. 書き込めたなら、自分が発行した番号が「真実」
46
+ // if (modifiedCount === 1) {
47
+ // return issuedOrderNumber;
48
+ // }
49
+ // // 6. 競合が発生した場合(他者が先に書き込んだ場合)
50
+ // // DBにある「正解」を再取得して返す
51
+ // const orderNumber = await repos.placeOrder.findInProgressOrderNumberById({ id: params.id });
52
+ // if (typeof orderNumber !== 'string') {
53
+ // // ここを通るのは、他者が保存した直後に取引がキャンセル/削除された等の極めて稀なケース
54
+ // throw new factory.errors.Internal('OrderNumber conflict: failed to retrieve existing number');
55
+ // }
43
56
  return orderNumber;
44
57
  };
45
58
  }
@@ -25,5 +25,7 @@ type IStartOperation<T> = (repos: IStartOperationRepos) => Promise<T>;
25
25
  /**
26
26
  * 取引開始
27
27
  */
28
- declare function start(params: IStartPlaceOrderParams): IStartOperation<IStartedPlaceOrder>;
28
+ declare function start(params: IStartPlaceOrderParams, options: {
29
+ saveOrderNumberInPlaceOrderInProgress: boolean;
30
+ }): IStartOperation<IStartedPlaceOrder>;
29
31
  export { start, IStartPlaceOrderParams };
@@ -8,7 +8,7 @@ const issueOrderNumberIfNotExist_1 = require("./issueOrderNumberIfNotExist");
8
8
  /**
9
9
  * 取引開始
10
10
  */
11
- function start(params) {
11
+ function start(params, options) {
12
12
  return async (repos) => {
13
13
  const { passport, customerType } = await repos.passport.validatePassportTokenIfExist(params);
14
14
  const { sellerMakesOffer, seller } = await (0, validateStartRequest_1.validateStartRequest)({
@@ -52,26 +52,22 @@ function start(params) {
52
52
  if (transaction === undefined) {
53
53
  transaction = await repos.placeOrder.startPlaceOrder(startParams);
54
54
  }
55
- // support createOrderDocument(2026-06-23~)
56
- const orderNumber = await (0, issueOrderNumberIfNotExist_1.issueOrderNumberIfNotExist)({
55
+ await (0, issueOrderNumberIfNotExist_1.issueOrderNumberIfNotExist)({
57
56
  project: { id: params.project.id },
58
57
  id: transaction.id,
59
- object: { orderDate: new Date() }
60
- })(repos);
61
- await repos.orderInTransaction.createPlaceOrderIfNotExists({
62
- orderNumber,
63
- project: { id: params.project.id, typeOf: factory_1.factory.organizationType.Project },
64
- identifier: transaction.id,
65
- seller: {
66
- id: seller.id,
67
- name: (typeof seller.name === 'string') ? seller.name : String(seller.name?.ja),
68
- typeOf: seller.typeOf,
69
- additionalProperty: (Array.isArray(seller.additionalProperty)) ? seller.additionalProperty : [] // 追加特性を追加(2023-08-08~)
70
- },
71
- ...((typeof params.object.customer?.typeOf === 'string') && { customer: params.object.customer }),
72
- ...((typeof params.broker?.typeOf === 'string') && { broker: params.broker })
73
- });
74
- // console.log('createPlaceOrderResult:', createPlaceOrderResult);
58
+ object: { orderDate: new Date() },
59
+ // support createOrderDocument(2026-06-23~)
60
+ creatingOrderInTransaction: {
61
+ seller: {
62
+ id: seller.id,
63
+ name: (typeof seller.name === 'string') ? seller.name : String(seller.name?.ja),
64
+ typeOf: seller.typeOf,
65
+ additionalProperty: (Array.isArray(seller.additionalProperty)) ? seller.additionalProperty : [] // 追加特性を追加(2023-08-08~)
66
+ },
67
+ ...((typeof params.object.customer?.typeOf === 'string') && { customer: params.object.customer }),
68
+ ...((typeof params.broker?.typeOf === 'string') && { broker: params.broker })
69
+ }
70
+ }, options)(repos);
75
71
  return transaction;
76
72
  };
77
73
  }
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "dependencies": {
12
12
  "@aws-sdk/client-cognito-identity-provider": "3.600.0",
13
13
  "@aws-sdk/credential-providers": "3.600.0",
14
- "@chevre/factory": "9.0.0",
14
+ "@chevre/factory": "9.2.0",
15
15
  "@motionpicture/coa-service": "10.0.0",
16
16
  "@motionpicture/gmo-service": "6.1.0-alpha.0",
17
17
  "@sendgrid/client": "8.1.4",
@@ -91,5 +91,5 @@
91
91
  "postversion": "git push origin --tags",
92
92
  "prepublishOnly": "npm run clean && npm run build"
93
93
  },
94
- "version": "25.0.0-alpha.20"
94
+ "version": "25.0.0-alpha.22"
95
95
  }
@@ -1,6 +0,0 @@
1
- import { factory } from '../../factory';
2
- import type { ICallResult, IExecutableTaskKeys, IOperationExecute } from '../taskHandler';
3
- /**
4
- * タスク実行関数
5
- */
6
- export declare function call(params: Pick<factory.task.deletePerson.ITask, IExecutableTaskKeys>): IOperationExecute<ICallResult>;