import {Body, Controller, Delete, Get, Param, Post, Put, Res, StreamableFile} from '@nestjs/common'; import {TrackService} from "./track.service"; import {TrackModel} from "./track.model"; import {TrackEntity} from "./track.entity"; import {createReadStream} from "fs"; import { join } from 'path'; import type { Response } from 'express'; @Controller('track') export class TrackController { constructor(private readonly service: TrackService) { } @Get() getAll(): Promise { return this.service.findAll(); } @Get(':id') get(@Param('id') id: number): Promise { return this.service.findOne(id); } @Post() create(@Body() track: TrackModel): Promise { return this.service.create(track as TrackEntity); } @Put(':id') update(@Param('id') id: number, @Body() track: TrackModel): Promise { return this.service.update(id, track as TrackEntity); } @Delete(':id') delete(@Param('id') id: number): Promise { return this.service.remove(id); } @Get('download/:id') async getFile(@Res({ passthrough: true }) res: Response, @Param('id') id: number): Promise { const track = await this.service.findOne(id); const file = createReadStream(join(process.cwd(), 'downloads', `${track.artist} - ${track.song}.mp3`)); res.set({'Content-Disposition': `attachment; filename="${track.artist} - ${track.song}.mp3"`,}); return new StreamableFile(file); } }