UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

122 lines (112 loc) 5.55 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) }; // 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);