@chevre/domain 25.0.0-alpha.10 → 25.0.0-alpha.12

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.
@@ -1,7 +1,7 @@
1
1
  import type { Connection } from 'mongoose';
2
2
  import { factory } from '../factory';
3
3
  import { AcceptedOfferInReserveRepo } from './acceptedOfferInReserve';
4
- type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'> & {
4
+ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project' | 'broker'> & {
5
5
  typeOf: factory.transactionType.PlaceOrder;
6
6
  orderDate: Date;
7
7
  /**
@@ -10,6 +10,7 @@ type IOrderInTransaction = Pick<factory.order.IOrder, 'orderNumber' | 'project'>
10
10
  identifier: string;
11
11
  acceptedOffers: factory.order.IAcceptedOffer[];
12
12
  customer?: factory.order.ICustomer;
13
+ seller?: factory.order.ISeller;
13
14
  };
14
15
  /**
15
16
  * typeOf: Orderへドキュメント変換時の編集フィールド
@@ -57,6 +58,7 @@ export type IMinimizedAcceptedOffer = Pick<factory.order.IOptimizedAcceptedOffer
57
58
  export declare class OrderInTransactionRepo extends AcceptedOfferInReserveRepo {
58
59
  private readonly orderModel;
59
60
  constructor(connection: Connection);
61
+ createPlaceOrderIfNotExists(params: Pick<IOrderInTransaction, 'orderNumber' | 'project' | 'identifier' | 'broker' | 'seller' | 'customer'>): Promise<import("mongoose").UpdateWriteOpResult | undefined>;
60
62
  /**
61
63
  * 取引進行中の注文からacceptedOffersを検索する
62
64
  * 予約取引から予約ごとの価格仕様も参照する
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrderInTransactionRepo = void 0;
4
4
  // import { isDeepStrictEqual } from 'util';
5
+ const errorHandler_1 = require("../errorHandler");
5
6
  const factory_1 = require("../factory");
6
7
  const order_1 = require("./mongoose/schemas/order");
7
8
  const acceptedOfferInReserve_1 = require("./acceptedOfferInReserve");
@@ -15,6 +16,35 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
15
16
  super(connection);
16
17
  this.orderModel = connection.model(order_1.modelName, (0, order_1.createSchema)());
17
18
  }
19
+ async createPlaceOrderIfNotExists(params) {
20
+ const { orderNumber, project, identifier, broker, seller, customer } = params;
21
+ const setOnInsert = {
22
+ typeOf: factory_1.factory.transactionType.PlaceOrder,
23
+ orderDate: new Date(), // orderDate required(2024-12-09~)
24
+ orderNumber,
25
+ project,
26
+ identifier, // 取引ID(2026-06-22~)
27
+ ...((seller !== undefined) && { seller }),
28
+ ...((customer !== undefined) && { customer }),
29
+ ...((broker !== undefined) && { broker })
30
+ };
31
+ try {
32
+ return this.orderModel.updateOne({
33
+ identifier: { $eq: identifier }, // 取引IDに対してユニークネスを保証する
34
+ }, { $setOnInsert: setOnInsert }, { upsert: true })
35
+ .exec();
36
+ }
37
+ catch (error) {
38
+ let throwsError = true;
39
+ if (await (0, errorHandler_1.isMongoDuplicateError)(error)) {
40
+ // すでにidentifierが存在する場合ok
41
+ throwsError = false;
42
+ }
43
+ if (throwsError) {
44
+ throw error;
45
+ }
46
+ }
47
+ }
18
48
  /**
19
49
  * 取引進行中の注文からacceptedOffersを検索する
20
50
  * 予約取引から予約ごとの価格仕様も参照する
@@ -59,26 +89,6 @@ class OrderInTransactionRepo extends acceptedOfferInReserve_1.AcceptedOfferInRes
59
89
  };
60
90
  });
61
91
  }
62
- // /**
63
- // * 取引進行中の注文からacceptedOffersを検索する
64
- // */
65
- // public async findAcceptedOffersByOrderNumber(
66
- // params: { orderNumber: { $eq: string } }
67
- // ): Promise<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>[]> {
68
- // const doc = await this.orderModel.findOne<HydratedDocument<Pick<factory.order.IAcceptedOffer, 'itemOffered' | 'serialNumber'>>>(
69
- // {
70
- // orderNumber: { $eq: params.orderNumber.$eq },
71
- // typeOf: { $eq: factory.transactionType.PlaceOrder }
72
- // },
73
- // { acceptedOffers: 1 }
74
- // )
75
- // .lean<Pick<IOrderInTransaction, 'acceptedOffers'>>()
76
- // .exec();
77
- // if (doc === null) {
78
- // throw new factory.errors.NotFound('orderInTransaction');
79
- // }
80
- // return doc.acceptedOffers;
81
- // }
82
92
  /**
83
93
  * 注文を受注する
84
94
  * typeOf: PlaceOrder -> typeOf: Order
@@ -13,6 +13,10 @@ type IStartPlaceOrderParams = factory.transaction.placeOrder.IStartParamsWithout
13
13
  */
