jp.ms.common.modules 1.0.43 → 1.0.45

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.
Files changed (102) hide show
  1. package/dist/common/rooms-manager.service.d.ts +61 -0
  2. package/dist/common/rooms-manager.service.js +148 -0
  3. package/dist/common/rooms-manager.service.js.map +1 -0
  4. package/dist/common/tournament-rooms-manager.service.d.ts +10 -0
  5. package/dist/common/tournament-rooms-manager.service.js +66 -0
  6. package/dist/common/tournament-rooms-manager.service.js.map +1 -0
  7. package/dist/dto/games/fool/fool-table.dto.d.ts +0 -1
  8. package/dist/dto/games/fool/fool-table.dto.js +0 -10
  9. package/dist/dto/games/fool/fool-table.dto.js.map +1 -1
  10. package/dist/exception/global-exception-filter.d.ts +2 -0
  11. package/dist/exception/global-exception-filter.js +23 -17
  12. package/dist/exception/global-exception-filter.js.map +1 -1
  13. package/dist/modules/anti-freeze-system/anti-freeze-system.service.d.ts +3 -0
  14. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +33 -23
  15. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
  16. package/dist/modules/base-achievements/base-achievements.constants.d.ts +1 -0
  17. package/dist/modules/base-achievements/base-achievements.constants.js +5 -0
  18. package/dist/modules/base-achievements/base-achievements.constants.js.map +1 -0
  19. package/dist/modules/base-achievements/base-achievements.interfaces.d.ts +15 -0
  20. package/dist/modules/base-achievements/base-achievements.interfaces.js +3 -0
  21. package/dist/modules/base-achievements/base-achievements.interfaces.js.map +1 -0
  22. package/dist/modules/base-achievements/base-achievements.module.d.ts +29 -7
  23. package/dist/modules/base-achievements/base-achievements.module.js +166 -76
  24. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
  25. package/dist/modules/base-achievements/index.d.ts +2 -0
  26. package/dist/modules/base-achievements/index.js +3 -1
  27. package/dist/modules/base-achievements/index.js.map +1 -1
  28. package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +3 -3
  29. package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -1
  30. package/dist/modules/index.d.ts +1 -1
  31. package/dist/modules/index.js +4 -3
  32. package/dist/modules/index.js.map +1 -1
  33. package/dist/modules/main/main.service.js +8 -6
  34. package/dist/modules/main/main.service.js.map +1 -1
  35. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +1 -1
  36. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  37. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.d.ts +1 -0
  38. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js +4 -0
  39. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js.map +1 -1
  40. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.d.ts +7 -5
  41. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js +58 -38
  42. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js.map +1 -1
  43. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.d.ts +1 -0
  44. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js +4 -0
  45. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js.map +1 -1
  46. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.d.ts +7 -5
  47. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js +55 -35
  48. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js.map +1 -1
  49. package/dist/modules/simple-rooms-manager/simple-rooms-manager.interfaces.d.ts +1 -0
  50. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js +4 -0
  51. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js.map +1 -1
  52. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +7 -5
  53. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +53 -20
  54. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -1
  56. package/dist/views/achievement-snackbar.view.d.ts +8 -0
  57. package/dist/views/achievement-snackbar.view.js +26 -0
  58. package/dist/views/achievement-snackbar.view.js.map +1 -0
  59. package/dist/views/base-table.view.d.ts +13 -0
  60. package/dist/views/base-table.view.js +34 -0
  61. package/dist/views/base-table.view.js.map +1 -0
  62. package/dist/views/index.d.ts +3 -0
  63. package/dist/views/index.js +7 -1
  64. package/dist/views/index.js.map +1 -1
  65. package/dist/views/level-up-snackbar.view.d.ts +7 -0
  66. package/dist/views/level-up-snackbar.view.js +26 -0
  67. package/dist/views/level-up-snackbar.view.js.map +1 -0
  68. package/package.json +5 -5
  69. package/src/common/rooms-manager.service.ts +250 -0
  70. package/src/common/tournament-rooms-manager.service.ts +121 -0
  71. package/src/dto/games/fool/fool-table.dto.ts +0 -8
  72. package/src/exception/global-exception-filter.ts +34 -20
  73. package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +48 -35
  74. package/src/modules/base-achievements/base-achievements.constants.ts +1 -0
  75. package/src/modules/base-achievements/base-achievements.interfaces.ts +22 -0
  76. package/src/modules/base-achievements/base-achievements.module.ts +347 -234
  77. package/src/modules/base-achievements/index.ts +5 -0
  78. package/src/modules/event-bus/events-bus.app.subscribe.service.ts +5 -5
  79. package/src/modules/index.ts +6 -1
  80. package/src/modules/main/main.service.ts +7 -5
  81. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +1 -1
  82. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.ts +1 -0
  83. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.ts +7 -0
  84. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.ts +89 -41
  85. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.ts +1 -0
  86. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.ts +7 -0
  87. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts +89 -40
  88. package/src/modules/simple-rooms-manager/simple-rooms-manager.interfaces.ts +1 -0
  89. package/src/modules/simple-rooms-manager/simple-rooms-manager.module.ts +7 -0
  90. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +79 -33
  91. package/src/views/achievement-snackbar.view.ts +38 -0
  92. package/src/views/base-table.view.ts +57 -0
  93. package/src/views/index.ts +3 -0
  94. package/src/views/level-up-snackbar.view.ts +38 -0
  95. package/dist/utils/date.d.ts +0 -2
  96. package/dist/utils/date.js +0 -11
  97. package/dist/utils/date.js.map +0 -1
  98. package/dist/utils/game-table-result.d.ts +0 -40
  99. package/dist/utils/game-table-result.js +0 -152
  100. package/dist/utils/game-table-result.js.map +0 -1
  101. package/src/utils/date.ts +0 -7
  102. package/src/utils/game-table-result.ts +0 -190
