init()

in src/router/routes/exportRoute.ts [57:129]


    init() {
        // Start export job
        this.router.get(
            '/\\$export',
            RouteHelper.wrapAsync(async (req: express.Request, res: express.Response) => {
                const exportType: ExportType = 'system';
                await this.initiateExportRequests(req, res, exportType);
            }),
        );

        this.router.get(
            '/Group/:id/\\$export',
            RouteHelper.wrapAsync(async (req: express.Request, res: express.Response) => {
                const exportType: ExportType = 'group';
                await this.initiateExportRequests(req, res, exportType);
            }),
        );

        this.router.get('/Patient/\\$export', () => {
            throw new createHttpError.BadRequest('We currently do not support Patient export');
        });

        // Export Job Status
        this.router.get(
            '/\\$export/:jobId',
            RouteHelper.wrapAsync(async (req: express.Request, res: express.Response) => {
                const { userIdentity, requestContext, tenantId } = res.locals;
                const { jobId } = req.params;
                const response = await this.exportHandler.getExportJobStatus(
                    jobId,
                    userIdentity,
                    requestContext,
                    tenantId,
                );
                if (response.jobStatus === 'in-progress') {
                    res.status(202).header('x-progress', 'in-progress').send();
                } else if (response.jobStatus === 'failed') {
                    throw new createHttpError.InternalServerError(response.errorMessage);
                } else if (response.jobStatus === 'completed') {
                    const { outputFormat, since, type, groupId } = response;
                    const queryParams = { outputFormat, since, type };
                    const jsonResponse = {
                        transactionTime: response.transactionTime,
                        request: ExportRouteHelper.getExportUrl(
                            res.locals.serverUrl,
                            response.exportType,
                            queryParams,
                            groupId,
                        ),
                        requiresAccessToken: response.requiresAccessToken,
                        output: response.exportedFileUrls,
                        error: response.errorArray,
                    };
                    res.status(200).send(jsonResponse);
                } else if (response.jobStatus === 'canceled') {
                    res.send('Export job has been canceled');
                } else if (response.jobStatus === 'canceling') {
                    res.send('Export job is being canceled');
                }
            }),
        );

        // Cancel export job
        this.router.delete(
            '/\\$export/:jobId',
            RouteHelper.wrapAsync(async (req: express.Request, res: express.Response) => {
                const { jobId } = req.params;
                const { userIdentity, requestContext, tenantId } = res.locals;
                await this.exportHandler.cancelExport(jobId, userIdentity, requestContext, tenantId);
                res.status(202).send();
            }),
        );
    }