14
14
  clientUser: factory.transaction.placeOrder.IClientUserBeforeStart;
15
15
  };
16
+ /**
17
+ * 注文ドキュメントに保管する代理人
18
+ */
19
+ broker?: factory.order.IBroker;
16
20
  };
17
21
  declare function createStartParams(params: IStartPlaceOrderParams, expiresInSeconds: number, passport: IVerifiedPassport | undefined, seller: Pick<factory.seller.ISeller, 'id' | 'name' | 'typeOf' | 'project' | 'additionalProperty'>, customerType?: string): factory.transaction.placeOrder.IStartParams;
18
22
  export { AGENT_IDENTIFIER_NAME_PASSPORT, createStartParams, IStartPlaceOrderParams };
@@ -1,7 +1,10 @@
1
1
  import type { IssuerRepo } from '../../../repo/issuer';
2
2
  import type { MemberRepo } from '../../../repo/member';
3
3
  import type { MemberProgramRepo } from '../../../repo/memberProgram';
4
+ import type { OrderInTransactionRepo } from '../../../repo/orderInTransaction';
5
+ import type { OrderNumberRepo } from '../../../repo/orderNumber';
4
6
  import type { PassportRepo } from '../../../repo/passport';
7
+ import type { ProjectRepo } from '../../../repo/project';
5
8
  import type { ProjectMakesOfferRepo } from '../../../repo/projectMakesOffer';
6
9
  import type { SellerRepo } from '../../../repo/seller';
7
10
  import type { IStartedPlaceOrder, PlaceOrderRepo } from '../../../repo/transaction/placeOrder';
@@ -14,10 +17,13 @@ interface IStartOperationRepos {
14
17
  projectMakesOffer: ProjectMakesOfferRepo;
15
18
  seller: SellerRepo;
16
19
  placeOrder: PlaceOrderRepo;
20
+ orderInTransaction: OrderInTransactionRepo;
21
+ project: ProjectRepo;
22
+ orderNumber: OrderNumberRepo;
17
23
  }
18
24
  type IStartOperation<T> = (repos: IStartOperationRepos) => Promise<T>;
19
25
  interface IStartOptions {
20
- lockPassport: boolean;
26
+ createOrderDocument: boolean;
21
27
  }
22
28
  /**
23
29
  * 取引開始
@@ -4,6 +4,7 @@ exports.start = start;
4
4
  const factory_1 = require("../../../factory");
5
5
  const factory_2 = require("./start/factory");
6
6
  const validateStartRequest_1 = require("./start/validateStartRequest");
7
+ const issueOrderNumberIfNotExist_1 = require("./issueOrderNumberIfNotExist");
7
8
  /**
8
9
  * 取引開始
9
10
  */