@@ -106,18 +106,20 @@ export class MainService {
106
106
  if (
107
107
  player &&
108
108
  (player.isPlayer() || player.isTableQueuer()) &&
109
- player.tableId
109
+ player.tableId &&
110
+ player.room
110
111
  ) {
111
- if (player.room instanceof SimpleRoom) {
112
- redirectUrl = AppScreenRouter.getSimpleRoomTablePath(player.tableId);
113
- } else if (player.room instanceof OneTableTournamentRoom) {
112
+ const roomName = player.room.constructor.name;
113
+ if (roomName.includes(OneTableTournamentRoom.name)) {
114
114
  redirectUrl = AppScreenRouter.getOneTableTournamentTablePath(
115
115
  player.tableId,
116
116
  );
117
- } else if (player.room instanceof ManyTablesTournamentRoom) {
117
+ } else if (roomName.includes(ManyTablesTournamentRoom.name)) {
118
118
  redirectUrl = AppScreenRouter.getManyTablesTournamentTablePath(
119
119
  player.tableId,
120
120
  );
121
+ } else if (roomName.includes(SimpleRoom.name)) {
122
+ redirectUrl = AppScreenRouter.getSimpleRoomTablePath(player.tableId);
121
123
  }
122
124
  } else if (isNewbie) {
123
125
  redirectUrl = AppScreenRoutesEnum.WELCOME;
@@ -149,7 +149,7 @@ export class ManyTablesTournamentController {
149
149
  return this.tournamentService.removeTournament(tournamentId);
150
150
  }
151
151
 
152
- @Post('many_tables_tournament/buy_ticket/:tournamentId')
152
+ @Post('buy_ticket/:tournamentId')
153
153
  @HttpCode(HttpStatus.OK)
154
154
  buyTicket(
155
155
  @Param('tournamentId') tournamentId: string,
@@ -34,4 +34,5 @@ export interface ManyTablesTournamentRoomsFactoryOptions {
34
34
  dailyTournamentScheduleTaskTime: string;
35
35
  dailyTournamentTime: string;
36
36
  minPlayersForMergeTables: number;
37
+ levelUpBonus: number;
37
38
  }
@@ -22,6 +22,9 @@ import {
22
22
  Rating,
23
23
  RatingSchema,
24
24
  RatingRepository,
25
+ ActivityLog,
26
+ ActivityLogRepository,
27
+ ActivityLogSchema,
25
28
  } from 'jp.db.schemas';
26
29
 
27
30
  import { ManyTablesTournamentRoomsManagerService } from './many-tables-tournament-rooms-manager.service';
@@ -46,6 +49,9 @@ import { ManyTablesTournamentRoomsFactoryOptions } from './many-tables-tournamen
46
49
  { name: GameResult.name, schema: GameResultSchema },
47
50
  ]),
48
51
  MongooseModule.forFeature([{ name: Rating.name, schema: RatingSchema }]),
52
+ MongooseModule.forFeature([
53
+ { name: ActivityLog.name, schema: ActivityLogSchema },
54
+ ]),
49
55
  ],
50
56
  providers: [
51
57
  ManyTablesTournamentRoomsRepository,
@@ -54,6 +60,7 @@ import { ManyTablesTournamentRoomsFactoryOptions } from './many-tables-tournamen
54
60
  GameResultRepository,
55
61
  PurchaseRepository,
56
62
  RatingRepository,
63
+ ActivityLogRepository,
57
64
  ],
58
65
  exports: [ManyTablesTournamentRoomsManagerService],
59
66
  })
