Template
chore : remove class-transformer
This commit is contained in:
+1
-1
Submodule events updated: 49829c8017...e9d5d8d909
Generated
+3
-2
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
@@ -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();
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ export class AuthGuard implements CanActivate {
|
|||||||
HttpStatus.UNAUTHORIZED,
|
HttpStatus.UNAUTHORIZED,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
request.user = user;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Vendored
+6
@@ -10,3 +10,9 @@ declare module 'express-session' {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module 'express' {
|
||||||
|
interface Request extends Request {
|
||||||
|
user: User;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user