@chevre/domain 21.2.0-alpha.83 → 21.2.0-alpha.84

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.
@@ -19,7 +19,8 @@ async function main() {
19
19
  limit: 1,
20
20
  typeOf: chevre.factory.assetTransactionType.Reserve,
21
21
  object: {
22
- reservationFor: { id: { $eq: 'xxx' } }
22
+ reservationNumber: { $eq: 'xxx' }
23
+ // reservationFor: { id: { $eq: 'xxx' } }
23
24
  }
24
25
  });
25
26
  console.log('reserveTransactions:', reserveTransactions);
@@ -6,7 +6,10 @@ export declare function getOrderWithToken(params: {
6
6
  order: factory.order.IOrder;
7
7
  expiresIn: number;
8
8
  }): Promise<factory.order.IOrder | IOrderWithToken>;
9
- export declare function createInformTasks(order: factory.order.IOrder | IOrderWithToken): factory.task.IAttributes<factory.taskName.TriggerWebhook>[];
9
+ export type IUpdatedOrder4inform = Pick<factory.order.IOrder, 'typeOf' | 'orderNumber' | 'name' | 'additionalProperty' | 'project'> & {
10
+ orderStatus?: undefined;
11
+ };
12
+ export declare function createInformTasks(order: factory.order.IOrder | IOrderWithToken | IUpdatedOrder4inform): factory.task.IAttributes<factory.taskName.TriggerWebhook>[];
10
13
  export declare function createConfirmReservationActionObject4ChevreByOrder(params: {
11
14
  order: factory.order.IOrder;
12
15
  }): factory.action.interact.confirm.reservation.IObject<factory.service.webAPI.Identifier.Chevre>[];
