Skip to content

Commit 2144aa7

Browse files
committed
feat:chats.gateway 생성 후 이벤트 리스닝하기
1 parent 7f7cec8 commit 2144aa7

9 files changed

+198
-3
lines changed

Diff for: package.json

+3
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
"@nestjs/jwt": "^10.2.0",
2727
"@nestjs/mapped-types": "*",
2828
"@nestjs/platform-express": "^10.0.0",
29+
"@nestjs/platform-socket.io": "^10.3.3",
2930
"@nestjs/serve-static": "^4.0.1",
3031
"@nestjs/swagger": "^7.3.0",
3132
"@nestjs/typeorm": "^10.0.2",
33+
"@nestjs/websockets": "^10.3.3",
3234
"@types/multer": "^1.4.11",
3335
"@types/uuid": "^9.0.8",
3436
"bcrypt": "^5.1.1",
@@ -38,6 +40,7 @@
3840
"pg": "^8.11.3",
3941
"reflect-metadata": "^0.1.13",
4042
"rxjs": "^7.8.1",
43+
"socket.io": "^4.7.4",
4144
"swagger-ui-express": "^5.0.0",
4245
"typeorm": "^0.3.20",
4346
"uuid": "^9.0.1"

Diff for: src/app.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { ServeStaticModule } from '@nestjs/serve-static';
2828
import { PUBLIC_FOLDER_PATH } from './common/const/path.const';
2929
import { ImageModel } from './common/entity/image.entity';
3030
import { LogMiddleware } from './common/middleware/log-middleware';
31+
import { ChatsModule } from './chats/chats.module';
3132

3233
@Module({
3334
imports: [
@@ -60,6 +61,7 @@ import { LogMiddleware } from './common/middleware/log-middleware';
6061
}),
6162
AuthModule,
6263
CommonModule,
64+
ChatsModule,
6365

6466
],
6567
controllers: [AppController],

Diff for: src/chats/chats.controller.spec.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { ChatsController } from './chats.controller';
3+
import { ChatsService } from './chats.service';
4+
5+
describe('ChatsController', () => {
6+
let controller: ChatsController;
7+
8+
beforeEach(async () => {
9+
const module: TestingModule = await Test.createTestingModule({
10+
controllers: [ChatsController],
11+
providers: [ChatsService],
12+
}).compile();
13+
14+
controller = module.get<ChatsController>(ChatsController);
15+
});
16+
17+
it('should be defined', () => {
18+
expect(controller).toBeDefined();
19+
});
20+
});

Diff for: src/chats/chats.controller.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Controller } from '@nestjs/common';
2+
import { ChatsService } from './chats.service';
3+
4+
@Controller('chats')
5+
export class ChatsController {
6+
constructor(private readonly chatsService: ChatsService) {}
7+
}

Diff for: src/chats/chats.gateway.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { MessageBody, OnGatewayConnection, SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';
2+
import { Socket } from 'socket.io';
3+
4+
@WebSocketGateway({
5+
// ws://localhost:3000/chats
6+
namespace: 'chats',
7+
8+
})
9+
export class ChatsGateway implements OnGatewayConnection {
10+
handleConnection(socket: Socket) {
11+
console.log(`on connect called: ${socket.id}`);
12+
}
13+
// socket.on('send_message', (message) => { console.log(message); });
14+
@SubscribeMessage('send_message')
15+
sendMessage(
16+
@MessageBody() data: string
17+
){
18+
console.log(data);
19+
}
20+
}

Diff for: src/chats/chats.module.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Module } from '@nestjs/common';
2+
import { ChatsService } from './chats.service';
3+
import { ChatsController } from './chats.controller';
4+
import { ChatsGateway } from './chats.gateway';
5+
6+
@Module({
7+
controllers: [ChatsController],
8+
providers: [ChatsGateway,ChatsService],
9+
})
10+
export class ChatsModule {}

Diff for: src/chats/chats.service.spec.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { ChatsService } from './chats.service';
3+
4+
describe('ChatsService', () => {
5+
let service: ChatsService;
6+
7+
beforeEach(async () => {
8+
const module: TestingModule = await Test.createTestingModule({
9+
providers: [ChatsService],
10+
}).compile();
11+
12+
service = module.get<ChatsService>(ChatsService);
13+
});
14+
15+
it('should be defined', () => {
16+
expect(service).toBeDefined();
17+
});
18+
});

