"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* 上映イベントに関する集計データを保管するリポジトリ
*/
class RedisRepository {
constructor(redisClient) {
this.redisClient = redisClient;
}
store(aggregations, ttl) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
const key = RedisRepository.KEY_PREFIX;
const filedsAndValues = aggregations.reduce((a, b) => [...a, b.id, JSON.stringify(b)], []);
this.redisClient.multi()
.hmset(key, filedsAndValues)
.expire(key, ttl)
.exec((err) => {
if (err !== null) {
reject(err);
}
else {
resolve();
}
});
});
});
}
// public async findById(id: string): Promise<factory.performance.IPerformanceWithAggregation> {
// return new Promise<factory.performance.IPerformanceWithAggregation>((resolve, reject) => {
// const key = RedisRepository.KEY_PREFIX;
// this.redisClient.hget(key, id, (err, result) => {
// debug('performance on redis found.', err);
// if (err !== null) {
// reject(err);
// } else {
// if (result === null) {
// reject(new factory.errors.NotFound('performanceWithAggregation'));
// } else {
// resolve(JSON.parse(result));
// }
// }
// });
// });
// }
findAll() {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
const key = RedisRepository.KEY_PREFIX;
this.redisClient.hgetall(key, (err, result) => {
if (err !== null) {
reject(err);
}
else {
if (result === null) {
resolve({});
}
else {
resolve(Object.keys(result).reduce((a, b) => {
return Object.assign({}, a, { [b]: JSON.parse(result[b]) });
}, {}));
}
}
});
});
});
}
}
RedisRepository.KEY_PREFIX = 'chevre:aggregation:screeningEvent';
exports.RedisRepository = RedisRepository;