@@ -63,10 +63,13 @@ function createInformTasks(order) {
63
63
  let informTasks = [];
64
64
  if (Array.isArray(informOrder) && informOrder.length > 0) {
65
65
  const order4inform = creteOrder4inform(order);
66
- let recipientId = order.customer.id;
67
- if (order.orderStatus === factory.orderStatus.OrderReturned) {
68
- if (typeof ((_a = order.returner) === null || _a === void 0 ? void 0 : _a.id) === 'string') {
69
- recipientId = order.returner.id;
66
+ let recipientId = '';
67
+ if (typeof order.orderStatus === 'string') {
68
+ recipientId = order.customer.id;
69
+ if (order.orderStatus === factory.orderStatus.OrderReturned) {
70
+ if (typeof ((_a = order.returner) === null || _a === void 0 ? void 0 : _a.id) === 'string') {
71
+ recipientId = order.returner.id;
72
+ }
70
73
  }
71
74
  }
72
75
  informTasks = informOrder.map((informOrderParams) => {
@@ -75,7 +78,6 @@ function createInformTasks(order) {
75
78
  agent: order.project,
76
79
  object: order4inform,
77
80
  project: order.project,
78
- // purpose: params.transaction,
79
81
  recipient: {
80
82
  url: (_a = informOrderParams.recipient) === null || _a === void 0 ? void 0 : _a.url,
81
83
  id: recipientId,
@@ -100,36 +102,41 @@ function createInformTasks(order) {
100
102
  }
101
103
  exports.createInformTasks = createInformTasks;
102
104
  function creteOrder4inform(order) {
103
- if (order.orderStatus === factory.orderStatus.OrderReturned) {
104
- // 返品注文通知内容を最適化(2022-12-28~)
105
- return Object.assign(Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (order.dateReturned !== undefined) ? { dateReturned: order.dateReturned } : undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
106
- }
107
- else if (order.orderStatus === factory.orderStatus.OrderDelivered) {
108
- // 配送済注文通知内容を最適化(2022-12-29~)
109
- return Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (typeof order.id === 'string') ? { id: order.id } : undefined);
105
+ if (typeof order.orderStatus === 'string') {
106
+ if (order.orderStatus === factory.orderStatus.OrderReturned) {
107
+ // 返品注文通知内容を最適化(2022-12-28~)
108
+ return Object.assign(Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (order.dateReturned !== undefined) ? { dateReturned: order.dateReturned } : undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
109
+ }
110
+ else if (order.orderStatus === factory.orderStatus.OrderDelivered) {
111
+ // 配送済注文通知内容を最適化(2022-12-29~)
112
+ return Object.assign({ project: order.project, typeOf: order.typeOf, orderNumber: order.orderNumber, orderStatus: order.orderStatus }, (typeof order.id === 'string') ? { id: order.id } : undefined);
113
+ }
114
+ else {
115
+ // 冗長な個人情報をmask
116
+ return Object.assign(Object.assign({
117
+ // whitelistで作成する(2022-07-19~)
118
+ project: order.project, typeOf: order.typeOf, seller: order.seller, price: order.price, priceCurrency: order.priceCurrency, confirmationNumber: order.confirmationNumber, orderNumber: order.orderNumber, acceptedOffers: order.acceptedOffers, orderStatus: order.orderStatus, orderDate: order.orderDate,
119
+ // mask
120
+ customer: Object.assign(Object.assign({}, (0, order_1.createMaskedCustomer)(order)), { additionalProperty: (Array.isArray(order.customer.additionalProperty)) ? order.customer.additionalProperty : [],
121
+ // identifierは必要
122
+ // 予約後を隠蔽(2022-12-24~)
123
+ identifier: (Array.isArray(order.customer.identifier))
124
+ ? order.customer.identifier.filter((p) => {
125
+ return !reservedAgentIdentifireNames_1.RESERVED_AGENT_IDENTIFIER_NAMES.includes(p.name);
126
+ })
127
+ : [] }),
128
+ // paymentMethodsに関してもmask(2022-05-30~)
129
+ paymentMethods: order.paymentMethods.map((p) => {
130
+ return Object.assign(Object.assign({}, p), (typeof p.accountId === 'string' && p.accountId.length > 0)
131
+ ? { accountId: ASTERISK_CHARACTER.repeat(p.accountId.length) }
132
+ : undefined);
133
+ }) }, (typeof order.token === 'string')
134
+ ? { token: order.token }
135
+ : undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
136
+ }
110
137
  }
111
138
  else {
112
- // 冗長な個人情報をmask
113
- return Object.assign(Object.assign({
114
- // whitelistで作成する(2022-07-19~)
115
- project: order.project, typeOf: order.typeOf, seller: order.seller, price: order.price, priceCurrency: order.priceCurrency, confirmationNumber: order.confirmationNumber, orderNumber: order.orderNumber, acceptedOffers: order.acceptedOffers, orderStatus: order.orderStatus, orderDate: order.orderDate,
116
- // mask
117
- customer: Object.assign(Object.assign({}, (0, order_1.createMaskedCustomer)(order)), { additionalProperty: (Array.isArray(order.customer.additionalProperty)) ? order.customer.additionalProperty : [],
118
- // identifierは必要
119
- // 予約後を隠蔽(2022-12-24~)
120
- identifier: (Array.isArray(order.customer.identifier))
121
- ? order.customer.identifier.filter((p) => {
122
- return !reservedAgentIdentifireNames_1.RESERVED_AGENT_IDENTIFIER_NAMES.includes(p.name);
123
- })
124
- : [] }),
125
- // paymentMethodsに関してもmask(2022-05-30~)
126
- paymentMethods: order.paymentMethods.map((p) => {
127
- return Object.assign(Object.assign({}, p), (typeof p.accountId === 'string' && p.accountId.length > 0)
128
- ? { accountId: ASTERISK_CHARACTER.repeat(p.accountId.length) }
129
- : undefined);
130
- }) }, (typeof order.token === 'string')
131
- ? { token: order.token }
132
- : undefined), (typeof order.id === 'string') ? { id: order.id } : undefined);
139
+ return order;
133
140
  }
134
141
  }
135
142
  function createConfirmReservationActionObject4ChevreByOrder(params) {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 注文変更時処理
3
+ */
4
+ import { MongoRepository as TaskRepo } from '../../repo/task';
5
+ import * as factory from '../../factory';
6
+ export declare function onOrderUpdated(params: {
7
+ additionalProperty?: factory.propertyValue.IPropertyValue<string>[];
8
+ name?: string;
9
+ orderNumber: string;
10
+ project: {
11
+ id: string;
12
+ };
13
+ }): (repos: {
14
+ task: TaskRepo;
15
+ }) => Promise<void>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.onOrderUpdated = void 0;
13
+ const factory = require("../../factory");
14
+ const factory_1 = require("./onOrderStatusChanged/factory");
15
+ function onOrderUpdated(params) {
16
+ return (repos) => __awaiter(this, void 0, void 0, function* () {
17
+ let tasks = [];
18
+ tasks = (0, factory_1.createInformTasks)(Object.assign(Object.assign({ typeOf: factory.order.OrderType.Order, orderNumber: params.orderNumber, project: { id: params.project.id, typeOf: factory.organizationType.Project } }, (typeof params.name === 'string') ? { name: params.name } : undefined), (Array.isArray(params.additionalProperty)) ? { additionalProperty: params.additionalProperty } : undefined));
19
+ yield repos.task.saveMany(tasks, { emitImmediately: true });
20
+ });
21
+ }
22
+ exports.onOrderUpdated = onOrderUpdated;
@@ -168,44 +168,59 @@ function placeOrder(params) {
168
168
  confirmationNumber: params.object.confirmationNumber,
169
169
  orderNumber: params.object.orderNumber
170
170
  })({ transaction: repos.transaction });
171
- // アクションを作成する(2022-04-11~)
172
171
  const maskedCustomer = (0, order_1.createMaskedCustomer)(order);
173
172
  const simpleOrder = {
174
- // project: order.project,
175
173
  typeOf: order.typeOf,
176
174
  seller: order.seller,
177
175
  customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id, name: maskedCustomer.name },
178
- // IOrderへ移行(2022-11-17~)
179
- // confirmationNumber: order.confirmationNumber,
180
176
  orderNumber: order.orderNumber,
181
177
  price: order.price,
182
178
  priceCurrency: order.priceCurrency,
183
179
  orderDate: order.orderDate
184
180
  };
181
+ const orderActionPurpose = {
182
+ typeOf: placeOrderTransaction.typeOf, id: placeOrderTransaction.id
183
+ };
185
184
  const orderActionAttributes = {
186
185
  agent: (typeof ((_a = params.agent) === null || _a === void 0 ? void 0 : _a.typeOf) === 'string') ? params.agent : order.project,
187
186
  object: simpleOrder,
188
187
  potentialActions: {},
189
188
  project: order.project,
190
- purpose: { typeOf: placeOrderTransaction.typeOf, id: placeOrderTransaction.id },
189
+ purpose: orderActionPurpose,
191
190
  typeOf: factory.actionType.OrderAction
192
191
  };
193
- const action = yield repos.action.start(orderActionAttributes);
194
- try {
195
- yield repos.order.createIfNotExist(order);
196
- }
197
- catch (error) {
198
- // actionにエラー結果を追加
192
+ // 冪等性を担保(2023-05-31~)
193
+ const completedActions = yield repos.action.search({
194
+ limit: 1,
195
+ page: 1,
196
+ actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
197
+ typeOf: { $eq: orderActionAttributes.typeOf },
198
+ object: {
199
+ orderNumber: { $in: [orderActionAttributes.object.orderNumber] }
200
+ },
201
+ purpose: {
202
+ id: { $in: [orderActionPurpose.id] },
203
+ typeOf: { $in: [orderActionPurpose.typeOf] }
204
+ }
205
+ }, ['_id'], []);
206
+ if (completedActions.length === 0) {
207
+ const action = yield repos.action.start(orderActionAttributes);
199
208
  try {
200
- const actionError = Object.assign(Object.assign({}, error), { message: error.message, name: error.name });
201
- yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error: actionError });
209
+ yield repos.order.createIfNotExist(order);
202
210
  }
203
- catch (__) {
204
- // 失敗したら仕方ない
211
+ catch (error) {
212
+ // actionにエラー結果を追加
213
+ try {
214
+ const actionError = Object.assign(Object.assign({}, error), { message: error.message, name: error.name });
215
+ yield repos.action.giveUp({ typeOf: orderActionAttributes.typeOf, id: action.id, error: actionError });
216
+ }
217
+ catch (__) {
218
+ // 失敗したら仕方ない
219
+ }
220
+ throw error;
205
221
  }
206
- throw error;
222
+ yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
207
223
  }
208
- yield repos.action.complete({ typeOf: orderActionAttributes.typeOf, id: action.id, result: {} });
209
224
  if (params.useOnOrderStatusChanged || params.useOnOrderStatusChanged === undefined) {
210
225
  // 経理レポートを保管
211
226
  yield (0, createAccountingReportIfNotExist_1.createAccountingReportIfNotExist)(order)({ accountingReport: repos.accountingReport });
@@ -42,12 +42,9 @@ function returnOrder(params) {
42
42
  throw new factory.errors.NotFound(factory.transactionType.ReturnOrder);
43
43
  }
44
44
  const simpleOrder = {
45
- // project: order.project,
46
45
  typeOf: order.typeOf,
47
46
  seller: order.seller,
48
47
  customer: (0, order_1.createMaskedCustomer)(order),
49
- // IOrderへ移行(2022-11-17~)
50
- // confirmationNumber: order.confirmationNumber,
51
48
  orderNumber: order.orderNumber,
52
49
  price: order.price,
53
50
  priceCurrency: order.priceCurrency,
@@ -40,16 +40,11 @@ function sendOrder(params) {
40
40
  if (order.confirmationNumber !== confirmationNumber) {
41
41
  throw new factory.errors.NotFound('Order');
42
42
  }
43
- // SendOrderアクションを作成する
44
- // minimizeする(2022-04-18~)
45
43
  const maskedCustomer = (0, order_1.createMaskedCustomer)(order);
46
44
  const simpleOrder = {
47
- // project: order.project,
48
45
  typeOf: order.typeOf,
49
46
  seller: order.seller,
50
47
  customer: { typeOf: maskedCustomer.typeOf, id: maskedCustomer.id, name: maskedCustomer.name },
51
- // IOrderへ移行(2022-11-17~)
52
- // confirmationNumber: order.confirmationNumber,
53
48
  orderNumber: order.orderNumber,
54
49
  price: order.price,
55
50
  priceCurrency: order.priceCurrency,
@@ -3,7 +3,8 @@
3
3
  */
4
4
  import { deleteOrder } from './order/deleteOrder';
5
5
  import { onOrderStatusChanged } from './order/onOrderStatusChanged';
6
+ import { onOrderUpdated } from './order/onOrderUpdated';
6
7
  import { placeOrder, placeOrderWithoutTransaction } from './order/placeOrder';
7
8
  import { returnOrder } from './order/returnOrder';
8
9
  import { sendOrder } from './order/sendOrder';
9
- export { deleteOrder, onOrderStatusChanged, placeOrder, placeOrderWithoutTransaction, returnOrder, sendOrder };
10
+ export { deleteOrder, onOrderStatusChanged, onOrderUpdated, placeOrder, placeOrderWithoutTransaction, returnOrder, sendOrder };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendOrder = exports.returnOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.onOrderStatusChanged = exports.deleteOrder = void 0;
3
+ exports.sendOrder = exports.returnOrder = exports.placeOrderWithoutTransaction = exports.placeOrder = exports.onOrderUpdated = exports.onOrderStatusChanged = exports.deleteOrder = void 0;
4
4
  /**
5
5
  * 注文サービス
6
6
  */
@@ -8,6 +8,8 @@ const deleteOrder_1 = require("./order/deleteOrder");
8
8
  Object.defineProperty(exports, "deleteOrder", { enumerable: true, get: function () { return deleteOrder_1.deleteOrder; } });
9
9
  const onOrderStatusChanged_1 = require("./order/onOrderStatusChanged");
10
10
  Object.defineProperty(exports, "onOrderStatusChanged", { enumerable: true, get: function () { return onOrderStatusChanged_1.onOrderStatusChanged; } });
11
+ const onOrderUpdated_1 = require("./order/onOrderUpdated");
12
+ Object.defineProperty(exports, "onOrderUpdated", { enumerable: true, get: function () { return onOrderUpdated_1.onOrderUpdated; } });
11
13
  const placeOrder_1 = require("./order/placeOrder");
12
14
  Object.defineProperty(exports, "placeOrder", { enumerable: true, get: function () { return placeOrder_1.placeOrder; } });
13
15
  Object.defineProperty(exports, "placeOrderWithoutTransaction", { enumerable: true, get: function () { return placeOrder_1.placeOrderWithoutTransaction; } });
@@ -49,8 +49,8 @@ function confirmReservation(params) {
49
49
  });
50
50
  }
51
51
  exports.confirmReservation = confirmReservation;
52
- // tslint:disable-next-line:max-func-body-length
53
52
  function reserveIfNotYet(params) {
53
+ // tslint:disable-next-line:max-func-body-length
54
54
  return (repos) => __awaiter(this, void 0, void 0, function* () {
55
55
  var _a;
56
56
  const reservationPackage = params.object;
@@ -58,6 +58,7 @@ function reserveIfNotYet(params) {
58
58
  const completedActions = yield repos.action.search({
59
59
  limit: 1,
60
60
  page: 1,
61
+ actionStatus: { $in: [factory.actionStatusType.CompletedActionStatus] },
61
62
  typeOf: { $eq: params.typeOf },
62
63
  object: {
63
64
  typeOf: { $eq: params.object.typeOf }
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  "postversion": "git push origin --tags",
118
118
  "prepublishOnly": "npm run clean && npm run build && npm test && npm run doc"
119
119
  },
120
- "version": "21.2.0-alpha.83"
120
+ "version": "21.2.0-alpha.84"
121
121
  }