@chevre/domain
Version:
Chevre Domain Library for Node.js
117 lines (106 loc) • 4.81 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) };
// const EXCLUDED_PROJECT_ID = process.env.EXCLUDED_PROJECT_ID;
// tslint:disable-next-line:max-func-body-length
async function main() {
await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
const additionalPropertyRepo = await chevre.repository.AdditionalProperty.createInstance(mongoose.connection);
const customerRepo = await chevre.repository.Customer.createInstance(mongoose.connection);
const cursor = customerRepo.getCursor(
{
// typeOf: { $eq: chevre.factory.placeType.ScreeningRoom }
// 'project.id': { $eq: project.id },
// 'project.id': { $ne: EXCLUDED_PROJECT_ID },
},
{
// paymentMethods: 1,
// project: 1,
// orderDate: 1
}
);
console.log('docs found');
const additionalPropertyNames: string[] = [];
const projectIds: string[] = [];
const unexpextedprojectIds: string[] = [];
let checked: number = 0;
let created: number = 0;
let i = 0;
await cursor.eachAsync(async (doc) => {
i += 1;
const customer: chevre.factory.customer.ICustomer = doc.toObject();
const additionalPropertyNamesOnResource = (Array.isArray(customer.additionalProperty))
? customer.additionalProperty?.map((p) => p.name)
: [];
if (Array.isArray(additionalPropertyNamesOnResource) && additionalPropertyNamesOnResource.length > 0) {
console.log(
additionalPropertyNamesOnResource.join(','),
additionalPropertyNamesOnResource.length,
'additionalPropertyNamesOnResource found',
customer.project.id,
customer.branchCode
);
additionalPropertyNames.push(...additionalPropertyNamesOnResource);
projectIds.push(customer.project.id);
additionalPropertyNamesOnResource.forEach((name) => {
if (!name.match(/^[a-zA-Z]*$/)) {
unexpextedprojectIds.push(customer.project.id);
}
// tslint:disable-next-line:no-magic-numbers
if (name.length < 5) {
unexpextedprojectIds.push(customer.project.id);
}
});
for (const additionalPropertyNameOnResource of additionalPropertyNamesOnResource) {
checked += 1;
const existingAdditionalProperties = <{ id: string }[]>await additionalPropertyRepo.projectFields(
{
limit: 1,
project: { id: { $eq: customer.project.id } },
codeValue: { $eq: additionalPropertyNameOnResource },
inCodeSet: { identifier: { $eq: customer.typeOf } }
},
['id']);
if (existingAdditionalProperties.length === 0) {
const additionalProperty: chevre.factory.additionalProperty.IAdditionalProperty = {
project: customer.project,
// id?: string;
typeOf: 'CategoryCode',
codeValue: additionalPropertyNameOnResource,
inCodeSet: {
typeOf: 'CategoryCodeSet',
identifier: customer.typeOf
},
name: { ja: additionalPropertyNameOnResource }
};
await additionalPropertyRepo.save({ attributes: additionalProperty });
created += 1;
console.log(
'additionalProerty created',
additionalPropertyNameOnResource,
customer.project.id,
customer.branchCode
);
} else {
console.log(
'additionalProerty existed',
additionalPropertyNameOnResource,
customer.project.id,
customer.branchCode
);
}
}
}
});
console.log(i, 'places checked');
console.log('additionalPropertyNames:', [...new Set(additionalPropertyNames)]);
console.log('projectIds:', [...new Set(projectIds)]);
console.log('unexpextedprojectIds:', [...new Set(unexpextedprojectIds)]);
console.log('checked:', checked);
console.log('created:', created);
}
main()
.then()
.catch(console.error);