feat: things are happening...

This commit is contained in:
Daniel Ledda
2022-07-10 23:07:51 +02:00
parent ba68f953f0
commit fb9f78caf7
22 changed files with 448 additions and 207 deletions

35
server/StoccaTreServer.ts Normal file
View File

@@ -0,0 +1,35 @@
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;
}
}