Diff for: src/chats/chats.service.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { Injectable } from '@nestjs/common';
2+
3+
@Injectable()
4+
export class ChatsService {}

Diff for: yarn.lock

+114-3
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,14 @@
811811
multer "1.4.4-lts.1"
812812
tslib "2.6.2"
813813

814+
"@nestjs/platform-socket.io@^10.3.3":
815+
version "10.3.3"
816+
resolved "https://registry.yarnpkg.com/@nestjs/platform-socket.io/-/platform-socket.io-10.3.3.tgz#eeb0e4d868bdb607de6648efd08e20753a264030"
817+
integrity sha512-QqM9BMTdYPvXOqx3oWrv130HOtc2krPvfgqgDsPWkBLfR+TssrA5QDaTW8HSjEQAfmugvHwhEAAU4+yXRl6tKg==
818+
dependencies:
819+
socket.io "4.7.4"
820+
tslib "2.6.2"
821+
814822
"@nestjs/schematics@^10.0.0", "@nestjs/schematics@^10.0.1":
815823
version "10.1.0"
816824
resolved "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.0.tgz"
@@ -855,6 +863,15 @@
855863
dependencies:
856864
uuid "9.0.1"
857865

866+
"@nestjs/websockets@^10.3.3":
867+
version "10.3.3"
868+
resolved "https://registry.yarnpkg.com/@nestjs/websockets/-/websockets-10.3.3.tgz#fcb5420027c5968f042e4862bbf85fbe540a4a44"
869+
integrity sha512-cR5cB0bLS87vd0iu7Nud/4x2EH1Vs0aIgwGWd0eH/5SAw0rrDNU81PiOde+rnMXETbxvSVfOZuLRyn7/WQtGUg==
870+
dependencies:
871+
iterare "1.2.1"
872+
object-hash "3.0.0"
873+
tslib "2.6.2"
874+
858875
"@nodelib/[email protected]":
859876
version "2.1.5"
860877
resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -914,6 +931,11 @@
914931
dependencies:
915932
"@sinonjs/commons" "^3.0.0"
916933

934+
"@socket.io/component-emitter@~3.1.0":
935+
version "3.1.0"
936+
resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
937+
integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
938+
917939
"@sqltools/formatter@^1.2.5":
918940
version "1.2.5"
919941
resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12"
@@ -987,11 +1009,23 @@
9871009
dependencies:
9881010
"@types/node" "*"
9891011

1012+
"@types/cookie@^0.4.1":
1013+
version "0.4.1"
1014+
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
1015+
integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
1016+
9901017
"@types/cookiejar@^2.1.5":
9911018
version "2.1.5"
9921019
resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz"
9931020
integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==
9941021

1022+
"@types/cors@^2.8.12":
1023+
version "2.8.17"
1024+
resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b"
1025+
integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==
1026+
dependencies:
1027+
"@types/node" "*"
1028+
9951029
"@types/eslint-scope@^3.7.3":
9961030
version "3.7.7"
9971031
resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz"
@@ -1108,6 +1142,13 @@
11081142
dependencies:
11091143
undici-types "~5.26.4"
11101144

1145+
"@types/node@>=10.0.0":
1146+
version "20.11.19"
1147+
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195"
1148+
integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==
1149+
dependencies:
1150+
undici-types "~5.26.4"
1151+
11111152
"@types/qs@*":
11121153
version "6.9.11"
11131154
resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz"
@@ -1411,7 +1452,7 @@ abbrev@1:
14111452
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
14121453
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
14131454

1414-
accepts@~1.3.8:
1455+
accepts@~1.3.4, accepts@~1.3.8:
14151456
version "1.3.8"
14161457
resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
14171458
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -1672,6 +1713,11 @@ base64-js@^1.3.1:
16721713
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
16731714
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
16741715

1716+
[email protected], base64id@~2.0.0:
1717+
version "2.0.0"
1718+
resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
1719+
integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
1720+
16751721
bcrypt@^5.1.1:
16761722
version "5.1.1"
16771723
resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.1.tgz#0f732c6dcb4e12e5b70a25e326a72965879ba6e2"
@@ -2120,6 +2166,11 @@ [email protected]:
21202166
resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz"
21212167
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
21222168

