36 lines
1.2 KiB
TypeScript
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;
|
|
}
|
|
}
|