53 lines
1.0 KiB
TypeScript
53 lines
1.0 KiB
TypeScript
import fastify from 'fastify';
|
|
import cors from '@fastify/cors';
|
|
import rateLimit from '@fastify/rate-limit';
|
|
import swagger from '@fastify/swagger';
|
|
import swaggerUi from '@fastify/swagger-ui';
|
|
|
|
const app = fastify({ logger: true });
|
|
|
|
// Register plugins
|
|
await app.register(cors, {
|
|
origin: 'https://cad.media-on.de'
|
|
});
|
|
|
|
await app.register(rateLimit, {
|
|
max: 100,
|
|
timeWindow: '1 minute'
|
|
});
|
|
|
|
await app.register(swagger, {
|
|
openapi: {
|
|
info: {
|
|
title: 'web-cad API',
|
|
description: 'API for web-cad - Web-based 2D CAD for Event Seating Plans',
|
|
version: '0.0.1'
|
|
},
|
|
servers: [{
|
|
url: 'https://cad.media-on.de'
|
|
}]
|
|
}
|
|
});
|
|
|
|
await app.register(swaggerUi, {
|
|
routePrefix: '/docs',
|
|
uiConfig: {
|
|
deepLinking: false
|
|
},
|
|
staticCSP: true,
|
|
transformSpecification: (swaggerObject) => {
|
|
return swaggerObject;
|
|
}
|
|
});
|
|
|
|
// Define a route
|
|
app.get('/', async () => {
|
|
return { message: 'Welcome to web-cad API' };
|
|
});
|
|
|
|
// Define a health check route
|
|
app.get('/health', async () => {
|
|
return { status: 'OK' };
|
|
});
|
|
|
|
export default app; |