// tslint:disable:no-console import * as mongoose from 'mongoose'; import { chevre } from '../../../lib/index'; const project = { id: String(process.env.PROJECT_ID) }; type IMovieTicketPriceSpec = chevre.factory.priceSpecification.IPriceSpecification; const CREATING_VIDEO_FORMAT = 'all'; async function main() { await mongoose.connect(process.env.MONGOLAB_URI); const priceSpecRepo = new chevre.repository.PriceSpecification(mongoose.connection); const cursor = priceSpecRepo.getCursor( { 'project.id': { $eq: project.id }, typeOf: { $eq: chevre.factory.priceSpecificationType.MovieTicketTypeChargeSpecification } }, { // _id: 1, } ); console.log('priceSpecs found'); let i = 0; let updateCount = 0; await cursor.eachAsync(async (doc) => { i += 1; const priceSpec: IMovieTicketPriceSpec = doc.toObject(); const appliesToVideoFormat = priceSpec.appliesToVideoFormat; if (appliesToVideoFormat === CREATING_VIDEO_FORMAT) { console.log( 'appliesToVideoFormat is...', CREATING_VIDEO_FORMAT, priceSpec.project.id, priceSpec.appliesToMovieTicket.serviceType, priceSpec.appliesToVideoFormat, priceSpec.price, i); } else { // 券種区分について、もうひとつの上映方式に対応する価格仕様が存在しなければ、作成する const priceSpecs = await priceSpecRepo.search({ limit: 1, page: 1, project: { id: { $eq: priceSpec.project.id } }, typeOf: chevre.factory.priceSpecificationType.MovieTicketTypeChargeSpecification, appliesToVideoFormats: [CREATING_VIDEO_FORMAT], appliesToMovieTicket: { serviceTypes: [priceSpec.appliesToMovieTicket.serviceType] } }); const priceSpec4all = priceSpecs.shift(); if (priceSpec4all !== undefined) { console.log( 'already exist.', priceSpec.project.id, priceSpec.appliesToMovieTicket.serviceType, priceSpec.appliesToVideoFormat, priceSpec.price, i); } else { const newPriceSpec: IMovieTicketPriceSpec = { typeOf: chevre.factory.priceSpecificationType.MovieTicketTypeChargeSpecification, project: priceSpec.project, price: priceSpec.price, priceCurrency: priceSpec.priceCurrency, name: priceSpec.name, appliesToMovieTicket: priceSpec.appliesToMovieTicket, appliesToVideoFormat: CREATING_VIDEO_FORMAT, valueAddedTaxIncluded: true }; console.log( 'creating priceSpec...', priceSpec.project.id, newPriceSpec.appliesToMovieTicket.serviceType, newPriceSpec.appliesToVideoFormat, newPriceSpec.price, i); await priceSpecRepo.save({ attributes: newPriceSpec }); updateCount += 1; console.log( 'created', priceSpec.project.id, newPriceSpec.appliesToMovieTicket.serviceType, newPriceSpec.appliesToVideoFormat, newPriceSpec.price, i); } } }); console.log(i, 'priceSpecs checked'); console.log(updateCount, 'priceSpecs updated'); } main() .then() .catch(console.error);