UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

120 lines (119 loc) 5.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const UserReports_1 = require("../types/UserReports"); const reportStoreService_1 = __importDefault(require("./reportStoreService")); const urlHelper_1 = require("../utils/urlHelper"); const logger_1 = __importDefault(require("../utils/logger")); class RequestedReportService extends reportStoreService_1.default { constructor(userDataStore) { super(userDataStore); logger_1.default.info('Service created: RequestedReportService'); } async addReport(userId, reportStateData) { const userConfig = await this.getState(userId); userConfig.requestedReports.unshift(reportStateData); await this.saveState(userId, userConfig); } async removeReport(id, userId) { const userConfig = await this.getState(userId); const index = this.findIndexByExecutionId(id, userConfig.requestedReports); userConfig.requestedReports.splice(index, 1); await this.saveState(userId, userConfig); } async getReportByExecutionId(id, userId) { const userConfig = await this.getState(userId); return userConfig.requestedReports.find((report) => report.executionId === id); } async getReportByTableId(id, userId) { const userConfig = await this.getState(userId); return userConfig.requestedReports.find((report) => report.tableId === id); } async getAllReports(userId) { const userConfig = await this.getState(userId); return userConfig.requestedReports; } async getAllReportsById(id, userId) { const userConfig = await this.getState(userId); return userConfig.requestedReports.filter((requested) => { return (requested.id && requested.id === id) || (requested.variantId && requested.variantId === id); }); } async updateLastViewed(id, userId) { const userConfig = await this.getState(userId); const index = this.findIndexByExecutionId(id, userConfig.requestedReports); const report = userConfig.requestedReports[index]; report.timestamp.lastViewed = new Date(); userConfig.requestedReports[index] = report; await this.saveState(userId, userConfig); } async updateStatus(id, userId, status, errorMessage) { const userConfig = await this.getState(userId); const index = this.findIndexByExecutionId(id, userConfig.requestedReports); let report = userConfig.requestedReports[index]; if (report) report = this.updateDataByStatus(report, status, errorMessage); userConfig.requestedReports[index] = report; await this.saveState(userId, userConfig); } async setToExpired(id, userId) { const userConfig = await this.getState(userId); const index = this.findIndexByExecutionId(id, userConfig.requestedReports); let report = userConfig.requestedReports[index]; if (report) { report = { ...report, status: UserReports_1.RequestStatus.EXPIRED, timestamp: { ...report.timestamp, expired: new Date(), }, }; } userConfig.requestedReports[index] = report; await this.saveState(userId, userConfig); } updateDataByStatus(report, status, errorMessage) { var _a; const { dataProductDefinitionsPath, dpdPathFromQuery } = report; const ts = new Date(); const { tableId } = report; if (status) report.status = status; switch (status) { case UserReports_1.RequestStatus.FAILED: report.timestamp.failed = ts; report.errorMessage = errorMessage; break; case UserReports_1.RequestStatus.EXPIRED: report.timestamp.expired = ts; break; case UserReports_1.RequestStatus.ABORTED: report.timestamp.aborted = ts; break; case UserReports_1.RequestStatus.FINISHED: { report.timestamp.completed = ts; const search = ((_a = report.url.report) === null || _a === void 0 ? void 0 : _a.search) ? report.url.report.search : ''; const dpdPath = dpdPathFromQuery ? `${(0, urlHelper_1.getDpdPathSuffix)(dataProductDefinitionsPath)}` : ''; report.url.report.pathname = search ? `${report.url.request.pathname}/${tableId}/report${search}` : `${report.url.request.pathname}/${tableId}/report${dpdPath}`; report.url.report.fullUrl = `${report.url.origin}${report.url.report.pathname}`; break; } case UserReports_1.RequestStatus.SUBMITTED: report.timestamp.requested = ts; break; case UserReports_1.RequestStatus.STARTED: case UserReports_1.RequestStatus.PICKED: break; default: report.timestamp.lastViewed = ts; break; } return report; } } exports.default = RequestedReportService;