UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

188 lines (171 loc) 7.72 kB
// tslint:disable:no-console import * as moment from 'moment'; import * as mongoose from 'mongoose'; import { chevre } from '../../../lib/index'; // const project = { id: String(process.env.PROJECT_ID) }; // const excludedProject = { id: String(process.env.EXCLUDED_PROJECT_ID) }; type IAcceptPayAction = chevre.factory.action.accept.pay.IAction; // tslint:disable-next-line:max-func-body-length async function main() { await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false }); // 注文取引が中止、期限切れであれば、返金タスクを作成 const actionRepo = await chevre.repository.Action.createInstance(mongoose.connection); const transactionRepo = await chevre.repository.Transaction.createInstance(mongoose.connection); const taskRepo = await chevre.repository.Task.createInstance(mongoose.connection); const runsAt = new Date(); const cursor = transactionRepo.getCursor( { status: { $in: [ chevre.factory.transactionStatusType.Canceled, chevre.factory.transactionStatusType.Expired ] }, typeOf: { $eq: chevre.factory.transactionType.PlaceOrder }, startDate: { $gte: moment('2025-02-22T15:00:00Z') .toDate(), $lte: moment('2025-02-22T17:00:00Z') .toDate() } // _id: { $eq: 'cinerino' } }, { _id: 1, status: 1, object: 1, typeOf: 1, project: 1, startDate: 1, seller: 1, agent: 1 } ); console.log('docs found'); let i = 0; let updateCount = 0; // tslint:disable-next-line:max-func-body-length await cursor.eachAsync(async (doc) => { i += 1; const transaction: Pick<chevre.factory.transaction.placeOrder.ITransaction, 'id' | 'typeOf' | 'object' | 'status' | 'project' | 'startDate' | 'seller' | 'agent' > = doc.toObject(); // console.log( // 'alreadyRefunded?', transaction.project.id, transaction.status, transaction.typeOf, transaction.startDate, i); const acceptPayActions = (<Pick<IAcceptPayAction, 'object'>[]>await actionRepo.search( { project: { id: { $eq: transaction.project.id } }, typeOf: { $eq: chevre.factory.actionType.AcceptAction }, actionStatus: { $in: [chevre.factory.actionStatusType.CompletedActionStatus] }, purpose: { id: { $in: [transaction.id] } }, object: { typeOf: { $eq: chevre.factory.assetTransactionType.Pay } } }, ['object'] )); for (const acceptPayAction of acceptPayActions) { const paymentMethodId = acceptPayAction.object.transactionNumber; const paymentMethodType = acceptPayAction.object.object.paymentMethod.identifier; let alreadyRefunded = false; const refundAction = (await actionRepo.search( { limit: 1, page: 1, typeOf: chevre.factory.actionType.RefundAction, object: { paymentMethod: { paymentMethodId: { $eq: paymentMethodId } } } }, ['id'] )).shift(); if (refundAction !== undefined) { alreadyRefunded = true; } if (alreadyRefunded) { // console.log( // 'already migrated.', // transaction.project.id, transaction.status, transaction.typeOf, paymentMethodId, i); } else { if (typeof paymentMethodType === 'string' && paymentMethodType.length > 0 // && paymentMethodId === '792043512179199' ) { // create task const purpose: chevre.factory.action.trade.refund.IPurposeAsPlaceOrder = { typeOf: transaction.typeOf, id: transaction.id }; const data: Omit<chevre.factory.task.refund.IData, 'purpose'> & { purpose: chevre.factory.action.trade.refund.IPurposeAsPlaceOrder; } = { project: transaction.project, typeOf: chevre.factory.actionType.RefundAction, agent: { typeOf: transaction.seller.typeOf, name: (typeof transaction.seller.name === 'string') ? transaction.seller.name : String(transaction.seller.name?.ja), id: transaction.seller.id }, recipient: { typeOf: transaction.agent.typeOf, id: transaction.agent.id // name: transaction.agent.name }, object: [{ typeOf: chevre.factory.service.paymentService.PaymentServiceType.CreditCard, id: acceptPayAction.object.object.id, paymentMethod: { additionalProperty: [], name: paymentMethodType, typeOf: paymentMethodType, paymentMethodId: paymentMethodId }, refundFee: 0 }], purpose, instrument: [] }; const refundTask: Omit<chevre.factory.task.refund.IAttributes, 'data'> & { data: Omit<chevre.factory.task.refund.IData, 'purpose'> & { purpose: chevre.factory.action.trade.refund.IPurposeAsPlaceOrder; }; } = { name: chevre.factory.taskName.Refund, data, status: chevre.factory.taskStatus.Ready, runsAt, project: transaction.project, remainingNumberOfTries: 10, numberOfTried: 0, executionResults: [] }; console.log( 'creating task...', transaction.project.id, transaction.status, transaction.typeOf, transaction.startDate, acceptPayAction.object.transactionNumber, i, refundTask ); await taskRepo.saveMany([refundTask], { emitImmediately: false }); updateCount += 1; console.log( 'created.', transaction.project.id, transaction.status, transaction.typeOf, transaction.startDate, acceptPayAction.object.transactionNumber, acceptPayAction.object.transactionNumber, i ); } } } }); console.log(i, 'docs checked'); console.log(updateCount, 'docs updated'); } main() .then() .catch(console.error);