jp.ms.common.modules 1.0.42 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/rooms-manager.service.d.ts +61 -0
- package/dist/common/rooms-manager.service.js +148 -0
- package/dist/common/rooms-manager.service.js.map +1 -0
- package/dist/common/tournament-rooms-manager.service.d.ts +10 -0
- package/dist/common/tournament-rooms-manager.service.js +66 -0
- package/dist/common/tournament-rooms-manager.service.js.map +1 -0
- package/dist/dto/app-table/card.dto.d.ts +1 -0
- package/dist/dto/app-table/card.dto.js +11 -0
- package/dist/dto/app-table/card.dto.js.map +1 -1
- package/dist/dto/app-table/player.dto.d.ts +1 -0
- package/dist/dto/app-table/player.dto.js +11 -0
- package/dist/dto/app-table/player.dto.js.map +1 -1
- package/dist/exception/global-exception-filter.d.ts +2 -0
- package/dist/exception/global-exception-filter.js +23 -17
- package/dist/exception/global-exception-filter.js.map +1 -1
- package/dist/modules/anti-freeze-system/anti-freeze-system.service.d.ts +3 -0
- package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +33 -23
- package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
- package/dist/modules/base-achievements/base-achievements.constants.d.ts +1 -0
- package/dist/modules/base-achievements/base-achievements.constants.js +5 -0
- package/dist/modules/base-achievements/base-achievements.constants.js.map +1 -0
- package/dist/modules/base-achievements/base-achievements.interfaces.d.ts +15 -0
- package/dist/modules/base-achievements/base-achievements.interfaces.js +3 -0
- package/dist/modules/base-achievements/base-achievements.interfaces.js.map +1 -0
- package/dist/modules/base-achievements/base-achievements.module.d.ts +29 -7
- package/dist/modules/base-achievements/base-achievements.module.js +166 -76
- package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
- package/dist/modules/base-achievements/index.d.ts +2 -0
- package/dist/modules/base-achievements/index.js +3 -1
- package/dist/modules/base-achievements/index.js.map +1 -1
- package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +3 -3
- package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -1
- package/dist/modules/events/events.gateway.js +4 -2
- package/dist/modules/events/events.gateway.js.map +1 -1
- package/dist/modules/index.d.ts +1 -1
- package/dist/modules/index.js +4 -3
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/main/main.controller.d.ts +0 -1
- package/dist/modules/main/main.controller.js +0 -12
- package/dist/modules/main/main.controller.js.map +1 -1
- package/dist/modules/main/main.service.d.ts +0 -1
- package/dist/modules/main/main.service.js +8 -19
- package/dist/modules/main/main.service.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +1 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +12 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +6 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +18 -2
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.d.ts +1 -0
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js +6 -0
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js.map +1 -1
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.d.ts +8 -5
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js +61 -38
- package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js.map +1 -1
- package/dist/modules/menu/menu-screen.view.d.ts +2 -1
- package/dist/modules/menu/menu-screen.view.js +9 -3
- package/dist/modules/menu/menu-screen.view.js.map +1 -1
- package/dist/modules/menu/menu.interfaces.d.ts +1 -0
- package/dist/modules/menu/menu.service.js +1 -1
- package/dist/modules/menu/menu.service.js.map +1 -1
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.d.ts +1 -0
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js +6 -0
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js.map +1 -1
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.d.ts +8 -5
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js +58 -35
- package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js.map +1 -1
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.interfaces.d.ts +1 -0
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js +6 -0
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js.map +1 -1
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +8 -5
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +56 -20
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/views/achievement-snackbar.view.d.ts +8 -0
- package/dist/views/achievement-snackbar.view.js +26 -0
- package/dist/views/achievement-snackbar.view.js.map +1 -0
- package/dist/views/base-table.view.d.ts +13 -0
- package/dist/views/base-table.view.js +34 -0
- package/dist/views/base-table.view.js.map +1 -0
- package/dist/views/index.d.ts +3 -0
- package/dist/views/index.js +7 -1
- package/dist/views/index.js.map +1 -1
- package/dist/views/level-up-snackbar.view.d.ts +7 -0
- package/dist/views/level-up-snackbar.view.js +26 -0
- package/dist/views/level-up-snackbar.view.js.map +1 -0
- package/package.json +5 -5
- package/src/common/rooms-manager.service.ts +250 -0
- package/src/common/tournament-rooms-manager.service.ts +121 -0
- package/src/dto/app-table/card.dto.ts +9 -0
- package/src/dto/app-table/player.dto.ts +9 -0
- package/src/exception/global-exception-filter.ts +34 -20
- package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +48 -35
- package/src/modules/base-achievements/base-achievements.constants.ts +1 -0
- package/src/modules/base-achievements/base-achievements.interfaces.ts +22 -0
- package/src/modules/base-achievements/base-achievements.module.ts +347 -234
- package/src/modules/base-achievements/index.ts +5 -0
- package/src/modules/event-bus/events-bus.app.subscribe.service.ts +5 -5
- package/src/modules/events/events.gateway.ts +4 -2
- package/src/modules/index.ts +6 -1
- package/src/modules/main/main.controller.ts +1 -22
- package/src/modules/main/main.service.ts +7 -34
- package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +13 -0
- package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +9 -1
- package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +33 -0
- package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.ts +1 -0
- package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.ts +12 -0
- package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.ts +92 -42
- package/src/modules/menu/menu-screen.view.ts +9 -2
- package/src/modules/menu/menu.interfaces.ts +1 -0
- package/src/modules/menu/menu.service.ts +1 -0
- package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.ts +1 -0
- package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.ts +12 -0
- package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts +92 -41
- package/src/modules/simple-rooms-manager/simple-rooms-manager.interfaces.ts +1 -0
- package/src/modules/simple-rooms-manager/simple-rooms-manager.module.ts +12 -0
- package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +81 -33
- package/src/views/achievement-snackbar.view.ts +38 -0
- package/src/views/base-table.view.ts +57 -0
- package/src/views/index.ts +3 -0
- package/src/views/level-up-snackbar.view.ts +38 -0
- package/dist/utils/date.d.ts +0 -2
- package/dist/utils/date.js +0 -11
- package/dist/utils/date.js.map +0 -1
- package/dist/utils/game-table-result.d.ts +0 -39
- package/dist/utils/game-table-result.js +0 -102
- package/dist/utils/game-table-result.js.map +0 -1
- package/src/utils/date.ts +0 -7
- package/src/utils/game-table-result.ts +0 -129
package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Inject, Injectable } from '@nestjs/common';
|
|
|
2
2
|
import {
|
|
3
3
|
BaseGameEvent,
|
|
4
4
|
GameMaster,
|
|
5
|
+
GamePlayerMovedOnTheTableEvent,
|
|
5
6
|
GameTableFinishedEvent,
|
|
6
7
|
GameTournamentCancelledEvent,
|
|
7
8
|
GameTournamentFinishedEvent,
|
|
@@ -17,9 +18,11 @@ import {
|
|
|
17
18
|
TournamentRoomConfig,
|
|
18
19
|
} from 'jp.ms.common.engine';
|
|
19
20
|
import {
|
|
21
|
+
ActivityLogRepository,
|
|
20
22
|
GameResultRepository,
|
|
21
23
|
OneTableTournamentRoomDocument,
|
|
22
24
|
OneTableTournamentRoomsRepository,
|
|
25
|
+
RatingRepository,
|
|
23
26
|
UsersRepository,
|
|
24
27
|
} from 'jp.db.schemas';
|
|
25
28
|
import { InjectConnection } from '@nestjs/mongoose';
|
|
@@ -27,32 +30,34 @@ import { Connection } from 'mongoose';
|
|
|
27
30
|
|
|
28
31
|
import { JpLoggerService } from '../logger/jp-logger.service';
|
|
29
32
|
import {
|
|
30
|
-
|
|
31
|
-
saveTournamentResult,
|
|
32
|
-
} from '../../utils/game-table-result';
|
|
33
|
-
import {
|
|
33
|
+
EventsBusAppSubscribeService,
|
|
34
34
|
EventsBusMainTablesSubscribeService,
|
|
35
35
|
EventsBusOneTableTournamentSubscribeService,
|
|
36
36
|
} from '../event-bus';
|
|
37
|
+
import { TournamentRoomsManagerService } from '../../common/tournament-rooms-manager.service';
|
|
37
38
|
|
|
38
39
|
import { ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './one-table-tournament-rooms-manager.constants';
|
|
39
40
|
import { OneTableTournamentRoomsFactoryOptions } from './one-table-tournament-rooms-manager.interfaces';
|
|
40
41
|
|
|
41
42
|
@Injectable()
|
|
42
|
-
export class OneTableTournamentRoomsManagerService {
|
|
43
|
+
export class OneTableTournamentRoomsManagerService extends TournamentRoomsManagerService {
|
|
43
44
|
private readonly rooms: Map<string, OneTableTournamentRoom>;
|
|
44
45
|
|
|
45
46
|
constructor(
|
|
46
47
|
private readonly tournamentRepository: OneTableTournamentRoomsRepository,
|
|
47
48
|
private readonly usersRepository: UsersRepository,
|
|
48
49
|
private readonly gameResultRepository: GameResultRepository,
|
|
50
|
+
private readonly ratingRepository: RatingRepository,
|
|
51
|
+
private readonly activityLogRepository: ActivityLogRepository,
|
|
49
52
|
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
50
53
|
private readonly eventsBusOneTableTournamentSubscribeService: EventsBusOneTableTournamentSubscribeService,
|
|
54
|
+
private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
|
|
51
55
|
@Inject(ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS)
|
|
52
56
|
private readonly options: OneTableTournamentRoomsFactoryOptions,
|
|
53
57
|
@InjectConnection() private readonly connection: Connection,
|
|
54
58
|
@Inject() private readonly logger: JpLoggerService,
|
|
55
59
|
) {
|
|
60
|
+
super();
|
|
56
61
|
this.rooms = new Map<string, OneTableTournamentRoom>();
|
|
57
62
|
}
|
|
58
63
|
|
|
@@ -117,6 +122,7 @@ export class OneTableTournamentRoomsManagerService {
|
|
|
117
122
|
rulesType: tournamentDocument.rulesType,
|
|
118
123
|
deckType: tournamentDocument.deckType,
|
|
119
124
|
tableSize: tournamentDocument.tableSize,
|
|
125
|
+
tableType: tournamentDocument.tableType,
|
|
120
126
|
bet: tournamentDocument.bet,
|
|
121
127
|
ticketPrice: tournamentDocument.ticketPrice,
|
|
122
128
|
title: tournamentDocument.title,
|
|
@@ -140,41 +146,67 @@ export class OneTableTournamentRoomsManagerService {
|
|
|
140
146
|
private handleRoomEvent = (event: BaseGameEvent) => {
|
|
141
147
|
this.logger.log(event.toLog());
|
|
142
148
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
149
|
+
switch (event.constructor.name) {
|
|
150
|
+
case GameTableFinishedEvent.name: {
|
|
151
|
+
void this.handleRoomTableGameFinished(
|
|
152
|
+
event as GameTableFinishedEvent,
|
|
153
|
+
this.connection,
|
|
154
|
+
this.gameResultRepository,
|
|
155
|
+
this.usersRepository,
|
|
156
|
+
this.activityLogRepository,
|
|
157
|
+
this.eventsBusAppSubscribeService,
|
|
158
|
+
this.options.levelUpBonus,
|
|
159
|
+
);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case GamePlayerMovedOnTheTableEvent.name: {
|
|
163
|
+
this.handleRoomTableGamePlayerMoved(
|
|
164
|
+
event as GamePlayerMovedOnTheTableEvent,
|
|
165
|
+
this.eventsBusAppSubscribeService,
|
|
166
|
+
);
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case GameTournamentStartedEvent.name: {
|
|
170
|
+
void this.handleTournamentRoomStarted(
|
|
171
|
+
event as GameTournamentStartedEvent,
|
|
172
|
+
);
|
|
173
|
+
this.handleRoomStatusUpdated(event as GameTournamentStartedEvent);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case GameTournamentCancelledEvent.name: {
|
|
177
|
+
void this.handleTournamentRoomCancelled(
|
|
178
|
+
event as GameTournamentCancelledEvent,
|
|
179
|
+
);
|
|
180
|
+
this.handleRoomStatusUpdated(event as GameTournamentCancelledEvent);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case GameTournamentFinishedEvent.name: {
|
|
184
|
+
void this.handleTournamentRoomFinished(
|
|
185
|
+
event as GameTournamentFinishedEvent,
|
|
186
|
+
);
|
|
187
|
+
this.handleRoomStatusUpdated(event as GameTournamentFinishedEvent);
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case GameTournamentPlayerJoinedTheTournamentEvent.name:
|
|
191
|
+
case GameTournamentPlayerLeavedTheTournamentEvent.name:
|
|
192
|
+
case GameTournamentWaitedEvent.name: {
|
|
193
|
+
this.handleRoomStatusUpdated(
|
|
194
|
+
event as
|
|
195
|
+
| GameTournamentPlayerJoinedTheTournamentEvent
|
|
196
|
+
| GameTournamentPlayerLeavedTheTournamentEvent
|
|
197
|
+
| GameTournamentCancelledEvent,
|
|
198
|
+
);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
162
201
|
}
|
|
163
202
|
};
|
|
164
203
|
|
|
165
|
-
private
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this.connection,
|
|
169
|
-
this.gameResultRepository,
|
|
170
|
-
this.usersRepository,
|
|
171
|
-
false,
|
|
172
|
-
);
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
private handleTournamentRoomStarted = async (master: TournamentMaster) => {
|
|
204
|
+
private handleTournamentRoomStarted = async (
|
|
205
|
+
event: GameTournamentStartedEvent,
|
|
206
|
+
) => {
|
|
176
207
|
const session = await this.connection.startSession();
|
|
177
208
|
session.startTransaction();
|
|
209
|
+
const master = event.room.getRoomMaster<TournamentMaster>();
|
|
178
210
|
|
|
179
211
|
try {
|
|
180
212
|
await this.tournamentRepository.startTournament(
|
|
@@ -200,21 +232,40 @@ export class OneTableTournamentRoomsManagerService {
|
|
|
200
232
|
}
|
|
201
233
|
};
|
|
202
234
|
|
|
203
|
-
private handleTournamentRoomCancelled = async (
|
|
235
|
+
private handleTournamentRoomCancelled = async (
|
|
236
|
+
event: GameTournamentCancelledEvent,
|
|
237
|
+
) => {
|
|
238
|
+
const master = event.room.getRoomMaster<TournamentMaster>();
|
|
204
239
|
await this.tournamentRepository.cancelTournament(master.getTournamentId());
|
|
205
240
|
};
|
|
206
241
|
|
|
207
|
-
private handleTournamentRoomFinished = async (
|
|
208
|
-
|
|
242
|
+
private handleTournamentRoomFinished = async (
|
|
243
|
+
event: GameTournamentFinishedEvent,
|
|
244
|
+
) => {
|
|
245
|
+
const master = event.room.getRoomMaster<TournamentMaster>();
|
|
246
|
+
|
|
247
|
+
await this.saveTournamentResult(
|
|
209
248
|
master,
|
|
210
249
|
this.connection,
|
|
211
250
|
this.tournamentRepository,
|
|
212
251
|
this.usersRepository,
|
|
252
|
+
this.ratingRepository,
|
|
213
253
|
);
|
|
214
254
|
};
|
|
215
255
|
|
|
216
|
-
private handleRoomStatusUpdated = (
|
|
217
|
-
|
|
218
|
-
|
|
256
|
+
private handleRoomStatusUpdated = (
|
|
257
|
+
event:
|
|
258
|
+
| GameTournamentPlayerJoinedTheTournamentEvent
|
|
259
|
+
| GameTournamentPlayerLeavedTheTournamentEvent
|
|
260
|
+
| GameTournamentCancelledEvent
|
|
261
|
+
| GameTournamentWaitedEvent
|
|
262
|
+
| GameTournamentStartedEvent
|
|
263
|
+
| GameTournamentFinishedEvent,
|
|
264
|
+
) => {
|
|
265
|
+
const updateEvent = new RoomUpdateStateEvent(event.gameType, event.roomId);
|
|
266
|
+
this.eventsBusMainTablesSubscribeService.pushNewRoomState(updateEvent);
|
|
267
|
+
this.eventsBusOneTableTournamentSubscribeService.pushNewRoomState(
|
|
268
|
+
updateEvent,
|
|
269
|
+
);
|
|
219
270
|
};
|
|
220
271
|
}
|
|
@@ -10,6 +10,12 @@ import {
|
|
|
10
10
|
GameResult,
|
|
11
11
|
GameResultSchema,
|
|
12
12
|
GameResultRepository,
|
|
13
|
+
Rating,
|
|
14
|
+
RatingSchema,
|
|
15
|
+
RatingRepository,
|
|
16
|
+
ActivityLog,
|
|
17
|
+
ActivityLogSchema,
|
|
18
|
+
ActivityLogRepository,
|
|
13
19
|
} from 'jp.db.schemas';
|
|
14
20
|
|
|
15
21
|
import { SimpleRoomsManagerService } from './simple-rooms-manager.service';
|
|
@@ -26,11 +32,17 @@ import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
|
|
|
26
32
|
MongooseModule.forFeature([
|
|
27
33
|
{ name: GameResult.name, schema: GameResultSchema },
|
|
28
34
|
]),
|
|
35
|
+
MongooseModule.forFeature([{ name: Rating.name, schema: RatingSchema }]),
|
|
36
|
+
MongooseModule.forFeature([
|
|
37
|
+
{ name: ActivityLog.name, schema: ActivityLogSchema },
|
|
38
|
+
]),
|
|
29
39
|
],
|
|
30
40
|
providers: [
|
|
31
41
|
SimpleRoomsRepository,
|
|
32
42
|
UsersRepository,
|
|
33
43
|
GameResultRepository,
|
|
44
|
+
RatingRepository,
|
|
45
|
+
ActivityLogRepository,
|
|
34
46
|
SimpleRoomsManagerService,
|
|
35
47
|
],
|
|
36
48
|
exports: [SimpleRoomsManagerService],
|
|
@@ -8,35 +8,41 @@ import {
|
|
|
8
8
|
SimpleRoom,
|
|
9
9
|
GameRoomConfig,
|
|
10
10
|
RoomUpdateStateEvent,
|
|
11
|
-
UserWonTheGameAppEvent,
|
|
12
11
|
GameTableFinishedEvent,
|
|
13
12
|
GamePlayerEnteredTheTableEvent,
|
|
14
13
|
GamePlayerExitedTheTableEvent,
|
|
15
14
|
LocalService,
|
|
15
|
+
GamePlayerMovedOnTheTableEvent,
|
|
16
16
|
} from 'jp.ms.common.engine';
|
|
17
17
|
import {
|
|
18
|
+
ActivityLogRepository,
|
|
18
19
|
GameResultRepository,
|
|
20
|
+
RatingRepository,
|
|
19
21
|
SimpleRoomDocument,
|
|
20
22
|
SimpleRoomsRepository,
|
|
21
23
|
UsersRepository,
|
|
22
24
|
} from 'jp.db.schemas';
|
|
23
25
|
|
|
24
26
|
import { JpLoggerService } from '../logger/jp-logger.service';
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
import {
|
|
28
|
+
EventsBusMainTablesSubscribeService,
|
|
29
|
+
EventsBusAppSubscribeService,
|
|
30
|
+
} from '../event-bus';
|
|
31
|
+
import { RoomsManagerService } from '../../common/rooms-manager.service';
|
|
28
32
|
|
|
29
33
|
import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
|
|
30
34
|
import { SimpleRoomsFactoryOptions } from './simple-rooms-manager.interfaces';
|
|
31
35
|
|
|
32
36
|
@Injectable()
|
|
33
|
-
export class SimpleRoomsManagerService {
|
|
37
|
+
export class SimpleRoomsManagerService extends RoomsManagerService {
|
|
34
38
|
private readonly rooms: Map<string, SimpleRoom>;
|
|
35
39
|
|
|
36
40
|
constructor(
|
|
37
41
|
private readonly roomsRepository: SimpleRoomsRepository,
|
|
38
42
|
private readonly usersRepository: UsersRepository,
|
|
39
43
|
private readonly gameResultRepository: GameResultRepository,
|
|
44
|
+
private readonly ratingRepository: RatingRepository,
|
|
45
|
+
private readonly activityLogRepository: ActivityLogRepository,
|
|
40
46
|
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
41
47
|
private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
|
|
42
48
|
@Inject(SIMPLE_ROOMS_MANAGER_OPTIONS)
|
|
@@ -44,6 +50,7 @@ export class SimpleRoomsManagerService {
|
|
|
44
50
|
@InjectConnection() private readonly connection: Connection,
|
|
45
51
|
@Inject() private readonly logger: JpLoggerService,
|
|
46
52
|
) {
|
|
53
|
+
super();
|
|
47
54
|
this.rooms = new Map<string, SimpleRoom>();
|
|
48
55
|
}
|
|
49
56
|
|
|
@@ -87,11 +94,11 @@ export class SimpleRoomsManagerService {
|
|
|
87
94
|
}
|
|
88
95
|
|
|
89
96
|
/*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
1. Сначала ищем стол в котором один игрок
|
|
98
|
+
2. Далее ищем стол за которым есть игроки и свободные места
|
|
99
|
+
3. Отправляем на стол для быстрой игры если там есть места
|
|
100
|
+
4. Наконец создаем стол для быстрой игры и отправляем туда
|
|
101
|
+
*/
|
|
95
102
|
getFreeFastGameRoom(): GameMaster | undefined {
|
|
96
103
|
if (this.getRooms().some((item) => item.isTechBreak())) {
|
|
97
104
|
return;
|
|
@@ -139,6 +146,7 @@ export class SimpleRoomsManagerService {
|
|
|
139
146
|
rulesType: room.rulesType,
|
|
140
147
|
deckType: room.deckType,
|
|
141
148
|
tableSize: room.tableSize,
|
|
149
|
+
tableType: room.tableType,
|
|
142
150
|
bet: room.bet,
|
|
143
151
|
ticketPrice: room.ticketPrice / 2,
|
|
144
152
|
title: room.title,
|
|
@@ -157,34 +165,74 @@ export class SimpleRoomsManagerService {
|
|
|
157
165
|
private handleRoomEvent = (event: BaseGameEvent) => {
|
|
158
166
|
this.logger.log(event.toLog());
|
|
159
167
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
switch (event.constructor.name) {
|
|
169
|
+
case GameTableFinishedEvent.name: {
|
|
170
|
+
void this.handleRoomTableGameFinished(event as GameTableFinishedEvent);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case GamePlayerMovedOnTheTableEvent.name: {
|
|
174
|
+
this.handleRoomTableGamePlayerMoved(
|
|
175
|
+
event as GamePlayerMovedOnTheTableEvent,
|
|
176
|
+
this.eventsBusAppSubscribeService,
|
|
177
|
+
);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
case GamePlayerEnteredTheTableEvent.name:
|
|
181
|
+
case GamePlayerExitedTheTableEvent.name: {
|
|
182
|
+
this.handleRoomStatusUpdated(
|
|
183
|
+
event as
|
|
184
|
+
GamePlayerExitedTheTableEvent | GamePlayerEnteredTheTableEvent,
|
|
185
|
+
);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
169
188
|
}
|
|
170
189
|
};
|
|
171
190
|
|
|
172
|
-
private handleRoomTableGameFinished = async (
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
true,
|
|
179
|
-
);
|
|
191
|
+
private handleRoomTableGameFinished = async (
|
|
192
|
+
event: GameTableFinishedEvent,
|
|
193
|
+
) => {
|
|
194
|
+
await this.saveGameTableReuslts(event);
|
|
195
|
+
this.processGameFinishEvent(event, this.eventsBusAppSubscribeService);
|
|
196
|
+
};
|
|
180
197
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
198
|
+
private handleRoomStatusUpdated = (
|
|
199
|
+
event: GamePlayerEnteredTheTableEvent | GamePlayerExitedTheTableEvent,
|
|
200
|
+
) => {
|
|
201
|
+
this.eventsBusMainTablesSubscribeService.pushNewRoomState(
|
|
202
|
+
new RoomUpdateStateEvent(event.gameType, event.roomId),
|
|
184
203
|
);
|
|
185
204
|
};
|
|
186
205
|
|
|
187
|
-
private
|
|
188
|
-
this.
|
|
189
|
-
|
|
206
|
+
private async saveGameTableReuslts(event: GameTableFinishedEvent) {
|
|
207
|
+
const session = await this.connection.startSession();
|
|
208
|
+
session.startTransaction();
|
|
209
|
+
const master = event.master;
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
await this.gameResultRepository.createGameResult(
|
|
213
|
+
this.getGameTableResults(master),
|
|
214
|
+
);
|
|
215
|
+
const userGameResults = this.getUserGameResults(master, false);
|
|
216
|
+
await this.usersRepository.saveGameResult(userGameResults);
|
|
217
|
+
await this.ratingRepository.addBulkPlayerRating(
|
|
218
|
+
this.getUserRatings(master),
|
|
219
|
+
);
|
|
220
|
+
await this.activityLogRepository.addGameTableResult(
|
|
221
|
+
this.getGameTableActivityLogResult(master),
|
|
222
|
+
);
|
|
223
|
+
this.commitExperience(
|
|
224
|
+
master,
|
|
225
|
+
userGameResults,
|
|
226
|
+
event,
|
|
227
|
+
this.eventsBusAppSubscribeService,
|
|
228
|
+
this.options.levelUpBonus,
|
|
229
|
+
);
|
|
230
|
+
await session.commitTransaction();
|
|
231
|
+
} catch (error) {
|
|
232
|
+
await session.abortTransaction();
|
|
233
|
+
throw error;
|
|
234
|
+
} finally {
|
|
235
|
+
await session.endSession();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
190
238
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import {
|
|
3
|
+
AppScreenSnackbarIdEnum,
|
|
4
|
+
ILocaleService,
|
|
5
|
+
AchievementSnackbarComponent,
|
|
6
|
+
UniversalScreenSnackbarView,
|
|
7
|
+
} from 'jp.common.models';
|
|
8
|
+
import { formatChips } from 'jp.common.utils';
|
|
9
|
+
import { Achievement } from 'jp.db.schemas';
|
|
10
|
+
|
|
11
|
+
export class AchievementSnackbarView extends UniversalScreenSnackbarView {
|
|
12
|
+
private achievement: Achievement;
|
|
13
|
+
private bonus: number;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
localeService: ILocaleService,
|
|
17
|
+
lang: string,
|
|
18
|
+
achievement: Achievement,
|
|
19
|
+
bonus: number,
|
|
20
|
+
) {
|
|
21
|
+
super(localeService, lang);
|
|
22
|
+
this.achievement = achievement;
|
|
23
|
+
this.bonus = bonus;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
build() {
|
|
27
|
+
return new AchievementSnackbarComponent(
|
|
28
|
+
`${AppScreenSnackbarIdEnum.SNACKBAR_ACHIEVEMENT}_${randomUUID()}`,
|
|
29
|
+
this.localeService.t('common.server.message.code.4011', {
|
|
30
|
+
lang: this.lang,
|
|
31
|
+
args: {
|
|
32
|
+
TITLE: this.getDbResource(this.achievement.title),
|
|
33
|
+
PRIZE: formatChips(this.bonus, this.lang, true),
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IAppScreenDialog,
|
|
3
|
+
ILocaleService,
|
|
4
|
+
UniversalView,
|
|
5
|
+
} from 'jp.common.models';
|
|
6
|
+
import { GameMaster, GamePlayer } from 'jp.ms.common.engine';
|
|
7
|
+
|
|
8
|
+
export abstract class BaseTableView extends UniversalView {
|
|
9
|
+
abstract getConfirmExitDialog(): IAppScreenDialog | undefined;
|
|
10
|
+
|
|
11
|
+
protected ROUND_TABLE_TARGET_SEAT_MAPPING: Record<number, number> = {
|
|
12
|
+
2: 1,
|
|
13
|
+
3: 2,
|
|
14
|
+
4: 2,
|
|
15
|
+
5: 2,
|
|
16
|
+
6: 3,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
protected readonly gameMaster: GameMaster;
|
|
20
|
+
protected readonly gamePlayer: GamePlayer;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
localeService: ILocaleService,
|
|
24
|
+
lang: string,
|
|
25
|
+
gameMaster: GameMaster,
|
|
26
|
+
gamePlayer: GamePlayer,
|
|
27
|
+
) {
|
|
28
|
+
super(localeService, lang);
|
|
29
|
+
this.gameMaster = gameMaster;
|
|
30
|
+
this.gamePlayer = gamePlayer;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
protected getGameMaster<T extends GameMaster>(): T {
|
|
34
|
+
return this.gameMaster as T;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
protected getGamePlayer<T extends GamePlayer>(): T {
|
|
38
|
+
return this.gamePlayer as T;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
protected getSeatShift(): number {
|
|
42
|
+
return (
|
|
43
|
+
this.gameMaster.table.seats.getShift(
|
|
44
|
+
this.gamePlayer.seatNumber,
|
|
45
|
+
this.getTargetSeat(),
|
|
46
|
+
) ?? 0
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
protected getTargetSeat(): number {
|
|
51
|
+
return (
|
|
52
|
+
this.ROUND_TABLE_TARGET_SEAT_MAPPING[
|
|
53
|
+
this.gameMaster.room.getTableSize()
|
|
54
|
+
] ?? 0
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
package/src/views/index.ts
CHANGED
|
@@ -3,3 +3,6 @@ export { SimpleRoomConfirmExitDialogView } from './simple-room-conifrm-exit-dial
|
|
|
3
3
|
export { ManyTablesTournamentConfirmExitDialogView } from './many-tables-tournament-conifrm-exit-dialog.view';
|
|
4
4
|
export { OneTableTournamentConfirmExitDialogView } from './one-table-tournament-conifrm-exit-dialog.view';
|
|
5
5
|
export { TableSummaryView } from './table-summary.view';
|
|
6
|
+
export { AchievementSnackbarView } from './achievement-snackbar.view';
|
|
7
|
+
export { LevelUpSnackbarView } from './level-up-snackbar.view';
|
|
8
|
+
export { BaseTableView } from './base-table.view';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import {
|
|
3
|
+
AppScreenSnackbarIdEnum,
|
|
4
|
+
IAppScreenSnackbar,
|
|
5
|
+
ILocaleService,
|
|
6
|
+
LevelUpSnackbarComponent,
|
|
7
|
+
UniversalScreenSnackbarView,
|
|
8
|
+
} from 'jp.common.models';
|
|
9
|
+
import { formatChips } from 'jp.common.utils';
|
|
10
|
+
|
|
11
|
+
export class LevelUpSnackbarView extends UniversalScreenSnackbarView {
|
|
12
|
+
private newLevel: number;
|
|
13
|
+
private bonus: number;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
localeService: ILocaleService,
|
|
17
|
+
lang: string,
|
|
18
|
+
newLevel: number,
|
|
19
|
+
bonus: number,
|
|
20
|
+
) {
|
|
21
|
+
super(localeService, lang);
|
|
22
|
+
this.newLevel = newLevel;
|
|
23
|
+
this.bonus = bonus;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
build(): IAppScreenSnackbar {
|
|
27
|
+
return new LevelUpSnackbarComponent(
|
|
28
|
+
`${AppScreenSnackbarIdEnum.SNACKBAR_LEVEL_UP}_${randomUUID()}`,
|
|
29
|
+
this.localeService.t('common.server.message.code.4010', {
|
|
30
|
+
lang: this.lang,
|
|
31
|
+
args: {
|
|
32
|
+
NEW_LEVEL: this.newLevel.toString(),
|
|
33
|
+
BONUS: formatChips(this.bonus, this.lang, true),
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
package/dist/utils/date.d.ts
DELETED
package/dist/utils/date.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getHours = getHours;
|
|
4
|
-
exports.getMinutes = getMinutes;
|
|
5
|
-
function getHours(timeStr) {
|
|
6
|
-
return parseInt(timeStr.substring(0, 2), 10);
|
|
7
|
-
}
|
|
8
|
-
function getMinutes(timeStr) {
|
|
9
|
-
return parseInt(timeStr.substring(3, 5), 10);
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=date.js.map
|
package/dist/utils/date.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAED,gCAEC;AAND,SAAgB,QAAQ,CAAC,OAAe;IACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Connection } from 'mongoose';
|
|
2
|
-
import { GameResultRepository, OneTableTournamentRoomsRepository, ManyTablesTournamentRoomsRepository, UsersRepository } from 'jp.db.schemas';
|
|
3
|
-
import { GameMaster, TournamentMaster } from 'jp.ms.common.engine';
|
|
4
|
-
export declare function getGameTableResults(master: GameMaster): {
|
|
5
|
-
gameType: string;
|
|
6
|
-
gameId: string;
|
|
7
|
-
roomId: string;
|
|
8
|
-
date: Date;
|
|
9
|
-
pot: number;
|
|
10
|
-
players: {
|
|
11
|
-
userId: string;
|
|
12
|
-
fullName: string;
|
|
13
|
-
profit: number;
|
|
14
|
-
figures: never[];
|
|
15
|
-
}[];
|
|
16
|
-
winners: {
|
|
17
|
-
userId: string;
|
|
18
|
-
fullName: string;
|
|
19
|
-
profit: number;
|
|
20
|
-
figures: never[];
|
|
21
|
-
}[];
|
|
22
|
-
history: {
|
|
23
|
-
userId: string;
|
|
24
|
-
fullName: string;
|
|
25
|
-
date: Date;
|
|
26
|
-
actionType: string;
|
|
27
|
-
state: string;
|
|
28
|
-
turnNumber: number;
|
|
29
|
-
moveAction: string | undefined;
|
|
30
|
-
moveData: import("jp.ms.common.engine").BaseMoveData | undefined;
|
|
31
|
-
figures: {
|
|
32
|
-
figureId: number;
|
|
33
|
-
type: string;
|
|
34
|
-
name: string;
|
|
35
|
-
}[];
|
|
36
|
-
}[];
|
|
37
|
-
};
|
|
38
|
-
export declare function saveGameTablesResult(master: GameMaster, connection: Connection, gameResultRepository: GameResultRepository, usersRepository: UsersRepository, saveNewBalance: boolean): Promise<void>;
|
|
39
|
-
export declare function saveTournamentResult(master: TournamentMaster, connection: Connection, tournamentRepository: OneTableTournamentRoomsRepository | ManyTablesTournamentRoomsRepository, usersRepository: UsersRepository): Promise<void>;
|