// tslint:disable:no-console no-magic-numbers // import * as moment from 'moment'; import * as mongoose from 'mongoose'; import * as redis from 'redis'; import { chevre } from '../../../lib/index'; async function main() { await mongoose.connect(process.env.MONGOLAB_URI); const client = redis.createClient({ host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), password: process.env.REDIS_KEY }); const eventRepo = new chevre.repository.Event(mongoose.connection); const events = await eventRepo.search({ typeOf: chevre.factory.eventType.ScreeningEvent, project: { id: { $eq: '' } }, startFrom: new Date() // startThrough: moment().add(4, 'day').toDate() }); console.log(events.length, 'events found'); const sectionCode = 'Default'; await Promise.all(events.map(async (event) => { await new Promise((resolve) => { const key = `chevre:itemAvailability:screeningEvent:${event.id}`; client.hgetall(key, async (__, reply) => { if (reply !== null && Object.keys(reply).length > 0) { const fieldAndValues = reply; for (const field of Object.keys(fieldAndValues)) { // セクションがなければキーを更新 if (field.slice(0, 7) !== sectionCode) { console.log(event.id, field); const newField = `${sectionCode}${field}`; const newValue = fieldAndValues[field]; console.log('saving...', newField, newValue); await new Promise((resolveSet) => { client.hsetnx(key, newField, newValue, (___, setReply) => { console.log('set', setReply, newField, newValue); resolveSet(); }); }); // 元のフィールドを削除 await new Promise((resolveSet) => { client.hdel(key, field, (___, setReply) => { console.log('deleted', setReply, field); resolveSet(); }); }); } } } resolve(); // if (err !== null) { // reject(err); // } else { // if (reply !== null) { // client.ttl(targetKey, (ttlErr, ttl) => { // console.log('ttl:', ttl); // const args = Object.keys(reply) // .reduce( // (a, b) => { // return [...a, b, reply[b]]; // }, // [] // ); // console.log(args.length, 'args ready'); // newClient.multi() // .hmset(newKey, ...args) // .expire(newKey, ttl) // .exec((hmsetErr, reply) => { // console.log('hmset result:', hmsetErr, reply); // resolve(); // }); // }); // } else { // console.error('targetKey not found'); // } // } }); }); })); // client.keys('chevre:itemAvailability:screeningEvent:*', async (err, reply) => { // console.log(err, reply.length, 'keys found'); // const targetKeys = reply; // }); } main() .then(console.log) .catch(console.error);