@@ -11,6 +11,7 @@ import {
11
11
  BaseGameEvent,
12
12
  GameMaster,
13
13
  GamePlayer,
14
+ GamePlayerMovedOnTheTableEvent,
14
15
  GameTableFinishedEvent,
15
16
  GameTournamentCancelledEvent,
16
17
  GameTournamentFinishedEvent,
@@ -32,26 +33,25 @@ import {
32
33
  ManyTablesTournamentRoomsRepository,
33
34
  UsersRepository,
34
35
  RatingRepository,
36
+ ActivityLogRepository,
35
37
  } from 'jp.db.schemas';
38
+ import { getHours, getMinutes } from 'jp.common.utils';
36
39
 
37
- import {
38
- saveGameTablesResultForTournamentRoom,
39
- saveTournamentResult,
40
- } from '../../utils/game-table-result';
41
40
  import { JpLoggerService } from '../logger';
42
- import { getHours, getMinutes } from '../../utils/date';
43
41
  import { ManyTablesTournamentCreateDto } from '../../dto/common/many-tables-tournament-create.dto';
44
42
  import { ManyTablesTournamentUpdateDto } from '../../dto/common/many-tables-tournament-update.dto';
45
43
  import {
44
+ EventsBusAppSubscribeService,
46
45
  EventsBusMainTablesSubscribeService,
47
46
  EventsBusManyTablesTournamentSubscribeService,
48
47
  } from '../event-bus';
48
+ import { TournamentRoomsManagerService } from '../../common/tournament-rooms-manager.service';
49
49
 
50
50
  import { MANY_TABLES_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './many-tables-tournament-rooms-manager.constants';
51
51
  import { ManyTablesTournamentRoomsFactoryOptions } from './many-tables-tournament-rooms-manager.interfaces';
52
52
 
53
53
  @Injectable()
54
- export class ManyTablesTournamentRoomsManagerService {
54
+ export class ManyTablesTournamentRoomsManagerService extends TournamentRoomsManagerService {
55
55
  private readonly rooms: Map<string, ManyTablesTournamentRoom>;
56
56
  private createDailyTournamentJob: Job | null;
57
57
 
@@ -61,13 +61,16 @@ export class ManyTablesTournamentRoomsManagerService {
61
61
  private readonly gameResultRepository: GameResultRepository,
62
62
  private readonly purchaseRepository: PurchaseRepository,
63
63
  private readonly ratingRepository: RatingRepository,
64
+ private readonly activityLogRepository: ActivityLogRepository,
64
65
  private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
65
66
  private readonly eventsBusManyTablesTournamentSubscribeService: EventsBusManyTablesTournamentSubscribeService,
67
+ private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
66
68
  @Inject(MANY_TABLES_TOURNAMENT_ROOMS_MANAGER_OPTIONS)
67
69
  private readonly options: ManyTablesTournamentRoomsFactoryOptions,
68
70
  @InjectConnection() private readonly connection: Connection,
69
71
  @Inject() private readonly logger: JpLoggerService,
70
72
  ) {
73
+ super();
71
74
  this.rooms = new Map<string, ManyTablesTournamentRoom>();
72
75
  this.createDailyTournamentJob = null;
73
76
  }
@@ -213,6 +216,7 @@ export class ManyTablesTournamentRoomsManagerService {
213
216
  rulesType: tournamentDocument.rulesType,
214
217
  deckType: tournamentDocument.deckType,
215
218
  tableSize: tournamentDocument.tableSize,
219
+ tableType: tournamentDocument.tableType,
216
220
  bet: tournamentDocument.bet,
217
221
  ticketPrice: tournamentDocument.ticketPrice,
218
222
  title: tournamentDocument.title,
@@ -238,47 +242,80 @@ export class ManyTablesTournamentRoomsManagerService {
238
242
  private handleRoomEvent = (event: BaseGameEvent) => {
239
243
  this.logger.log(event.toLog());
240
244
 
241
- if (event instanceof GameTableFinishedEvent) {
242
- void this.handleRoomTableGameFinished(event.master);
243
- } else if (event instanceof GameTournamentStartedEvent) {
244
- void this.handleTournamentRoomStarted(event.room.getRoomMaster());
245
- } else if (event instanceof GameTournamentCancelledEvent) {
246
- void this.handleTournamentRoomCancelled(event.room.getRoomMaster());
247
- } else if (event instanceof GameTournamentFinishedEvent) {
248
- void this.handleTournamentRoomFinished(event.room.getRoomMaster());
249
- } else if (
250
- event instanceof GameTournamentPlayerJoinedTheTournamentEvent ||
251
- event instanceof GameTournamentPlayerLeavedTheTournamentEvent ||
252
- event instanceof GameTournamentCancelledEvent ||
253
- event instanceof GameTournamentWaitedEvent ||
254
- event instanceof GameTournamentStartedEvent ||
255
- event instanceof GameTournamentFinishedEvent
256
- ) {
257
- void this.handleRoomStatusUpdated(
258
- new RoomUpdateStateEvent(event.gameType, event.roomId),
259
- );
245
+ switch (event.constructor.name) {
246
+ case GameTableFinishedEvent.name: {
247
+ void this.handleRoomTableGameFinished(
248
+ event as GameTableFinishedEvent,
249
+ this.connection,
250
+ this.gameResultRepository,
251
+ this.usersRepository,
252
+ this.activityLogRepository,
253
+ this.eventsBusAppSubscribeService,
254
+ this.options.levelUpBonus,
255
+ );
256
+ break;
257
+ }
258
+ case GamePlayerMovedOnTheTableEvent.name: {
259
+ this.handleRoomTableGamePlayerMoved(
260
+ event as GamePlayerMovedOnTheTableEvent,
261
+ this.eventsBusAppSubscribeService,
262
+ );
263
+ break;
264
+ }
265
+ case GameTournamentStartedEvent.name: {
266
+ void this.handleTournamentRoomStarted(
267
+ event as GameTournamentStartedEvent,
268
+ );
269
+ this.handleRoomStatusUpdated(event as GameTournamentStartedEvent);
270
+ break;
271
+ }
272
+ case GameTournamentCancelledEvent.name: {
273
+ void this.handleTournamentRoomCancelled(
274
+ event as GameTournamentCancelledEvent,
275
+ );
276
+ this.handleRoomStatusUpdated(event as GameTournamentCancelledEvent);
277
+ break;
278
+ }
279
+ case GameTournamentFinishedEvent.name: {
280
+ void this.handleTournamentRoomFinished(
281
+ event as GameTournamentFinishedEvent,
282
+ );
283
+ this.handleRoomStatusUpdated(event as GameTournamentFinishedEvent);
284
+ break;
285
+ }
286
+ case GameTournamentPlayerJoinedTheTournamentEvent.name:
287
+ case GameTournamentPlayerLeavedTheTournamentEvent.name:
288
+ case GameTournamentWaitedEvent.name: {
289
+ this.handleRoomStatusUpdated(
290
+ event as
291
+ | GameTournamentPlayerJoinedTheTournamentEvent
292
+ | GameTournamentPlayerLeavedTheTournamentEvent
293
+ | GameTournamentCancelledEvent,
294
+ );
295
+ break;
296
+ }
260
297
  }
261
298
  };
262
299
 
263
- private handleRoomTableGameFinished = async (master: GameMaster) => {
264
- await saveGameTablesResultForTournamentRoom(
265
- master,
266
- this.connection,
267
- this.gameResultRepository,
268
- this.usersRepository,
269
- );
270
- };
271
-
272
- private handleTournamentRoomStarted = async (master: TournamentMaster) => {
300
+ private handleTournamentRoomStarted = async (
301
+ event: GameTournamentStartedEvent,
302
+ ) => {
303
+ const master = event.room.getRoomMaster<TournamentMaster>();
273
304
  await this.tournamentRepository.startTournament(master.getTournamentId());
274
305
  };
275
306
 
276
- private handleTournamentRoomCancelled = async (master: TournamentMaster) => {
307
+ private handleTournamentRoomCancelled = async (
308
+ event: GameTournamentStartedEvent,
309
+ ) => {
310
+ const master = event.room.getRoomMaster<TournamentMaster>();
277
311
  await this.tournamentRepository.cancelTournament(master.getTournamentId());
278
312
  };
279
313
 
280
- private handleTournamentRoomFinished = async (master: TournamentMaster) => {
281
- await saveTournamentResult(
314
+ private handleTournamentRoomFinished = async (
315
+ event: GameTournamentFinishedEvent,
316
+ ) => {
317
+ const master = event.room.getRoomMaster<TournamentMaster>();
318
+ await this.saveTournamentResult(
282
319
  master,
283
320
  this.connection,
284
321
  this.tournamentRepository,
@@ -287,9 +324,20 @@ export class ManyTablesTournamentRoomsManagerService {
287
324
  );
288
325
  };
289
326
 
290
- private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
291
- this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
292
- this.eventsBusManyTablesTournamentSubscribeService.pushNewRoomState(event);
327
+ private handleRoomStatusUpdated = (
328
+ event:
329
+ | GameTournamentPlayerJoinedTheTournamentEvent
330
+ | GameTournamentPlayerLeavedTheTournamentEvent
331
+ | GameTournamentCancelledEvent
332
+ | GameTournamentWaitedEvent
333
+ | GameTournamentStartedEvent
334
+ | GameTournamentFinishedEvent,
335
+ ) => {
336
+ const updateEvent = new RoomUpdateStateEvent(event.gameType, event.roomId);
337
+ this.eventsBusMainTablesSubscribeService.pushNewRoomState(updateEvent);
338
+ this.eventsBusManyTablesTournamentSubscribeService.pushNewRoomState(
339
+ updateEvent,
340
+ );
293
341
  };
294
342
 
295
343
  private createDailyTournament = async (dailyTournamentTime: string) => {
@@ -28,4 +28,5 @@ export interface OneTableTournamentRoomsFactoryOptions {
28
28
  playersTurnTimeout: number;
29
29
  instantFinishMode: boolean;
30
30
  tournamentPrizeTable: IPrizeTableData;
31
+ levelUpBonus: number;
31
32
  }
@@ -13,6 +13,9 @@ import {
13
13
  Rating,
14
14
  RatingSchema,
15
15
  RatingRepository,
16
+ ActivityLog,
17
+ ActivityLogRepository,
18
+ ActivityLogSchema,
16
19
  } from 'jp.db.schemas';
17
20
 
18
21
  import { OneTableTournamentRoomsManagerService } from './one-table-tournament-rooms-manager.service';
@@ -33,6 +36,9 @@ import { ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './one-table-tourname
33
36
  { name: GameResult.name, schema: GameResultSchema },
34
37
  ]),
35
38
  MongooseModule.forFeature([{ name: Rating.name, schema: RatingSchema }]),
39
+ MongooseModule.forFeature([
40
+ { name: ActivityLog.name, schema: ActivityLogSchema },
41
+ ]),
36
42
  ],
37
43
  providers: [
38
44
  OneTableTournamentRoomsRepository,
@@ -40,6 +46,7 @@ import { ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './one-table-tourname
40
46
  OneTableTournamentRoomsManagerService,
41
47
  GameResultRepository,
42
48
  RatingRepository,
49
+ ActivityLogRepository,
43
50
  ],
44
51
  exports: [OneTableTournamentRoomsManagerService],
45
52
  })
@@ -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,6 +18,7 @@ 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,
@@ -28,19 +30,17 @@ import { Connection } from 'mongoose';
28
30
 
29
31
  import { JpLoggerService } from '../logger/jp-logger.service';
30
32
  import {
31
- saveGameTablesResultForTournamentRoom,
32
- saveTournamentResult,
33
- } from '../../utils/game-table-result';
34
- import {
33
+ EventsBusAppSubscribeService,
35
34
  EventsBusMainTablesSubscribeService,
36
35
  EventsBusOneTableTournamentSubscribeService,
37
36
  } from '../event-bus';
37
+ import { TournamentRoomsManagerService } from '../../common/tournament-rooms-manager.service';
38
38
 
39
39
  import { ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './one-table-tournament-rooms-manager.constants';
40
40
  import { OneTableTournamentRoomsFactoryOptions } from './one-table-tournament-rooms-manager.interfaces';
41
41
 
42
42
  @Injectable()
43
- export class OneTableTournamentRoomsManagerService {
43
+ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManagerService {
44
44
  private readonly rooms: Map<string, OneTableTournamentRoom>;
45
45
 
46
46
  constructor(
@@ -48,13 +48,16 @@ export class OneTableTournamentRoomsManagerService {
48
48
  private readonly usersRepository: UsersRepository,
49
49
  private readonly gameResultRepository: GameResultRepository,
50
50
  private readonly ratingRepository: RatingRepository,
51
+ private readonly activityLogRepository: ActivityLogRepository,
51
52
  private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
52
53
  private readonly eventsBusOneTableTournamentSubscribeService: EventsBusOneTableTournamentSubscribeService,
54
+ private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
53
55
  @Inject(ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS)
54
56
  private readonly options: OneTableTournamentRoomsFactoryOptions,
55
57
  @InjectConnection() private readonly connection: Connection,
56
58
  @Inject() private readonly logger: JpLoggerService,
57
59
  ) {
60
+ super();
58
61
  this.rooms = new Map<string, OneTableTournamentRoom>();
59
62
  }
60
63
 
@@ -119,6 +122,7 @@ export class OneTableTournamentRoomsManagerService {
119
122
  rulesType: tournamentDocument.rulesType,
120
123
  deckType: tournamentDocument.deckType,
121
124
  tableSize: tournamentDocument.tableSize,
125
+ tableType: tournamentDocument.tableType,
122
126
  bet: tournamentDocument.bet,
123
127
  ticketPrice: tournamentDocument.ticketPrice,
124
128
  title: tournamentDocument.title,
@@ -142,40 +146,67 @@ export class OneTableTournamentRoomsManagerService {
142
146
  private handleRoomEvent = (event: BaseGameEvent) => {
143
147
  this.logger.log(event.toLog());
144
148
 
145
- if (event instanceof GameTableFinishedEvent) {
146
- void this.handleRoomTableGameFinished(event.master);
147
- } else if (event instanceof GameTournamentStartedEvent) {
148
- void this.handleTournamentRoomStarted(event.room.getRoomMaster());
149
- } else if (event instanceof GameTournamentCancelledEvent) {
150
- void this.handleTournamentRoomCancelled(event.room.getRoomMaster());
151
- } else if (event instanceof GameTournamentFinishedEvent) {
152
- void this.handleTournamentRoomFinished(event.room.getRoomMaster());
153
- } else if (
154
- event instanceof GameTournamentPlayerJoinedTheTournamentEvent ||
155
- event instanceof GameTournamentPlayerLeavedTheTournamentEvent ||
156
- event instanceof GameTournamentCancelledEvent ||
157
- event instanceof GameTournamentWaitedEvent ||
158
- event instanceof GameTournamentStartedEvent ||
159
- event instanceof GameTournamentFinishedEvent
160
- ) {
161
- void this.handleRoomStatusUpdated(
162
- new RoomUpdateStateEvent(event.gameType, event.roomId),
163
- );
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
+ }
164
201
  }
165
202
  };
166
203
 
167
- private handleRoomTableGameFinished = async (master: GameMaster) => {
168
- await saveGameTablesResultForTournamentRoom(
169
- master,
170
- this.connection,
171
- this.gameResultRepository,
172
- this.usersRepository,
173
- );
174
- };
175
-
176
- private handleTournamentRoomStarted = async (master: TournamentMaster) => {
204
+ private handleTournamentRoomStarted = async (
205
+ event: GameTournamentStartedEvent,
206
+ ) => {
177
207
  const session = await this.connection.startSession();
178
208
  session.startTransaction();
209
+ const master = event.room.getRoomMaster<TournamentMaster>();
179
210
 
180
211
  try {
181
212
  await this.tournamentRepository.startTournament(
@@ -201,12 +232,19 @@ export class OneTableTournamentRoomsManagerService {
201
232
  }
202
233
  };
203
234
 
204
- private handleTournamentRoomCancelled = async (master: TournamentMaster) => {
235
+ private handleTournamentRoomCancelled = async (
236
+ event: GameTournamentCancelledEvent,
237
+ ) => {
238
+ const master = event.room.getRoomMaster<TournamentMaster>();
205
239
  await this.tournamentRepository.cancelTournament(master.getTournamentId());
206
240
  };
207
241
 
208
- private handleTournamentRoomFinished = async (master: TournamentMaster) => {
209
- await saveTournamentResult(
242
+ private handleTournamentRoomFinished = async (
243
+ event: GameTournamentFinishedEvent,
244
+ ) => {
245
+ const master = event.room.getRoomMaster<TournamentMaster>();
246
+
247
+ await this.saveTournamentResult(
210
248
  master,
211
249
  this.connection,
212
250
  this.tournamentRepository,
@@ -215,8 +253,19 @@ export class OneTableTournamentRoomsManagerService {
215
253
  );
216
254
  };
217
255
 
218
- private handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
219
- this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
220
- this.eventsBusOneTableTournamentSubscribeService.pushNewRoomState(event);
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
+ );
221
270
  };
222
271
  }
@@ -23,4 +23,5 @@ export interface SimpleRoomsFactoryOptions {
23
23
  restartGameTimeout: number;
24
24
  playersTurnTimeout: number;
25
25
  instantFinishMode: boolean;
26
+ levelUpBonus: number;
26
27
  }
@@ -13,6 +13,9 @@ import {
13
13
  Rating,
14
14
  RatingSchema,
15
15
  RatingRepository,
16
+ ActivityLog,
17
+ ActivityLogSchema,
18
+ ActivityLogRepository,
16
19
  } from 'jp.db.schemas';
17
20
 
18
21
  import { SimpleRoomsManagerService } from './simple-rooms-manager.service';
@@ -30,12 +33,16 @@ import { SIMPLE_ROOMS_MANAGER_OPTIONS } from './simple-rooms-manager.constants';
30
33
  { name: GameResult.name, schema: GameResultSchema },
31
34
  ]),
32
35
  MongooseModule.forFeature([{ name: Rating.name, schema: RatingSchema }]),
36
+ MongooseModule.forFeature([
37
+ { name: ActivityLog.name, schema: ActivityLogSchema },
38
+ ]),
33
39
  ],
34
40
  providers: [
35
41
  SimpleRoomsRepository,
36
42
  UsersRepository,
37
43
  GameResultRepository,
38
44
  RatingRepository,
45
+ ActivityLogRepository,
39
46
  SimpleRoomsManagerService,
40
47
  ],
41
48
  exports: [SimpleRoomsManagerService],