@@ -25,7 +26,7 @@ function start(params, options) {
25
26
  const startParams = (0, factory_2.createStartParams)(params, expiresInSeconds, passport, seller, customerType);
26
27
  let transaction;
27
28
  // lock passport(2024-07-05~)
28
- if (options.lockPassport && passport !== undefined) {
29
+ if (passport !== undefined) {
29
30
  try {
30
31
  await repos.passport.lock(passport);
31
32
  }
@@ -51,6 +52,28 @@ function start(params, options) {
51
52
  if (transaction === undefined) {
52
53
  transaction = await repos.placeOrder.startPlaceOrder(startParams);
53
54
  }
55
+ // support createOrderDocument(2026-06-23~)
56
+ if (options.createOrderDocument) {
57
+ const orderNumber = await (0, issueOrderNumberIfNotExist_1.issueOrderNumberIfNotExist)({
58
+ project: { id: params.project.id },
59
+ id: transaction.id,
60
+ object: { orderDate: new Date() }
61
+ })(repos);
62
+ await repos.orderInTransaction.createPlaceOrderIfNotExists({
63
+ orderNumber,
64
+ project: { id: params.project.id, typeOf: factory_1.factory.organizationType.Project },
65
+ identifier: transaction.id,
66
+ seller: {
67
+ id: seller.id,
68
+ name: (typeof seller.name === 'string') ? seller.name : String(seller.name?.ja),
69
+ typeOf: seller.typeOf,
70
+ additionalProperty: (Array.isArray(seller.additionalProperty)) ? seller.additionalProperty : [] // 追加特性を追加(2023-08-08~)
71
+ },
72
+ ...((typeof params.object.customer?.typeOf === 'string') && { customer: params.object.customer }),
73
+ ...((typeof params.broker?.typeOf === 'string') && { broker: params.broker })
74
+ });
75
+ // console.log('createPlaceOrderResult:', createPlaceOrderResult);
76
+ }
54
77
  return transaction;
55
78
  };
56
79
  }
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * 注文取引サービス
3
3
  */
4
- import { POINT_AWARD_IDENTIFIER_NAME } from '../../factory/order';
5
4
  import { confirm } from './placeOrder/confirm';
6
5
  import { exportTasksById } from './placeOrder/exportTasksById';
7
6
  import { start, IStartPlaceOrderParams } from './placeOrder/start';
8
7
  import { updateAgent } from './placeOrder/updateAgent';
9
- export { confirm, POINT_AWARD_IDENTIFIER_NAME, start, IStartPlaceOrderParams, exportTasksById, updateAgent };
8
+ export { confirm, start, IStartPlaceOrderParams, exportTasksById, updateAgent };
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateAgent = exports.exportTasksById = exports.start = exports.POINT_AWARD_IDENTIFIER_NAME = exports.confirm = void 0;
3
+ exports.updateAgent = exports.exportTasksById = exports.start = exports.confirm = void 0;
4
4
  /**
5
5
  * 注文取引サービス
6
6
  */
7
- const order_1 = require("../../factory/order");
8
- Object.defineProperty(exports, "POINT_AWARD_IDENTIFIER_NAME", { enumerable: true, get: function () { return order_1.POINT_AWARD_IDENTIFIER_NAME; } });
9
7
  const confirm_1 = require("./placeOrder/confirm");
10
8
  Object.defineProperty(exports, "confirm", { enumerable: true, get: function () { return confirm_1.confirm; } });
11
9
  const exportTasksById_1 = require("./placeOrder/exportTasksById");
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import * as AccountTransactionIdentifierFactory from './factory/accountTransactionIdentifier';
5
5
  import * as EventFactory from './factory/event';
6
- import * as OrderFactory from './factory/order';
7
6
  import * as ReservedAgentIdentifireNamesFactory from './factory/reservedAgentIdentifireNames';
8
7
  import * as TaskIdentifierFactory from './factory/taskIdentifier';
9
8
  import * as TransactionFactory from './factory/transaction';
@@ -60,7 +59,6 @@ export declare namespace transaction {
60
59
  export declare namespace factory {
61
60
  export import accountTransactionIdentifier = AccountTransactionIdentifierFactory;
62
61
  export import event = EventFactory;
63
- export import order = OrderFactory;
64
62
  export import reservedAgentIdentifireNames = ReservedAgentIdentifireNamesFactory;
65
63
  export import taskIdentifier = TaskIdentifierFactory;
66
64
  export import transaction = TransactionFactory;
@@ -40,7 +40,6 @@ exports.factory = exports.transaction = exports.task = exports.reserve = exports
40
40
  */
41
41
  const AccountTransactionIdentifierFactory = __importStar(require("./factory/accountTransactionIdentifier"));
42
42
  const EventFactory = __importStar(require("./factory/event"));
43
- const OrderFactory = __importStar(require("./factory/order"));
44
43
  const ReservedAgentIdentifireNamesFactory = __importStar(require("./factory/reservedAgentIdentifireNames"));
45
44
  const TaskIdentifierFactory = __importStar(require("./factory/taskIdentifier"));
46
45
  const TransactionFactory = __importStar(require("./factory/transaction"));
@@ -183,7 +182,6 @@ var factory;
183
182
  (function (factory) {
184
183
  factory.accountTransactionIdentifier = AccountTransactionIdentifierFactory;
185
184
  factory.event = EventFactory;
186
- factory.order = OrderFactory;
187
185
  factory.reservedAgentIdentifireNames = ReservedAgentIdentifireNamesFactory;
188
186
  factory.taskIdentifier = TaskIdentifierFactory;
189
187
  factory.transaction = TransactionFactory;
package/package.json CHANGED
@@ -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.10"
94
+ "version": "25.0.0-alpha.12"
95
95
  }
@@ -1,2 +0,0 @@
1
- export declare const POINT_AWARD_IDENTIFIER_NAME = "pointAwardIdentifiers";
2
- export declare const AWARD_ACCOUNTS_IDENTIFIER_NAME = "awardAccounts";
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AWARD_ACCOUNTS_IDENTIFIER_NAME = exports.POINT_AWARD_IDENTIFIER_NAME = void 0;
4
- exports.POINT_AWARD_IDENTIFIER_NAME = 'pointAwardIdentifiers';
5
- exports.AWARD_ACCOUNTS_IDENTIFIER_NAME = 'awardAccounts';