Skip to content

Commit 98e1586

Browse files
committed
refactor: streamline SongController methods by consolidating parameter formatting for improved readability
1 parent b89a87f commit 98e1586

File tree

1 file changed

+19
-56
lines changed

1 file changed

+19
-56
lines changed

apps/backend/src/song/song.controller.ts

Lines changed: 19 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import { GetRequestToken, validateUser } from '@server/lib/GetRequestUser';
1313

1414
import { SongService } from './song.service';
1515

16-
// Handles public-facing song routes.
17-
1816
@Controller('song')
1917
@ApiTags('song')
2018
export class SongController {
@@ -62,31 +60,27 @@ export class SongController {
6260
@ApiQuery({ name: 'count', required: false, type: 'string', description: 'Number of random songs to return (1-10). Only used when q=random.', example: '5',})
6361
@ApiQuery({ name: 'category', required: false, type: 'string', description: 'Category filter for random songs. Only used when q=random.', example: 'electronic',})
6462
@ApiResponse({
65-
status: 200,
66-
description:
67-
'Success. Returns either an array of song previews or category counts.',
68-
schema: {
63+
status : 200,
64+
description: 'Success. Returns either an array of song previews or category counts.',
65+
schema : {
6966
oneOf: [
7067
{
71-
type : 'array',
72-
items: { $ref: '#/components/schemas/SongPreviewDto' },
73-
description:
74-
'Array of song previews (default behavior and most query modes)',
68+
type : 'array',
69+
items : { $ref: '#/components/schemas/SongPreviewDto' },
70+
description: 'Array of song previews (default behavior and most query modes)',
7571
},
7672
{
7773
type : 'object',
7874
additionalProperties: { type: 'number' },
79-
description:
80-
'Category name to song count mapping (only when q=categories without id)',
81-
example: { pop: 42, rock: 38, electronic: 15 },
75+
description : 'Category name to song count mapping (only when q=categories without id)',
76+
example : { pop: 42, rock: 38, electronic: 15 },
8277
},
8378
],
8479
},
8580
})
8681
@ApiResponse({
87-
status: 400,
88-
description:
89-
'Bad Request. Invalid query parameters (e.g., invalid count for random query).',
82+
status : 400,
83+
description: 'Bad Request. Invalid query parameters (e.g., invalid count for random query).',
9084
})
9185
public async getSongList(
9286
@Query() query: PageQueryDTO,
@@ -149,13 +143,8 @@ export class SongController {
149143
}
150144

151145
@Get('/search')
152-
@ApiOperation({
153-
summary: 'Search songs by keywords with pagination and sorting',
154-
})
155-
public async searchSongs(
156-
@Query() query: PageQueryDTO,
157-
@Query('q') q: string,
158-
): Promise<PageDto<SongPreviewDto>> {
146+
@ApiOperation({ summary: 'Search songs by keywords with pagination and sorting', })
147+
public async searchSongs( @Query() query: PageQueryDTO, @Query('q') q: string,): Promise<PageDto<SongPreviewDto>> {
159148
const data = await this.songService.searchSongs(query, q ?? '');
160149
return new PageDto<SongPreviewDto>({
161150
content: data,
@@ -167,21 +156,15 @@ export class SongController {
167156

168157
@Get('/:id')
169158
@ApiOperation({ summary: 'Get song info by ID' })
170-
public async getSong(
171-
@Param('id') id: string,
172-
@GetRequestToken() user: UserDocument | null,
173-
): Promise<SongViewDto> {
159+
public async getSong( @Param('id') id: string, @GetRequestToken() user: UserDocument | null,): Promise<SongViewDto> {
174160
return await this.songService.getSong(id, user);
175161
}
176162

177163
@Get('/:id/edit')
178164
@ApiOperation({ summary: 'Get song info for editing by ID' })
179165
@UseGuards(AuthGuard('jwt-refresh'))
180166
@ApiBearerAuth()
181-
public async getEditSong(
182-
@Param('id') id: string,
183-
@GetRequestToken() user: UserDocument | null,
184-
): Promise<UploadSongDto> {
167+
public async getEditSong( @Param('id') id: string, @GetRequestToken() user: UserDocument | null,): Promise<UploadSongDto> {
185168
user = validateUser(user);
186169
return await this.songService.getSongEdit(id, user);
187170
}
@@ -191,11 +174,7 @@ export class SongController {
191174
@ApiBearerAuth()
192175
@ApiOperation({ summary: 'Edit song info by ID' })
193176
@ApiBody({ description: 'Upload Song', type: UploadSongResponseDto, })
194-
public async patchSong(
195-
@Param('id') id: string,
196-
@Req() req: RawBodyRequest<Request>,
197-
@GetRequestToken() user: UserDocument | null,
198-
): Promise<UploadSongResponseDto> {
177+
public async patchSong( @Param('id') id: string, @Req() req: RawBodyRequest<Request>, @GetRequestToken() user: UserDocument | null,): Promise<UploadSongResponseDto> {
199178
user = validateUser(user);
200179
//TODO: Fix this weird type casting and raw body access
201180
const body = req.body as unknown as UploadSongDto;
@@ -204,12 +183,7 @@ export class SongController {
204183

205184
@Get('/:id/download')
206185
@ApiOperation({ summary: 'Get song .nbs file' })
207-
public async getSongFile(
208-
@Param('id') id: string,
209-
@Query('src') src: string,
210-
@GetRequestToken() user: UserDocument | null,
211-
@Res() res: Response,
212-
): Promise<void> {
186+
public async getSongFile( @Param('id') id: string, @Query('src') src: string, @GetRequestToken() user: UserDocument | null, @Res() res: Response,): Promise<void> {
213187
user = validateUser(user);
214188

215189
// TODO: no longer used
@@ -225,11 +199,7 @@ export class SongController {
225199

226200
@Get('/:id/open')
227201
@ApiOperation({ summary: 'Get song .nbs file' })
228-
public async getSongOpenUrl(
229-
@Param('id') id: string,
230-
@GetRequestToken() user: UserDocument | null,
231-
@Headers('src') src: string,
232-
): Promise<string> {
202+
public async getSongOpenUrl( @Param('id') id: string, @GetRequestToken() user: UserDocument | null, @Headers('src') src: string,): Promise<string> {
233203
if (src != 'downloadButton') {
234204
throw new UnauthorizedException('Invalid source');
235205
}
@@ -248,10 +218,7 @@ export class SongController {
248218
@UseGuards(AuthGuard('jwt-refresh'))
249219
@ApiBearerAuth()
250220
@ApiOperation({ summary: 'Delete a song' })
251-
public async deleteSong(
252-
@Param('id') id: string,
253-
@GetRequestToken() user: UserDocument | null,
254-
): Promise<void> {
221+
public async deleteSong( @Param('id') id: string, @GetRequestToken() user: UserDocument | null,): Promise<void> {
255222
user = validateUser(user);
256223
await this.songService.deleteSong(id, user);
257224
}
@@ -263,11 +230,7 @@ export class SongController {
263230
@ApiBody({ description: 'Upload Song', type: UploadSongResponseDto,})
264231
@UseInterceptors(FileInterceptor('file', SongController.multerConfig))
265232
@ApiOperation({ summary: 'Upload a .nbs file and send the song data, creating a new song',})
266-
public async createSong(
267-
@UploadedFile() file: Express.Multer.File,
268-
@Body() body: UploadSongDto,
269-
@GetRequestToken() user: UserDocument | null,
270-
): Promise<UploadSongResponseDto> {
233+
public async createSong( @UploadedFile() file: Express.Multer.File, @Body() body: UploadSongDto, @GetRequestToken() user: UserDocument | null,): Promise<UploadSongResponseDto> {
271234
user = validateUser(user);
272235
return await this.songService.uploadSong({ body, file, user });
273236
}

0 commit comments

Comments
 (0)