UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

141 lines (140 loc) 7.13 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.call = call; const COA = require("@motionpicture/coa-service"); const moment = require("moment"); const factory = require("../../factory"); const CancelReservationTransactionService = require("../assetTransaction/cancelReservation"); const CancelReservationCOAService = require("../assetTransaction/cancelReservationCOA"); const factory_1 = require("../assetTransaction/cancelReservationCOA/factory"); const action_1 = require("../../repo/action"); const assetTransaction_1 = require("../../repo/assetTransaction"); const project_1 = require("../../repo/project"); const reservation_1 = require("../../repo/reservation"); const reserveInterface_1 = require("../../repo/reserveInterface"); const transactionNumber_1 = require("../../repo/transactionNumber"); let coaAuthClientCreated = false; let coaAuthClient = new COA.auth.RefreshToken({ endpoint: '', // 使用されないので空文字でok refreshToken: '', // 使用されないので空文字でok useFetch: true }); /** * タスク実行関数 */ function call(params) { return (_a) => __awaiter(this, [_a], void 0, function* ({ connection, redisClient, settings }) { var _b; if (redisClient === undefined) { throw new factory.errors.Argument('settings', 'redisClient required'); } if (!coaAuthClientCreated) { const reserveInterfaceRepo = new reserveInterface_1.ReserveInterfaceRepo(connection); const coaAPI = yield reserveInterfaceRepo.findOne({ project: { id: { $eq: params.project.id } } }); const credentials = (_b = coaAPI === null || coaAPI === void 0 ? void 0 : coaAPI.availableChannel) === null || _b === void 0 ? void 0 : _b.credentials; if (typeof (credentials === null || credentials === void 0 ? void 0 : credentials.refreshToken) === 'string') { coaAuthClient = new COA.auth.RefreshToken(credentials); coaAuthClientCreated = true; } } const reserveService = new COA.service.Reserve({ endpoint: coaAuthClient.options.endpoint, // same as authClient(2024-07-17~) auth: coaAuthClient }, { timeout: settings.coa.timeout }); yield returnReserve(Object.assign(Object.assign({}, params.data), { sameAs: { id: params.id } }))({ action: new action_1.ActionRepo(connection), assetTransaction: new assetTransaction_1.AssetTransactionRepo(connection), project: new project_1.ProjectRepo(connection), reservation: new reservation_1.ReservationRepo(connection), transactionNumber: new transactionNumber_1.TransactionNumberRepo({ redisClient, connection }), reserveService }); }); } /** * 予約取引返却 */ function returnReserve(params) { return (repos) => __awaiter(this, void 0, void 0, function* () { const { agent, object, project, purpose, recipient, typeOf, sameAs } = params; const returnActionAttributes = Object.assign({ agent, object, project, purpose, recipient, typeOf }, (typeof (sameAs === null || sameAs === void 0 ? void 0 : sameAs.id) === 'string') ? { sameAs: { id: sameAs.id, typeOf: 'Task' } } : undefined); let recipe; if (params.object.typeOf === factory.assetTransactionType.COAReserveTransaction) { recipe = (0, factory_1.processReturnCOAReserveResult2recipe)({ processReturnCOAReserveResult: { stateReserveArgs: params.object }, project: { id: project.id } }); } const action = yield repos.action.start(returnActionAttributes, Object.assign({}, (recipe !== undefined) ? { recipe } : undefined // add recipe(2024-06-11~) )); try { switch (params.object.typeOf) { case factory.assetTransactionType.COAReserveTransaction: const processReturnCOAReserveResult = yield CancelReservationCOAService.confirm({ object: params.object })({ reserveService: repos.reserveService }); recipe = (0, factory_1.processReturnCOAReserveResult2recipe)({ processReturnCOAReserveResult, project: { id: project.id } }); break; default: yield processCancelReservation4chevre(params, { id: action.id, purpose: returnActionAttributes.purpose, typeOf: action.typeOf })(repos); } } catch (error) { try { yield repos.action.giveUp({ typeOf: action.typeOf, id: action.id, error }); } catch (__) { // no op } throw error; } yield repos.action.completeWithVoid(Object.assign({ typeOf: action.typeOf, id: action.id, result: {} }, (recipe !== undefined) ? { recipe } : undefined // add recipe(2024-06-11~) )); }); } function processCancelReservation4chevre(params, returnAction) { return (repos) => __awaiter(this, void 0, void 0, function* () { const orderAsInstrument = { orderNumber: returnAction.purpose.orderNumber, typeOf: factory.order.OrderType.Order }; // まず取引番号発行 const { transactionNumber } = yield repos.transactionNumber.publishByTimestamp({ startDate: new Date() }); yield CancelReservationTransactionService.startAndConfirm({ project: { typeOf: factory.organizationType.Project, id: params.project.id }, transactionNumber, typeOf: factory.assetTransactionType.CancelReservation, agent: { typeOf: params.recipient.typeOf, id: params.recipient.id, name: String(params.recipient.name) }, object: { reservation: { reservationNumber: params.object.transactionNumber } }, expires: moment() .add(1, 'minutes') .toDate(), seller: {}, // 販売者条件必要なし instrument: [returnAction, orderAsInstrument] // add instrument(2025-02-17~) })(repos); }); }