import { Controller, DefaultValuePipe, Get, Logger, Param, ParseIntPipe, Query, Request, Response, } from '@nestjs/common'; import { FeedsService } from './feeds.service'; import { Response as Res, Request as Req } from 'express'; @Controller('feeds') export class FeedsController { private readonly logger = new Logger(this.constructor.name); constructor(private readonly feedsService: FeedsService) {} @Get('/') async getFeedList() { return this.feedsService.getFeedList(); } @Get('/all.(json|rss|atom)') async getFeeds( @Request() req: Req, @Response() res: Res, @Query('limit', new DefaultValuePipe(30), ParseIntPipe) limit: number = 30, @Query('mode') mode: string, ) { const path = req.path; const type = path.split('.').pop() || ''; const { content, mimeType } = await this.feedsService.handleGenerateFeed({ type, limit, mode, }); res.setHeader('Content-Type', mimeType); res.send(content); } @Get('/:feed') async getFeed( @Response() res: Res, @Param('feed') feed: string, @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit: number = 10, @Query('mode') mode: string, ) { const [id, type] = feed.split('.'); this.logger.log('getFeed: ', id); const { content, mimeType } = await this.feedsService.handleGenerateFeed({ id, type, limit, mode, }); res.setHeader('Content-Type', mimeType); res.send(content); } }