@chevre/domain
Version:
Chevre Domain Library for Node.js
609 lines (608 loc) • 30.4 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.aggregateAuthorizeEventServiceOfferAction = aggregateAuthorizeEventServiceOfferAction;
exports.aggregateAuthorizeOrderAction = aggregateAuthorizeOrderAction;
exports.aggregateAuthorizePaymentAction = aggregateAuthorizePaymentAction;
exports.aggregateCancelReservationAction = aggregateCancelReservationAction;
exports.aggregateCheckMovieTicketAction = aggregateCheckMovieTicketAction;
exports.aggregateEvent = aggregateEvent;
exports.aggregateOrder = aggregateOrder;
exports.aggregateOrderAction = aggregateOrderAction;
exports.aggregatePayMovieTicketAction = aggregatePayMovieTicketAction;
exports.aggregatePayTransaction = aggregatePayTransaction;
exports.aggregatePlaceOrder = aggregatePlaceOrder;
exports.aggregateReserveAction = aggregateReserveAction;
exports.aggregateReserveTransaction = aggregateReserveTransaction;
exports.aggregateTask = aggregateTask;
exports.aggregateUseAction = aggregateUseAction;
const createDebug = require("debug");
const moment = require("moment-timezone");
const factory = require("../../factory");
const debug = createDebug('chevre-domain:service:aggregation:system');
function aggregateEvent(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.event.aggregateEvent({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.eventType.ScreeningEvent
});
debug('aggregateEvent:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesRemainingCapacityRate, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateEvent, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 注文集計
*/
function aggregateOrder(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.order.aggregateOrder({
project: { id: { $ne: params.excludedProjectId } },
orderDate: { $gte: startFrom, $lte: startThrough }
});
debug('aggregateOrder:result', aggregateResult, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 注文取引集計
*/
function aggregatePlaceOrder(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.transaction.aggregatePlaceOrder({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.transactionType.PlaceOrder
});
debug('aggregatePlaceOrder:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom);
const aggregateResultsByClientId = [];
if (Array.isArray(params.clientIds)) {
for (const clientId of params.clientIds) {
const aggregateResultByClientId = yield repos.transaction.aggregatePlaceOrder({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.transactionType.PlaceOrder,
clientId
});
debug('aggregateResultByClientId', aggregateResultByClientId, (_b = aggregateResultByClientId.statuses[0]) === null || _b === void 0 ? void 0 : _b.aggregation, clientId, startFrom);
aggregateResultsByClientId.push({
clientId,
aggregation: aggregateResultByClientId
});
}
}
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePlaceOrder, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate, aggregationByClient: aggregateResultsByClientId }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 興行オファー承認アクション集計
*/
function aggregateAuthorizeEventServiceOfferAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateAuthorizeEventServiceOfferAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.AuthorizeAction
});
debug('aggregateAuthorizeEventServiceOfferAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizeEventServiceOfferAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 決済承認アクション集計
*/
function aggregateAuthorizePaymentAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateAuthorizePaymentAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.AuthorizeAction
});
debug('aggregateAuthorizePaymentAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizePaymentAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
function aggregateAuthorizeOrderAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateAuthorizeOrderAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.AuthorizeAction
});
debug('aggregateAuthorizeOrderAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateAuthorizeOrderAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 使用アクション集計
*/
function aggregateUseAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateByTypeOf({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.UseAction
});
debug('aggregateUseAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateUseAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 予約アクション集計
*/
function aggregateReserveAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateByTypeOf({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.ReserveAction
});
debug('aggregateReserveAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateReserveAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 注文アクション集計
*/
function aggregateOrderAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateByTypeOf({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.actionType.OrderAction
});
debug('aggregateOrderAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateOrderAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 予約取消アクション集計
*/
function aggregateCancelReservationAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateCancelReservationAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough
});
debug('aggregateCancelReservationAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateCancelReservationAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
function aggregateCheckMovieTicketAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregateCheckMovieTicketAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough
});
debug('aggregateCheckMovieTicketAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateCheckMovieTicketAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
function aggregatePayMovieTicketAction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.action.aggregatePayMovieTicketAction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough
});
debug('aggregatePayMovieTicketAction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation.percentilesDuration, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePayMovieTicketAction, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
function aggregatePayTransaction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.assetTransaction.aggregateAssetTransaction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.assetTransactionType.Pay
});
debug('aggregatePayTransaction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregatePay, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
/**
* 予約集計
*/
function aggregateReserveTransaction(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const startFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const startThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.assetTransaction.aggregateAssetTransaction({
project: { id: { $ne: params.excludedProjectId } },
startFrom,
startThrough,
typeOf: factory.assetTransactionType.Reserve
});
debug('aggregateReserveTransaction:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, startFrom);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateReserve, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: startFrom, aggregateDate }, aggregateResult));
}
return { aggregationCount: i, aggregateDuration };
});
}
function aggregateTask(params) {
return (repos) => __awaiter(this, void 0, void 0, function* () {
var _a;
const { aggregateDate } = params;
if (!(aggregateDate instanceof Date)) {
throw new factory.errors.Argument('aggregateDate', 'must be Date');
}
const aggregateDuration = moment.duration(1, params.aggregateDurationUnit)
.toISOString();
let i = -1;
while (i < params.aggregationCount) {
i += 1;
const runsFrom = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.startOf(params.aggregateDurationUnit)
.toDate();
const runsThrough = moment(aggregateDate)
.utc()
// .tz('Asia/Tokyo')
.add(-i, params.aggregateDurationUnit)
.endOf(params.aggregateDurationUnit)
.toDate();
const aggregateResult = yield repos.task.aggregateTask({
project: { id: { $ne: params.excludedProjectId } },
runsFrom,
runsThrough
});
debug('aggregateTask:result', aggregateResult, (_a = aggregateResult.statuses[0]) === null || _a === void 0 ? void 0 : _a.aggregation, runsFrom, runsThrough);
yield repos.agregation.saveAggregation(Object.assign({ typeOf: factory.aggregation.AggregationType.AggregateTask, project: { id: '*', typeOf: factory.organizationType.Project }, aggregateDuration, aggregateStart: runsFrom, aggregateDate }, aggregateResult));
}
debug(i, 'aggregations saved');
return { aggregationCount: i, aggregateDuration };
});
}