@it_kyryl/arbitrage_admin_schema
Version:
Schema for arbitrage admin panel
42 lines (41 loc) • 2.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const moment_timezone_1 = __importDefault(require("moment-timezone"));
class ResolveFinanceProviderReportUseCase {
dependency;
constructor(dependency) {
this.dependency = dependency;
}
async execute({ totalFinanceReport, providerAccounts }) {
const providerBaseReports = await this.dependency.providerBaseReportRepository.getProviderBaseReportsByTotalReportIdForResolveFinanceProviderUseCase(totalFinanceReport.id);
// check and create all possible provider base reports
for (let providerAccount of providerAccounts) {
const providerBaseReportExist = providerBaseReports.find(pbr => pbr.providerAccountId === providerAccount.id);
if (!providerBaseReportExist) {
const newProviderBaseReport = await this.dependency.providerBaseReportRepository.createProviderBaseReportForResolveFinanceProviderUseCase({
providerAccountId: providerAccount.id,
totalFinanceReportId: totalFinanceReport.id,
totalRevenue: 0,
clawback: 0
});
providerBaseReports.push(newProviderBaseReport);
}
}
// collect revenue for provider base reports and if not match - update
for (let providerBaseReport of providerBaseReports) {
const currentRevenue = await this.dependency.dateRevenueRepository.getTotalDateRevenueForResolveFinanceProviderUseCase({
dateFrom: (0, moment_timezone_1.default)(totalFinanceReport.dateFrom),
dateTo: (0, moment_timezone_1.default)(totalFinanceReport.dateFrom),
providerAccountId: providerBaseReport.providerAccountId
});
if (providerBaseReport.totalRevenue !== currentRevenue)
await this.dependency.providerBaseReportRepository.updateProviderBaseReport(providerBaseReport.id, {
totalRevenue: currentRevenue
});
}
}
}
exports.default = ResolveFinanceProviderReportUseCase;