Files
stocca-tre/server/StoccaTreServer.ts
2022-07-10 23:07:51 +02:00

36 lines
1.2 KiB
TypeScript

import StoccaTreRequestHandler from "./StoccaTreRequestHandler.ts";
import StoccaTreRequest, { RouteDefinition } from "./StoccaTreRequest.ts";
import { Result, StoccaTreError } from "./Result.ts";
import { JSONObject } from "./JSON.ts";
import { StoccaTreDbConn } from "./database.ts";
export default class StoccaTreServer implements StoccaTreRequestHandler {
private db: StoccaTreDbConn;
private routes: {
routeDef: RouteDefinition;
handler: StoccaTreRequestHandler;
}[] = [];
constructor(dbConnection: StoccaTreDbConn) {
this.db = dbConnection;
}
addResource(route: RouteDefinition, handler: StoccaTreRequestHandler) {
this.routes.push({ routeDef: route, handler });
}
async handleRequest(request: StoccaTreRequest): Promise<Result<JSONObject>> {
let result: Result<JSONObject> | null = null;
for (const { routeDef, handler } of this.routes) {
if (request.match(routeDef)) {
result = await handler.handleRequest(request);
break;
}
}
if (!result) {
return [new StoccaTreError(`Invalid route: ${request.route} with method ${request.method}.`, 400)];
}
return result;
}
}