import { NestFactory } from '@nestjs/core'; import { ValidationPipe } from '@nestjs/common'; import { NestExpressApplication } from '@nestjs/platform-express'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { join } from 'path'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // Раздача сохранённых обложек треков (/covers/*.webp) — свой CDN const coversDir = process.env.COVERS_DIR || join(process.cwd(), 'data', 'covers'); app.useStaticAssets(coversDir, { prefix: '/covers/', maxAge: '30d', immutable: true, }); app.useGlobalPipes( new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true, }), ); app.enableCors({ origin: process.env.FRONTEND_URL || '*', credentials: true, }); const config = new DocumentBuilder() .setTitle('radiOLA API') .setDescription('radiOLA backend API') .setVersion('0.1') .addBearerAuth() .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api', app, document); const port = process.env.PORT || 3000; await app.listen(port); console.log(`Application is running on: http://localhost:${port}`); } bootstrap();