@chevre/domain
Version:
Chevre Domain Library for Node.js
120 lines (108 loc) • 4.7 kB
text/typescript
// tslint:disable:no-console
import * as mongoose from 'mongoose';
import { chevre } from '../../../lib/index';
// const project = { id: String(process.env.PROJECT_ID) };
// tslint:disable-next-line:max-func-body-length
async function main() {
await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
const taskRepo = await chevre.repository.Task.createInstance(mongoose.connection);
const cursor = taskRepo.getCursor(
{
name: { $eq: chevre.factory.taskName.DeleteTransaction },
status: { $eq: chevre.factory.taskStatus.Ready }
// runsAt: {
// $gte: moment()
// // tslint:disable-next-line:no-magic-numbers
// .add(29, 'days')
// .toDate(),
// $lte: moment()
// // tslint:disable-next-line:no-magic-numbers
// .add(365, 'days')
// .toDate()
// },
// _id: { $eq: '6441bcf04014af2c7d39f6aa' }
},
{
_id: 1,
project: 1,
data: 1,
status: 1,
name: 1,
runsAt: 1
}
);
console.log('tasks found');
let i = 0;
let updateCount = 0;
await cursor.eachAsync(async (doc) => {
i += 1;
const deleteTransactionTask: Pick<
chevre.factory.task.deleteTransaction.ITask,
'id' | 'project' | 'data' | 'status' | 'name' | 'runsAt'
> = doc.toObject();
let dataObject: chevre.factory.task.deleteTransaction.IObjectAsPlaceOrder | undefined;
if (deleteTransactionTask.data.object.typeOf === chevre.factory.transactionType.PlaceOrder) {
if (
(typeof deleteTransactionTask.data.object.specifyingMethod !== 'string')
|| (deleteTransactionTask.data.object.specifyingMethod === chevre.factory.task.deleteTransaction.SpecifyingMethod.Id)
) {
const existingDataObject = deleteTransactionTask.data.object;
if ((<any>existingDataObject).agent !== undefined) {
dataObject = {
specifyingMethod: chevre.factory.task.deleteTransaction.SpecifyingMethod.Id,
id: existingDataObject.id,
object: {
...(typeof existingDataObject.object.confirmationNumber === 'string')
? { confirmationNumber: existingDataObject.object.confirmationNumber }
: undefined,
...(typeof existingDataObject.object.orderNumber === 'string')
? { orderNumber: existingDataObject.object.orderNumber }
: undefined
},
project: existingDataObject.project,
startDate: existingDataObject.startDate,
typeOf: existingDataObject.typeOf,
...(existingDataObject.endDate !== undefined) ? { endDate: existingDataObject.endDate } : undefined
};
}
}
}
let alreadyMigrated = true;
if (typeof dataObject?.id === 'string') {
alreadyMigrated = false;
}
if (alreadyMigrated) {
console.log(
'already migrated.',
deleteTransactionTask.project.id, deleteTransactionTask.name, deleteTransactionTask.id, deleteTransactionTask.runsAt,
i, updateCount);
} else {
console.log(
'updating...',
deleteTransactionTask.project.id, deleteTransactionTask.name, deleteTransactionTask.id, deleteTransactionTask.runsAt,
i, updateCount, dataObject);
if (dataObject !== undefined) {
await taskRepo.taskModel.findByIdAndUpdate(
deleteTransactionTask.id,
{
$set: {
'data.object': dataObject
}
},
{ timestamps: false }
)
.exec();
}
updateCount += 1;
console.log(
'updated.',
deleteTransactionTask.project.id, deleteTransactionTask.name, deleteTransactionTask.id, deleteTransactionTask.runsAt,
i, updateCount);
}
});
console.log(i, 'tasks checked');
console.log(updateCount, 'tasks updated');
}
main()
.then()
.catch(console.error);