feat: things are happening...
This commit is contained in:
35
server/StoccaTreServer.ts
Normal file
35
server/StoccaTreServer.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user