Files
back-ts/src/games/games.controller.ts
T
2024-06-06 19:50:29 -04:00

67 lines
1.6 KiB
TypeScript

import {
Controller,
Get,
Post,
Param,
Delete,
UseGuards,
Session,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { GamesService } from './games.service';
import { AuthGuard } from './guards/auth.guard';
import { ApiOperation, ApiResponse } from '@nestjs/swagger';
import { DatabaseObjectDto } from './dto/database-object.dto';
@Controller('games')
export class GamesController {
constructor(private readonly gamesService: GamesService) {}
@Post()
@ApiOperation({ summary: 'Create game' })
@ApiResponse({
status: 201,
description: 'Game successfully created.',
type: DatabaseObjectDto,
})
@ApiResponse({
status: 400,
description: 'You can only create one game at a time',
})
@ApiResponse({ status: 403, description: 'Forbidden.' })
@UseGuards(AuthGuard)
async create(@Session() session: Record<string, any>) {
const games = await this.gamesService.findByOwner(session.user._id);
if (games.length > 0) {
throw new HttpException(
'You can only create one game at a time',
HttpStatus.BAD_REQUEST,
);
}
return this.gamesService.create(session.user);
}
@Get()
@ApiOperation({ summary: 'List all games' })
findAll() {
const games = this.gamesService.findAll();
return games;
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.gamesService.findById(id);
}
// @Patch(':id')
// update(@Param('id') id: string, @Body() updateGameDto: UpdateGameDto) {
// return this.gamesService.update(+id, updateGameDto);
// }
@Delete(':id')
remove(@Param('id') id: string) {
return this.gamesService.remove(+id);
}
}