Skip to content

Commit f9b2bd9

Browse files
authored
Merge pull request #323 from boostcampwm-2024/dev
[Deploy] 6주차 3차 배포
2 parents 7ef5c53 + d85da21 commit f9b2bd9

File tree

118 files changed

+1348
-5147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+1348
-5147
lines changed

backend/src/app.module.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import { TypeOrmModule } from "@nestjs/typeorm";
1010

1111
import "dotenv/config";
1212

13-
import { createDataSource, typeOrmConfig } from "./config/typeorm.config";
13+
import { createDataSource, typeOrmConfig } from "./infra/typeorm/typeorm.config";
1414
import { QuestionListModule } from "./question-list/question-list.module";
1515
import { RedisOmModule } from "@moozeh/nestjs-redis-om";
1616
import { SigServerModule } from "@/signaling-server/sig-server.module";
17+
import { redisConfig } from "@/infra/infra.config";
1718

1819
@Module({
1920
imports: [
@@ -22,7 +23,7 @@ import { SigServerModule } from "@/signaling-server/sig-server.module";
2223
dataSourceFactory: async () => await createDataSource(), // 분리된 데이터소스 생성 함수 사용
2324
}),
2425
RedisOmModule.forRoot({
25-
url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`,
26+
url: `redis://${redisConfig.host}:${redisConfig.port}`,
2627
}),
2728
RoomModule,
2829
AuthModule,

backend/src/auth/auth.controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from "@nestjs/common";
1010
import { AuthGuard } from "@nestjs/passport";
1111
import { Response } from "express";
12-
import { setCookieConfig } from "@/config/cookie.config";
12+
import { setCookieConfig } from "@/infra/cookie/cookie.config";
1313
import { JwtPayload, JwtTokenPair } from "./jwt/jwt.decorator";
1414
import { IJwtPayload, IJwtToken, IJwtTokenPair } from "./jwt/jwt.model";
1515

@@ -40,7 +40,7 @@ export class AuthController {
4040
@Res({ passthrough: true }) res: Response,
4141
@JwtTokenPair() pair: IJwtTokenPair
4242
) {
43-
if (!pair) throw new UnauthorizedException();
43+
if (!pair) throw new InternalServerErrorException();
4444
return this.setCookie(res, pair.accessToken);
4545
}
4646

backend/src/auth/jwt/jwt.service.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ export class JwtService {
6060

6161
private async createRefreshToken(id: number): Promise<IJwtToken> {
6262
const refreshToken = this.parent.sign(
63-
{},
63+
{
64+
exp: Date.now() + JwtService.REFRESH_TOKEN_TIME,
65+
},
6466
{
6567
secret: process.env.JWT_REFRESH_TOKEN_SECRET_KEY,
6668
audience: String(id),

backend/src/auth/jwt/strategy/refresh-token.strategy.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable } from "@nestjs/common";
1+
import { Injectable, UnauthorizedException } from "@nestjs/common";
22
import { PassportStrategy } from "@nestjs/passport";
33
import { Strategy } from "passport-jwt";
44
import { Request } from "express";
@@ -21,6 +21,9 @@ export class RefreshTokenStrategy extends PassportStrategy(Strategy, "jwt-refres
2121

2222
async validate(req: Request, payload: any) {
2323
const { aud, exp } = payload;
24+
25+
if (!exp || exp < Date.now()) throw new UnauthorizedException();
26+
2427
const refreshToken = req.cookies["refreshToken"];
2528

2629
const accessToken = await this.jwtService.getNewAccessToken(parseInt(aud), refreshToken);
File renamed without changes.

backend/src/config/redis.config.ts renamed to backend/src/infra/infra.config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import "dotenv/config";
22

3+
export const gatewayConfig = {
4+
cors: {
5+
origin: process.env.DOMAIN || "*",
6+
},
7+
};
8+
39
export const redisConfig = {
410
host: process.env.REDIS_HOST,
511
port: parseInt(process.env.REDIS_PORT),

backend/src/infra/infra.module.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Global, Module } from "@nestjs/common";
2+
import { InfraService } from "@/infra/infra.service";
3+
import { WebsocketRepository } from "@/infra/websocket/websocket.repository";
4+
import { RedisOmModule } from "@moozeh/nestjs-redis-om";
5+
import { RoomEntity } from "@/room/room.entity";
6+
import { WebsocketEntity } from "@/infra/websocket/websocket.entity";
7+
8+
@Global()
9+
@Module({
10+
imports: [RedisOmModule.forFeature([RoomEntity, WebsocketEntity])],
11+
providers: [InfraService, WebsocketRepository],
12+
exports: [InfraService, WebsocketRepository],
13+
})
14+
export class InfraModule {}

backend/src/infra/infra.service.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { Injectable } from "@nestjs/common";
2+
import { Server, Socket } from "socket.io";
3+
import Redis from "ioredis";
4+
import { redisClient } from "@/infra/redis/redis-client";
5+
import { WebsocketRepository } from "@/infra/websocket/websocket.repository";
6+
7+
@Injectable()
8+
export class InfraService {
9+
private server: Server;
10+
private readonly redisClient: Redis = redisClient;
11+
12+
constructor(private readonly websocketRepository: WebsocketRepository) {}
13+
14+
public setServer(server: Server) {
15+
this.server = server;
16+
}
17+
18+
public async createSocketMetadata(socket: Socket) {
19+
return this.websocketRepository.createWebsocketMetadata(socket);
20+
}
21+
22+
public async getSocketMetadata(socket: Socket) {
23+
return this.websocketRepository.getWebsocketMetadataById(socket.id);
24+
}
25+
26+
public async removeSocketMetadata(socket: Socket) {
27+
await this.websocketRepository.removeWebsocketMetadata(socket);
28+
}
29+
30+
public async joinRoom(socket: Socket, roomId: string) {
31+
const entity = await this.websocketRepository.getWebsocketMetadataById(socket.id);
32+
entity.joinedRooms.push(roomId);
33+
await this.websocketRepository.updateWebsocketMetadata(socket.id, entity);
34+
socket.join(roomId);
35+
}
36+
37+
public getRedisClient() {
38+
return this.redisClient;
39+
}
40+
41+
public getServer() {
42+
return this.server;
43+
}
44+
45+
public getSocket(socketId: string) {
46+
return this.server.sockets.sockets.get(socketId);
47+
}
48+
49+
public emitToRoom(roomId: string, event: string, data?: any) {
50+
this.server.to(roomId).emit(event, data);
51+
}
52+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Redis from "ioredis";
2+
3+
export const redisClient = new Redis();
File renamed without changes.

0 commit comments

Comments
 (0)