refactor: use generics for createRoute (no-any)

Related to #39
This commit is contained in:
Jovan Krunić
2019-06-06 16:21:27 +02:00
committed by Rainer Killinger
parent 8b457c9911
commit f4a699e0e5
8 changed files with 41 additions and 35 deletions

View File

@@ -27,9 +27,9 @@ const bulkRouteModel = new SCBulkAddRoute();
/**
* Implementation of the bulk add route (SCBulkAddRoute)
*/
export const bulkAddRouter = createRoute<SCBulkAddResponse>(
export const bulkAddRouter = createRoute<SCBulkAddRequest, SCBulkAddResponse>(
bulkRouteModel,
async (request: SCBulkAddRequest, app, params) => {
async (request, app, params) => {
if (typeof params === 'undefined' || typeof params.UID !== 'string') {
throw new Error('UID of Bulk was not given, but route with obligatory parameter was called');

View File

@@ -27,9 +27,9 @@ const bulkDoneRouteModel = new SCBulkDoneRoute();
/**
* Implementation of the bulk done request route (SCBulkDoneRoute)
*/
export const bulkDoneRouter = createRoute<SCBulkDoneResponse>(
export const bulkDoneRouter = createRoute<SCBulkDoneRequest, SCBulkDoneResponse>(
bulkDoneRouteModel,
async (_request: SCBulkDoneRequest, app, params) => {
async (_request, app, params) => {
if (typeof params === 'undefined' || typeof params.UID !== 'string') {
throw new Error('UID of Bulk was not given, but route with obligatory parameter was called');

View File

@@ -25,9 +25,9 @@ const bulkRouteModel = new SCBulkRoute();
/**
* Implementation of the bulk request route (SCBulkRoute)
*/
export const bulkRouter = createRoute<SCBulkResponse>(
export const bulkRouter = createRoute<SCBulkRequest, SCBulkResponse>(
bulkRouteModel,
async (request: SCBulkRequest, app) => {
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.create(request);

View File

@@ -25,7 +25,7 @@ const indexRouteModel = new SCIndexRoute();
/**
* Implementation of the index route (SCIndexRoute)
*/
export const indexRouter = createRoute<SCIndexResponse>(
export const indexRouter = createRoute<unknown, SCIndexResponse>(
indexRouteModel,
async (): Promise<SCIndexResponse> => {
return {

View File

@@ -31,29 +31,30 @@ const multiSearchRouteModel = new SCMultiSearchRoute();
/**
* Implementation of the multi search route (SCMultiSearchRoute)
*/
export const multiSearchRouter = createRoute<SCMultiSearchResponse | SCTooManyRequestsErrorResponse>(
multiSearchRouteModel,
async (request: SCMultiSearchRequest, app) => {
export const multiSearchRouter = createRoute
<SCMultiSearchRequest, SCMultiSearchResponse | SCTooManyRequestsErrorResponse>(
multiSearchRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
const queryNames = Object.keys(request);
const bulkMemory: BulkStorage = app.get('bulk');
const queryNames = Object.keys(request);
if (queryNames.length > configFile.backend.maxMultiSearchRouteQueries) {
throw new SCTooManyRequestsErrorResponse(isTestEnvironment);
}
if (queryNames.length > configFile.backend.maxMultiSearchRouteQueries) {
throw new SCTooManyRequestsErrorResponse(isTestEnvironment);
}
// get a map of promises for each query
const searchRequests = queryNames.map(async (queryName) => {
return bulkMemory.database.search(request[queryName]);
});
// get a map of promises for each query
const searchRequests = queryNames.map(async (queryName) => {
return bulkMemory.database.search(request[queryName]);
});
const listOfSearchResponses = await Promise.all(searchRequests);
const listOfSearchResponses = await Promise.all(searchRequests);
const response: { [queryName: string]: SCSearchResponse; } = {};
queryNames.forEach((queryName, index) => {
response[queryName] = listOfSearchResponses[index];
});
const response: { [queryName: string]: SCSearchResponse; } = {};
queryNames.forEach((queryName, index) => {
response[queryName] = listOfSearchResponses[index];
});
return response;
},
return response;
},
);

View File

@@ -35,10 +35,12 @@ import {isHttpMethod} from './http-types';
* @param routeClass Model of a route
* @param handler Implements the logic of the route
*/
export function createRoute<RETURNTYPE>(
export function createRoute<REQUESTTYPE, RETURNTYPE>(
routeClass: SCRoute,
// tslint:disable-next-line: no-any
handler: (validatedBody: any, app: Application, params?: { [parameterName: string]: string; }) => Promise<RETURNTYPE>,
handler: (
validatedBody: REQUESTTYPE,
app: Application, params?: { [parameterName: string]: string; },
) => Promise<RETURNTYPE>,
): Router {
// create router
const router = PromiseRouter({mergeParams: true});

View File

@@ -25,8 +25,11 @@ const searchRouteModel = new SCSearchRoute();
/**
* Implementation of the search route (SCSearchRoute)
*/
export const searchRouter = createRoute<SCSearchResponse>(searchRouteModel, async ( request: SCSearchRequest, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
export const searchRouter = createRoute<SCSearchRequest, SCSearchResponse>(
searchRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.database.search(request);
});
return bulkMemory.database.search(request);
},
);

View File

@@ -25,9 +25,9 @@ const thingUpdateRouteModel = new SCThingUpdateRoute();
/**
* Implementation of the thing update route (SCThingUpdateRoute)
*/
export const thingUpdateRouter = createRoute<SCThingUpdateResponse>(
export const thingUpdateRouter = createRoute<SCThingUpdateRequest, SCThingUpdateResponse>(
thingUpdateRouteModel,
async (request: SCThingUpdateRequest, app) => {
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
await bulkMemory.database.put(request);