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) * Implementation of the bulk add route (SCBulkAddRoute)
*/ */
export const bulkAddRouter = createRoute<SCBulkAddResponse>( export const bulkAddRouter = createRoute<SCBulkAddRequest, SCBulkAddResponse>(
bulkRouteModel, bulkRouteModel,
async (request: SCBulkAddRequest, app, params) => { async (request, app, params) => {
if (typeof params === 'undefined' || typeof params.UID !== 'string') { if (typeof params === 'undefined' || typeof params.UID !== 'string') {
throw new Error('UID of Bulk was not given, but route with obligatory parameter was called'); 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) * Implementation of the bulk done request route (SCBulkDoneRoute)
*/ */
export const bulkDoneRouter = createRoute<SCBulkDoneResponse>( export const bulkDoneRouter = createRoute<SCBulkDoneRequest, SCBulkDoneResponse>(
bulkDoneRouteModel, bulkDoneRouteModel,
async (_request: SCBulkDoneRequest, app, params) => { async (_request, app, params) => {
if (typeof params === 'undefined' || typeof params.UID !== 'string') { if (typeof params === 'undefined' || typeof params.UID !== 'string') {
throw new Error('UID of Bulk was not given, but route with obligatory parameter was called'); 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) * Implementation of the bulk request route (SCBulkRoute)
*/ */
export const bulkRouter = createRoute<SCBulkResponse>( export const bulkRouter = createRoute<SCBulkRequest, SCBulkResponse>(
bulkRouteModel, bulkRouteModel,
async (request: SCBulkRequest, app) => { async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk'); const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.create(request); return bulkMemory.create(request);

View File

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

View File

@@ -31,29 +31,30 @@ const multiSearchRouteModel = new SCMultiSearchRoute();
/** /**
* Implementation of the multi search route (SCMultiSearchRoute) * Implementation of the multi search route (SCMultiSearchRoute)
*/ */
export const multiSearchRouter = createRoute<SCMultiSearchResponse | SCTooManyRequestsErrorResponse>( export const multiSearchRouter = createRoute
multiSearchRouteModel, <SCMultiSearchRequest, SCMultiSearchResponse | SCTooManyRequestsErrorResponse>(
async (request: SCMultiSearchRequest, app) => { multiSearchRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk'); const bulkMemory: BulkStorage = app.get('bulk');
const queryNames = Object.keys(request); const queryNames = Object.keys(request);
if (queryNames.length > configFile.backend.maxMultiSearchRouteQueries) { if (queryNames.length > configFile.backend.maxMultiSearchRouteQueries) {
throw new SCTooManyRequestsErrorResponse(isTestEnvironment); throw new SCTooManyRequestsErrorResponse(isTestEnvironment);
} }
// get a map of promises for each query // get a map of promises for each query
const searchRequests = queryNames.map(async (queryName) => { const searchRequests = queryNames.map(async (queryName) => {
return bulkMemory.database.search(request[queryName]); return bulkMemory.database.search(request[queryName]);
}); });
const listOfSearchResponses = await Promise.all(searchRequests); const listOfSearchResponses = await Promise.all(searchRequests);
const response: { [queryName: string]: SCSearchResponse; } = {}; const response: { [queryName: string]: SCSearchResponse; } = {};
queryNames.forEach((queryName, index) => { queryNames.forEach((queryName, index) => {
response[queryName] = listOfSearchResponses[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 routeClass Model of a route
* @param handler Implements the logic of the route * @param handler Implements the logic of the route
*/ */
export function createRoute<RETURNTYPE>( export function createRoute<REQUESTTYPE, RETURNTYPE>(
routeClass: SCRoute, routeClass: SCRoute,
// tslint:disable-next-line: no-any handler: (
handler: (validatedBody: any, app: Application, params?: { [parameterName: string]: string; }) => Promise<RETURNTYPE>, validatedBody: REQUESTTYPE,
app: Application, params?: { [parameterName: string]: string; },
) => Promise<RETURNTYPE>,
): Router { ): Router {
// create router // create router
const router = PromiseRouter({mergeParams: true}); const router = PromiseRouter({mergeParams: true});

View File

@@ -25,8 +25,11 @@ const searchRouteModel = new SCSearchRoute();
/** /**
* Implementation of the search route (SCSearchRoute) * Implementation of the search route (SCSearchRoute)
*/ */
export const searchRouter = createRoute<SCSearchResponse>(searchRouteModel, async ( request: SCSearchRequest, app) => { export const searchRouter = createRoute<SCSearchRequest, SCSearchResponse>(
const bulkMemory: BulkStorage = app.get('bulk'); 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) * Implementation of the thing update route (SCThingUpdateRoute)
*/ */
export const thingUpdateRouter = createRoute<SCThingUpdateResponse>( export const thingUpdateRouter = createRoute<SCThingUpdateRequest, SCThingUpdateResponse>(
thingUpdateRouteModel, thingUpdateRouteModel,
async (request: SCThingUpdateRequest, app) => { async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk'); const bulkMemory: BulkStorage = app.get('bulk');
await bulkMemory.database.put(request); await bulkMemory.database.put(request);