// tslint:disable:no-console import * as mongoose from 'mongoose'; import { chevre } from '../../../lib/index'; // const project = { id: String(process.env.PROJECT_ID) }; const AVAILABLE_ROLE_NAMES = ['customer', 'pos']; async function main() { await mongoose.connect(process.env.MONGOLAB_URI); const sellerRepo = new chevre.repository.Seller(mongoose.connection); const memberRepo = new chevre.repository.Member(mongoose.connection); const cursor = sellerRepo.getCursor( { // 'project.id': { $eq: project.id }, }, { // _id: 1, } ); console.log('sellers found'); let i = 0; let updateCount = 0; await cursor.eachAsync(async (doc) => { i += 1; const seller: chevre.factory.seller.ISeller = doc.toObject(); const makesOffer = seller.makesOffer; if (Array.isArray(makesOffer) && makesOffer.length > 0) { console.log( 'already exist...', seller.project.id, seller.id, makesOffer.length, i); } else { let existingApplicationMembers = await memberRepo.search({ limit: 100, page: 1, project: { id: { $eq: seller.project.id } }, member: { typeOf: { $eq: chevre.factory.creativeWorkType.WebApplication } } }); // ロールで絞る(customer or pos) existingApplicationMembers = existingApplicationMembers .filter((m) => { return Array.isArray(m.member.hasRole) && m.member.hasRole.some((r) => AVAILABLE_ROLE_NAMES.includes(r.roleName)); }); console.log( existingApplicationMembers.length, 'existingApplicationMembers found.', seller.project.id, existingApplicationMembers.map((m) => m.member.name) .join(',') ); const newMakesOffer: chevre.factory.seller.IMakesOffer[] = existingApplicationMembers.map((a) => { return { typeOf: chevre.factory.offerType.Offer, availableAtOrFrom: [{ id: a.member.id }] }; }); console.log( 'updating seller...', seller.project.id, seller.id, newMakesOffer.length, i); await sellerRepo.save({ id: seller.id, attributes: { makesOffer: newMakesOffer } }); updateCount += 1; console.log( 'updated...', seller.project.id, seller.id, newMakesOffer.length, i); } }); console.log(i, 'sellers checked'); console.log(updateCount, 'sellers updated'); } main() .then() .catch(console.error);