const bodyParser = require('body-parser'); import * as api from '../client/src/api'; import Knex from 'knex'; import { CreateSongEndpointHandler } from './endpoints/CreateSongEndpointHandler'; import { CreateArtistEndpointHandler } from './endpoints/CreateArtistEndpointHandler'; import { QueryEndpointHandler } from './endpoints/QueryEndpointHandler'; import { ArtistDetailsEndpointHandler } from './endpoints/ArtistDetailsEndpointHandler' import { SongDetailsEndpointHandler } from './endpoints/SongDetailsEndpointHandler'; import { ModifyArtistEndpointHandler } from './endpoints/ModifyArtistEndpointHandler'; import { ModifySongEndpointHandler } from './endpoints/ModifySongEndpointHandler'; import { CreateTagEndpointHandler } from './endpoints/CreateTagEndpointHandler'; import { ModifyTagEndpointHandler } from './endpoints/ModifyTagEndpointHandler'; import { TagDetailsEndpointHandler } from './endpoints/TagDetailsEndpointHandler'; import { CreateAlbumEndpointHandler } from './endpoints/CreateAlbumEndpointHandler'; import { ModifyAlbumEndpointHandler } from './endpoints/ModifyAlbumEndpointHandler'; import { AlbumDetailsEndpointHandler } from './endpoints/AlbumDetailsEndpointHandler'; import * as endpointTypes from './endpoints/types'; const invokeHandler = (handler:endpointTypes.EndpointHandler, knex: Knex) => { return async (req: any, res: any) => { console.log("Incoming", req.method, " @ ", req.url); await handler(req, res, knex) .catch(endpointTypes.catchUnhandledErrors) .catch((_e:endpointTypes.EndpointError) => { let e:endpointTypes.EndpointError = _e; console.log("Error handling request: ", e.internalMessage); res.sendStatus(e.httpStatus); }) console.log("Finished handling", req.method, "@", req.url); }; } const SetupApp = (app: any, knex: Knex) => { app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); const invokeWithKnex = (handler: endpointTypes.EndpointHandler) => { return invokeHandler(handler, knex); } // Set up REST API endpoints app.post(api.CreateSongEndpoint, invokeWithKnex(CreateSongEndpointHandler)); app.post(api.QueryEndpoint, invokeWithKnex(QueryEndpointHandler)); app.post(api.CreateArtistEndpoint, invokeWithKnex(CreateArtistEndpointHandler)); app.put(api.ModifyArtistEndpoint, invokeWithKnex(ModifyArtistEndpointHandler)); app.put(api.ModifySongEndpoint, invokeWithKnex(ModifySongEndpointHandler)); app.get(api.SongDetailsEndpoint, invokeWithKnex(SongDetailsEndpointHandler)); app.get(api.ArtistDetailsEndpoint, invokeWithKnex(ArtistDetailsEndpointHandler)); app.post(api.CreateTagEndpoint, invokeWithKnex(CreateTagEndpointHandler)); app.put(api.ModifyTagEndpoint, invokeWithKnex(ModifyTagEndpointHandler)); app.get(api.TagDetailsEndpoint, invokeWithKnex(TagDetailsEndpointHandler)); app.post(api.CreateAlbumEndpoint, invokeWithKnex(CreateAlbumEndpointHandler)); app.put(api.ModifyAlbumEndpoint, invokeWithKnex(ModifyAlbumEndpointHandler)); app.get(api.AlbumDetailsEndpoint, invokeWithKnex(AlbumDetailsEndpointHandler)); } export { SetupApp }