Add API server with routes, services, and middleware
Express server with CRUD routes for agents, goals, issues, projects, and activity log. Includes validation middleware, structured error handling, request logging, and health check endpoint with tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
18
server/src/middleware/error-handler.ts
Normal file
18
server/src/middleware/error-handler.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import type { Request, Response, NextFunction } from "express";
|
||||
import { ZodError } from "zod";
|
||||
import { logger } from "./logger.js";
|
||||
|
||||
export function errorHandler(
|
||||
err: unknown,
|
||||
_req: Request,
|
||||
res: Response,
|
||||
_next: NextFunction,
|
||||
) {
|
||||
if (err instanceof ZodError) {
|
||||
res.status(400).json({ error: "Validation error", details: err.errors });
|
||||
return;
|
||||
}
|
||||
|
||||
logger.error(err, "Unhandled error");
|
||||
res.status(500).json({ error: "Internal server error" });
|
||||
}
|
||||
3
server/src/middleware/index.ts
Normal file
3
server/src/middleware/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export { logger, httpLogger } from "./logger.js";
|
||||
export { errorHandler } from "./error-handler.js";
|
||||
export { validate } from "./validate.js";
|
||||
5
server/src/middleware/logger.ts
Normal file
5
server/src/middleware/logger.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import pino from "pino";
|
||||
import { pinoHttp } from "pino-http";
|
||||
|
||||
export const logger = pino();
|
||||
export const httpLogger = pinoHttp({ logger });
|
||||
9
server/src/middleware/validate.ts
Normal file
9
server/src/middleware/validate.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { Request, Response, NextFunction } from "express";
|
||||
import type { ZodSchema } from "zod";
|
||||
|
||||
export function validate(schema: ZodSchema) {
|
||||
return (req: Request, _res: Response, next: NextFunction) => {
|
||||
req.body = schema.parse(req.body);
|
||||
next();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user