@chevre/domain
Version:
Chevre Domain Library for Node.js
91 lines (79 loc) • 3.47 kB
text/typescript
// 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);