2169+
cookie@~0.4.1:
2170+
version "0.4.2"
2171+
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
2172+
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
2173+
21232174
cookiejar@^2.1.4:
21242175
version "2.1.4"
21252176
resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz"
@@ -2130,7 +2181,7 @@ core-util-is@^1.0.3, core-util-is@~1.0.0:
21302181
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
21312182
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
21322183

2133-
2184+
[email protected], cors@~2.8.5:
21342185
version "2.8.5"
21352186
resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"
21362187
integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
@@ -2187,7 +2238,7 @@ [email protected]:
21872238
dependencies:
21882239
ms "2.0.0"
21892240

2190-
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
2241+
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4:
21912242
version "4.3.4"
21922243
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
21932244
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -2340,6 +2391,27 @@ encodeurl@~1.0.2:
23402391
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
23412392
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
23422393

2394+
engine.io-parser@~5.2.1:
2395+
version "5.2.2"
2396+
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49"
2397+
integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==
2398+
2399+
engine.io@~6.5.2:
2400+
version "6.5.4"
2401+
resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc"
2402+
integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==
2403+
dependencies:
2404+
"@types/cookie" "^0.4.1"
2405+
"@types/cors" "^2.8.12"
2406+
"@types/node" ">=10.0.0"
2407+
accepts "~1.3.4"
2408+
base64id "2.0.0"
2409+
cookie "~0.4.1"
2410+
cors "~2.8.5"
2411+
debug "~4.3.1"
2412+
engine.io-parser "~5.2.1"
2413+
ws "~8.11.0"
2414+
23432415
enhanced-resolve@^5.0.0, enhanced-resolve@^5.15.0, enhanced-resolve@^5.7.0:
23442416
version "5.15.0"
23452417
resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz"
@@ -4205,6 +4277,11 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1:
42054277
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
42064278
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
42074279

4280+
4281+
version "3.0.0"
4282+
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
4283+
integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
4284+
42084285
object-inspect@^1.9.0:
42094286
version "1.13.1"
42104287
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz"
@@ -4900,6 +4977,35 @@ slash@^3.0.0:
49004977
resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
49014978
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
49024979

4980+
socket.io-adapter@~2.5.2:
4981+
version "2.5.3"
4982+
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.3.tgz#bdbc4beab18c3b33c8377a8f540b0b6f808977da"
4983+
integrity sha512-OtkQtynXUM0JSEwmI6YlEJ5hU9kpDUVjda0hx8QVffKhqum53xhynH8eTCyjHSfI8FiJnyfK8I3Dlc88Jr81Dg==
4984+
dependencies:
4985+
debug "~4.3.4"
4986+
ws "~8.11.0"
4987+
4988+
socket.io-parser@~4.2.4:
4989+
version "4.2.4"
4990+
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
4991+
integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
4992+
dependencies:
4993+
"@socket.io/component-emitter" "~3.1.0"
4994+
debug "~4.3.1"
4995+
4996+
[email protected], socket.io@^4.7.4:
4997+
version "4.7.4"
4998+
resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.4.tgz#2401a2d7101e4bdc64da80b140d5d8b6a8c7738b"
4999+
integrity sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==
5000+
dependencies:
5001+
accepts "~1.3.4"
5002+
base64id "~2.0.0"
5003+
cors "~2.8.5"
5004+
debug "~4.3.2"
5005+
engine.io "~6.5.2"
5006+
socket.io-adapter "~2.5.2"
5007+
socket.io-parser "~4.2.4"
5008+
49035009
49045010
version "0.5.13"
49055011
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz"
@@ -5548,6 +5654,11 @@ write-file-atomic@^4.0.2:
55485654
imurmurhash "^0.1.4"
55495655
signal-exit "^3.0.7"
55505656

5657+
ws@~8.11.0:
5658+
version "8.11.0"
5659+
resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
5660+
integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
5661+
55515662
xtend@^4.0.0:
55525663
version "4.0.2"
55535664
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"

0 commit comments

Comments
 (0)