@chevre/domain
Version:
Chevre Domain Library for Node.js
122 lines (112 loc) • 5.55 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 placeRepo = await chevre.repository.place.MovieTheater.createInstance(mongoose.connection);
const cursor = placeRepo.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('places 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 screeningRoom: chevre.factory.place.screeningRoom.IPlace = doc.toObject();
const sections: Pick<chevre.factory.place.screeningRoomSection.IPlace, 'additionalProperty' | 'branchCode' | 'typeOf'>[] =
screeningRoom.containsPlace;
for (const section of sections) {
const additionalPropertyNamesOnResource = (Array.isArray(section.additionalProperty))
? section.additionalProperty?.map((p) => p.name)
: [];
if (Array.isArray(additionalPropertyNamesOnResource) && additionalPropertyNamesOnResource.length > 0) {
console.log(
additionalPropertyNamesOnResource.join(','),
additionalPropertyNamesOnResource.length,
'additionalPropertyNamesOnResource found',
screeningRoom.project.id,
section.branchCode
);
additionalPropertyNames.push(...additionalPropertyNamesOnResource);
projectIds.push(screeningRoom.project.id);
additionalPropertyNamesOnResource.forEach((name) => {
if (!name.match(/^[a-zA-Z]*$/)) {
// throw new Error(`not matched ${creativeWork.project.id} ${creativeWork.id}`);
unexpextedprojectIds.push(screeningRoom.project.id);
}
// tslint:disable-next-line:no-magic-numbers
if (name.length < 5) {
// throw new Error(`length matched ${creativeWork.project.id} ${creativeWork.id} ${name}`);
unexpextedprojectIds.push(screeningRoom.project.id);
}
});
for (const additionalPropertyNameOnResource of additionalPropertyNamesOnResource) {
checked += 1;
const existingAdditionalProperties = <{ id: string }[]>await additionalPropertyRepo.projectFields(
{
limit: 1,
project: { id: { $eq: screeningRoom.project.id } },
codeValue: { $eq: additionalPropertyNameOnResource },
inCodeSet: { identifier: { $eq: section.typeOf } }
},
['id']);
if (existingAdditionalProperties.length === 0) {
const additionalProperty: chevre.factory.additionalProperty.IAdditionalProperty = {
project: screeningRoom.project,
// id?: string;
typeOf: 'CategoryCode',
codeValue: additionalPropertyNameOnResource,
inCodeSet: {
typeOf: 'CategoryCodeSet',
identifier: section.typeOf
},
name: { ja: additionalPropertyNameOnResource }
};
await additionalPropertyRepo.save({ attributes: additionalProperty });
created += 1;
console.log(
'additionalProerty created',
additionalPropertyNameOnResource,
screeningRoom.project.id,
section.branchCode
);
} else {
console.log(
'additionalProerty existed',
additionalPropertyNameOnResource,
screeningRoom.project.id,
section.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);