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> { let result: Result | 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; } }