UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

91 lines (79 loc) 3.47 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) }; async function main() { await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false }); const acceptedOfferRepo = await chevre.repository.AcceptedOffer.createInstance(mongoose.connection); const orderRepo = await chevre.repository.Order.createInstance(mongoose.connection); const taskRepo = await chevre.repository.Task.createInstance(mongoose.connection); const cursor = orderRepo.getCursor( { 'project.id': { $eq: project.id }, // orderNumber: { $eq: 'SSK9-4896645-5698154' }, orderDate: { $lte: moment('2024-07-03T18:00:00Z') .toDate(), $gte: moment('2024-06-30T18:00:00Z') .toDate() }, orderStatus: { $eq: chevre.factory.orderStatus.OrderProcessing } }, { confirmationNumber: 1, orderDate: 1, orderNumber: 1, project: 1, typeOf: 1, orderStatus: 1 } ); console.log('orders found'); let i = 0; let updateCount = 0; await cursor.eachAsync(async (doc) => { i += 1; const order: Pick<chevre.factory.order.IOrder, 'confirmationNumber' | 'orderDate' | 'orderNumber' | 'project' | 'typeOf' | 'orderStatus'> = doc.toObject(); if (order.orderStatus !== chevre.factory.orderStatus.OrderProcessing) { console.log('nothing to do', order.orderStatus, order.orderNumber); } else { const { orderNumber } = order; const itemOfferedTypeOfs = <chevre.factory.order.IItemOffered['typeOf'][]>await acceptedOfferRepo.distinctValues( { orderNumber: { $in: [orderNumber] } }, 'acceptedOffers.itemOffered.typeOf' ); const serialNumbers = await acceptedOfferRepo.distinctValues( { orderNumber: { $in: [orderNumber] } }, 'acceptedOffers.serialNumber' ); const offeredThroughIdentifier = (<chevre.factory.service.webAPI.Identifier[]>await acceptedOfferRepo.distinctValues( { orderNumber: { $in: [orderNumber] } }, 'acceptedOffers.offeredThrough.identifier' )).shift(); console.log('processing order', order, itemOfferedTypeOfs, serialNumbers, offeredThroughIdentifier); await (await chevre.service.order.createService()).processOrder({ order: { ...order, itemOfferedTypeOf: itemOfferedTypeOfs[0], // 1つしかない前提 serialNumbers, offeredThroughIdentifier }, options: { force: true, numTryConfirmReserveTransaction: 10 } })({ task: taskRepo }); console.log('order processed', order.orderNumber); updateCount += 1; console.log('updated.', order.project.id, order.orderNumber, order.orderDate, i); } }); console.log(i, 'orders checked'); console.log(updateCount, 'orders updated'); } main() .then() .catch(console.error); main() .then(() => { console.log('success!'); }) .catch(console.error);