1
1
import { type FastifyInstance } from 'fastify/types/instance' ;
2
+ import { type ServerToClientEventParameter } from 'shared/build/index.js' ;
2
3
import { type Server , type Socket , Server as SocketServer } from 'socket.io' ;
3
4
4
5
import { type GeolocationCacheSocketService } from '~/libs/packages/geolocation-cache/geolocation-cache.js' ;
@@ -10,11 +11,13 @@ import { type UserService } from '~/packages/users/user.service';
10
11
11
12
import {
12
13
ClientToServerEvent ,
14
+ RoomPrefix ,
13
15
SocketError ,
14
16
SocketRoom ,
15
17
} from './libs/enums/enums.js' ;
16
18
import {
17
19
type ClientToServerEventParameter ,
20
+ type OrderResponseDto ,
18
21
ServerToClientEvent ,
19
22
} from './libs/types/types.js' ;
20
23
@@ -69,6 +72,54 @@ class SocketService {
69
72
socket . on ( ClientToServerEvent . LEAVE_HOME_ROOM , ( ) =>
70
73
socket . leave ( SocketRoom . HOME_ROOM ) ,
71
74
) ;
75
+ socket . on (
76
+ ClientToServerEvent . SUBSCRIBE_ORDER_UPDATES ,
77
+ async ( {
78
+ orderId,
79
+ } : FirstParameter <
80
+ ClientToServerEventParameter [ typeof ClientToServerEvent . SUBSCRIBE_ORDER_UPDATES ]
81
+ > ) => {
82
+ await socket . join ( `${ RoomPrefix . ORDER } ${ orderId } ` ) ;
83
+ logger . info (
84
+ `${ socket . id } connected to ${ RoomPrefix . ORDER } ${ orderId } ` ,
85
+ ) ;
86
+ } ,
87
+ ) ;
88
+ socket . on (
89
+ ClientToServerEvent . UNSUBSCRIBE_ORDER_UPDATES ,
90
+ async ( {
91
+ orderId,
92
+ } : FirstParameter <
93
+ ClientToServerEventParameter [ typeof ClientToServerEvent . UNSUBSCRIBE_ORDER_UPDATES ]
94
+ > ) => {
95
+ await socket . leave ( `${ RoomPrefix . ORDER } ${ orderId } ` ) ;
96
+ logger . info ( `${ socket . id } left ${ RoomPrefix . ORDER } ${ orderId } ` ) ;
97
+ } ,
98
+ ) ;
99
+ socket . on (
100
+ ClientToServerEvent . SUBSCRIBE_TRUCK_UPDATES ,
101
+ async ( {
102
+ truckId,
103
+ } : FirstParameter <
104
+ ClientToServerEventParameter [ typeof ClientToServerEvent . SUBSCRIBE_TRUCK_UPDATES ]
105
+ > ) => {
106
+ await socket . join ( `${ RoomPrefix . TRUCK } ${ truckId } ` ) ;
107
+ logger . info (
108
+ `${ socket . id } connected to ${ RoomPrefix . TRUCK } ${ truckId } ` ,
109
+ ) ;
110
+ } ,
111
+ ) ;
112
+ socket . on (
113
+ ClientToServerEvent . UNSUBSCRIBE_TRUCK_UPDATES ,
114
+ async ( {
115
+ truckId,
116
+ } : FirstParameter <
117
+ ClientToServerEventParameter [ typeof ClientToServerEvent . UNSUBSCRIBE_TRUCK_UPDATES ]
118
+ > ) => {
119
+ await socket . leave ( `${ RoomPrefix . TRUCK } ${ truckId } ` ) ;
120
+ logger . info ( `${ socket . id } left ${ RoomPrefix . TRUCK } ${ truckId } ` ) ;
121
+ } ,
122
+ ) ;
72
123
73
124
socket . on (
74
125
ClientToServerEvent . AUTHORIZE_DRIVER ,
@@ -94,6 +145,26 @@ class SocketService {
94
145
) ;
95
146
} ) ;
96
147
}
148
+
149
+ public notifyOrderUpdate (
150
+ id : OrderResponseDto [ 'id' ] ,
151
+ order : OrderResponseDto ,
152
+ ) : void {
153
+ this . io
154
+ ?. to ( `${ RoomPrefix . ORDER } ${ id } ` )
155
+ . emit ( ServerToClientEvent . ORDER_UPDATED , order ) ;
156
+ }
157
+
158
+ public notifyCustomerForTruckLocationUpdate (
159
+ truckId : number ,
160
+ truckLocation : Parameters <
161
+ ServerToClientEventParameter [ typeof ServerToClientEvent . TRUCK_LOCATION_UPDATED ]
162
+ > [ 0 ] ,
163
+ ) : void {
164
+ this . io
165
+ ?. to ( `${ RoomPrefix . TRUCK } ${ truckId } ` )
166
+ . emit ( ServerToClientEvent . TRUCK_LOCATION_UPDATED , truckLocation ) ;
167
+ }
97
168
}
98
169
99
170
export { SocketService } ;
0 commit comments