chore : remove class-transformer

This commit is contained in:
2024-12-29 23:49:33 +01:00
parent 11a62a694e
commit 895bd2fdac
10 changed files with 57 additions and 33 deletions
+1 -1
Submodule events updated: 49829c8017...e9d5d8d909
+3 -2
View File
@@ -18,7 +18,6 @@
"@nestjs/swagger": "^7.3.1", "@nestjs/swagger": "^7.3.1",
"@nestjs/typeorm": "^10.0.2", "@nestjs/typeorm": "^10.0.2",
"@types/ranjs": "^1.22.7", "@types/ranjs": "^1.22.7",
"class-transformer": "^0.5.1",
"connect-redis": "^8.0.1", "connect-redis": "^8.0.1",
"express-session": "^1.18.0", "express-session": "^1.18.0",
"pg": "^8.13.1", "pg": "^8.13.1",
@@ -4749,7 +4748,9 @@
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
"integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==",
"license": "MIT" "license": "MIT",
"optional": true,
"peer": true
}, },
"node_modules/clean-stack": { "node_modules/clean-stack": {
"version": "2.2.0", "version": "2.2.0",
-1
View File
@@ -32,7 +32,6 @@
"@nestjs/swagger": "^7.3.1", "@nestjs/swagger": "^7.3.1",
"@nestjs/typeorm": "^10.0.2", "@nestjs/typeorm": "^10.0.2",
"@types/ranjs": "^1.22.7", "@types/ranjs": "^1.22.7",
"class-transformer": "^0.5.1",
"connect-redis": "^8.0.1", "connect-redis": "^8.0.1",
"express-session": "^1.18.0", "express-session": "^1.18.0",
"pg": "^8.13.1", "pg": "^8.13.1",
+9 -6
View File
@@ -8,10 +8,12 @@ import { User } from 'src/users/entities/user.entity';
import { Player } from '../entities/player.entity'; import { Player } from '../entities/player.entity';
import { randomUUID } from 'node:crypto'; import { randomUUID } from 'node:crypto';
import { import {
GameCreateEvent, LobbyCreateEvent,
GameDeleteEvent, LobbyDeleteEvent,
GameJoinEvent, LobbyJoinEvent,
} from 'events/lobby.events'; } from 'events/lobby.events';
import { GameResponseDTO } from 'events/dto/gameresponse.dto';
import { GameDeleteEvent, GameJoinEvent } from 'events/game.events';
@Injectable() @Injectable()
export class LobbyService { export class LobbyService {
@@ -28,7 +30,8 @@ export class LobbyService {
createdGame.seed = randomUUID(); createdGame.seed = randomUUID();
await this.gameRepository.save(createdGame); await this.gameRepository.save(createdGame);
await this.joinGame(createdGame, owner); await this.joinGame(createdGame, owner);
this.eventEmitter.emit('sse.lobby', new GameCreateEvent(createdGame)); const g = new GameResponseDTO(createdGame);
this.eventEmitter.emit('sse.lobby', new LobbyCreateEvent(g));
return createdGame; return createdGame;
} }
@@ -37,7 +40,7 @@ export class LobbyService {
player.user = user; player.user = user;
player.game = game; player.game = game;
this.eventEmitter.emit('sse.lobby', new GameJoinEvent(player, game)); this.eventEmitter.emit('sse.lobby', new LobbyJoinEvent(player, game));
this.eventEmitter.emit('sse.game.' + game.id, new GameJoinEvent(player)); this.eventEmitter.emit('sse.game.' + game.id, new GameJoinEvent(player));
await this.playerRepository.save(player); await this.playerRepository.save(player);
} }
@@ -59,7 +62,7 @@ export class LobbyService {
} }
async remove(game: Game) { async remove(game: Game) {
this.eventEmitter.emit('sse.lobby', new GameDeleteEvent(game.id)); this.eventEmitter.emit('sse.lobby', new LobbyDeleteEvent(game.id));
this.eventEmitter.emit('sse.game.' + game.id, new GameDeleteEvent()); this.eventEmitter.emit('sse.game.' + game.id, new GameDeleteEvent());
await this.gameRepository.remove(game); await this.gameRepository.remove(game);
} }
+2 -9
View File
@@ -2,7 +2,6 @@ import { NestFactory, Reflector } from '@nestjs/core';
import * as session from 'express-session'; import * as session from 'express-session';
import { AppModule } from './app.module'; import { AppModule } from './app.module';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { ClassSerializerInterceptor, INestApplication } from '@nestjs/common';
import { RedisStore } from 'connect-redis'; import { RedisStore } from 'connect-redis';
import { createClient } from 'redis'; import { createClient } from 'redis';
@@ -31,13 +30,7 @@ async function bootstrap() {
}), }),
); );
app.useGlobalInterceptors(
new ClassSerializerInterceptor(app.get(Reflector), {
// strategy: 'excludeAll', 👈 we'll talk about this later
excludeExtraneousValues: true,
}),
);
await app.listen(8765); await app.listen(8765);
} }
bootstrap();
void bootstrap();
+2
View File
@@ -25,6 +25,8 @@ export class AuthGuard implements CanActivate {
HttpStatus.UNAUTHORIZED, HttpStatus.UNAUTHORIZED,
); );
} }
request.user = user;
return true; return true;
} }
} }
+6 -3
View File
@@ -1,17 +1,20 @@
import { import {
createParamDecorator, createParamDecorator,
ExecutionContext,
HttpException, HttpException,
HttpStatus, HttpStatus,
} from '@nestjs/common'; } from '@nestjs/common';
import { Request } from 'express';
export const GetUser = createParamDecorator( export const GetUser = createParamDecorator(
(data: unknown, req: Record<string, string>) => { (data: unknown, ctx: ExecutionContext) => {
if (!req.user) { const request = ctx.switchToHttp().getRequest<Request>();
if (!request.user) {
throw new HttpException( throw new HttpException(
'You are not authentified', 'You are not authentified',
HttpStatus.UNAUTHORIZED, HttpStatus.UNAUTHORIZED,
); );
} }
return req.user; return request.user;
}, },
); );
+12 -6
View File
@@ -44,7 +44,7 @@ export class WordController {
); );
} }
@Delete() @Delete(':id')
@ApiOperation({ summary: 'Delete a word' }) @ApiOperation({ summary: 'Delete a word' })
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
async delete(@Param('id') id: number) { async delete(@Param('id') id: number) {
@@ -78,19 +78,25 @@ export class WordController {
return (await this.wordService.list()).map((w) => new WordResponseDTO(w)); return (await this.wordService.list()).map((w) => new WordResponseDTO(w));
} }
@Put('/enable/:id') @Put(':id/enable')
@ApiOperation({ summary: 'Enable a word' }) @ApiOperation({ summary: 'Enable a word' })
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
async enable(@Param('id', ParseIntPipe, WordPipe) word: Word) { async enable(
@Param('id', ParseIntPipe) _id: string,
@Param('id', WordPipe) word: Word,
) {
await this.wordService.enable(word); await this.wordService.enable(word);
return new WordResponseDTO(word); return new WordResponseDTO(word);
} }
@Put('/disable/:id') @Put(':id/disable')
@ApiOperation({ summary: 'Disable a word' }) @ApiOperation({ summary: 'Disable a word' })
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
async disable(@Param('id', ParseIntPipe, WordPipe) word: Word) { async disable(
await this.wordService.enable(word); @Param('id', ParseIntPipe) _id: string,
@Param('id', WordPipe) word: Word,
) {
await this.wordService.disable(word);
return new WordResponseDTO(word); return new WordResponseDTO(word);
} }
} }
+16 -5
View File
@@ -1,4 +1,9 @@
import { Injectable } from '@nestjs/common'; import {
HttpCode,
HttpException,
HttpStatus,
Injectable,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { Word } from '../entities/word.entity'; import { Word } from '../entities/word.entity';
@@ -10,6 +15,7 @@ import {
WordDisableEvent, WordDisableEvent,
WordEnableEvent, WordEnableEvent,
} from '../../../events/word.events'; } from '../../../events/word.events';
import { HttpErrorByCode } from '@nestjs/common/utils/http-error-by-code.util';
@Injectable() @Injectable()
export class WordService { export class WordService {
@@ -24,17 +30,22 @@ export class WordService {
} }
async delete(word: Word) { async delete(word: Word) {
const wordId = word.id;
await this.wordRepository.remove(word); await this.wordRepository.remove(word);
this.eventEmitter.emit(this.sse_prefix, new WordDeleteEvent(word.id)); this.eventEmitter.emit(this.sse_prefix, new WordDeleteEvent(wordId));
} }
async create(value: string, owner: User) { async create(value: string, owner: User) {
const word = this.wordRepository.create(); const word = this.wordRepository.create();
word.owner = owner; word.owner = owner;
word.value = value; word.value = value;
await this.wordRepository.save(word); try {
this.eventEmitter.emit(this.sse_prefix, new WordCreateEvent(word)); await this.wordRepository.save(word);
return word; this.eventEmitter.emit(this.sse_prefix, new WordCreateEvent(word));
return word;
} catch {
throw new HttpException('Word already exists', HttpStatus.CONFLICT);
}
} }
async listActive() { async listActive() {
+6
View File
@@ -10,3 +10,9 @@ declare module 'express-session' {
}; };
} }
} }
declare module 'express' {
interface Request extends Request {
user: User;
}
}