Source: api/routes/reports/archive/index.js

/**
 * CogniCity Server /reports/archive endpoint
 * @module src/api/reports/archive/index
 **/
import {Router} from 'express';

// Import our data model
import archive from './model';

// Import any required utility functions
import {cacheResponse, handleGeoResponse} from '../../../../lib/util';

// Import validation dependencies
import BaseJoi from 'joi';
import Extension from 'joi-date-extensions';
const Joi = BaseJoi.extend(Extension);

import validate from 'celebrate';
/**
 * Methods to get historic flood reports from database
 * @alias module:src/api/reports/archive/index
 * @param {Object} config Server configuration
 * @param {Object} db PG Promise database instance
 * @param {Object} logger Configured Winston logger instance
 * @return {Object} api Express router object for reports route
 */
export default ({config, db, logger}) => {
	let api = Router(); // eslint-disable-line new-cap

	// Get a list of all reports
	api.get('/', cacheResponse('1 minute'),

		validate({
			query: {
				city: Joi.any().valid(config.REGION_CODES),
        start: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ').required(),
				end: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ')
					.min(Joi.ref('start')).required(),
				format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
				geoformat: Joi.any().valid(config.GEO_FORMATS)
					.default(config.GEO_FORMAT_DEFAULT),
			},
		}),
		(req, res, next) => archive(config, db, logger)
			.all(req.query.start, req.query.end, req.query.city)
			.then((data) => handleGeoResponse(data, req, res, next))
			.catch((err) => {
				/* istanbul ignore next */
				logger.error(err);
				/* istanbul ignore next */
				next(err);
			})
	);

	return api;
};