50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import * as bodyParser from 'body-parser';
|
|
import cors from 'cors';
|
|
import express, { Request, Response } from 'express';
|
|
import session from 'express-session';
|
|
import helmet from 'helmet';
|
|
import { z } from 'zod';
|
|
import { fromZodError } from 'zod-validation-error';
|
|
import { addition } from '../utils/addition';
|
|
import { logger } from '../utils/logger';
|
|
|
|
const server = express();
|
|
server.use(cors());
|
|
server.use(helmet());
|
|
server.disable('x-powered-by');
|
|
server.set('trust proxy', 1);
|
|
server.use(
|
|
session({
|
|
secret: 's3Cur3',
|
|
name: 'sessionId'
|
|
})
|
|
);
|
|
server.use(express.json());
|
|
server.use(bodyParser.json());
|
|
|
|
const schema = z.object({
|
|
value: z.number()
|
|
});
|
|
|
|
server.post('/', async (req: Request, res: Response) => {
|
|
logger.info(`POST / with ${JSON.stringify(req.body)}`);
|
|
|
|
try {
|
|
schema.parse(req.body);
|
|
} catch (err) {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const validationError = fromZodError(err as any);
|
|
return res.status(400).json({ message: validationError.message });
|
|
}
|
|
|
|
const { value } = req.body;
|
|
|
|
const result = await addition(value);
|
|
|
|
return res.json({
|
|
response: result
|
|
});
|
|
});
|
|
|
|
export default server;
|