@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
JavaScript
;
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;