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.
Files changed (131) 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/app-table/card.dto.d.ts +1 -0
  8. package/dist/dto/app-table/card.dto.js +11 -0
  9. package/dist/dto/app-table/card.dto.js.map +1 -1
  10. package/dist/dto/app-table/player.dto.d.ts +1 -0
  11. package/dist/dto/app-table/player.dto.js +11 -0
  12. package/dist/dto/app-table/player.dto.js.map +1 -1
  13. package/dist/exception/global-exception-filter.d.ts +2 -0
  14. package/dist/exception/global-exception-filter.js +23 -17
  15. package/dist/exception/global-exception-filter.js.map +1 -1
  16. package/dist/modules/anti-freeze-system/anti-freeze-system.service.d.ts +3 -0
  17. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js +33 -23
  18. package/dist/modules/anti-freeze-system/anti-freeze-system.service.js.map +1 -1
  19. package/dist/modules/base-achievements/base-achievements.constants.d.ts +1 -0
  20. package/dist/modules/base-achievements/base-achievements.constants.js +5 -0
  21. package/dist/modules/base-achievements/base-achievements.constants.js.map +1 -0
  22. package/dist/modules/base-achievements/base-achievements.interfaces.d.ts +15 -0
  23. package/dist/modules/base-achievements/base-achievements.interfaces.js +3 -0
  24. package/dist/modules/base-achievements/base-achievements.interfaces.js.map +1 -0
  25. package/dist/modules/base-achievements/base-achievements.module.d.ts +29 -7
  26. package/dist/modules/base-achievements/base-achievements.module.js +166 -76
  27. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -1
  28. package/dist/modules/base-achievements/index.d.ts +2 -0
  29. package/dist/modules/base-achievements/index.js +3 -1
  30. package/dist/modules/base-achievements/index.js.map +1 -1
  31. package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +3 -3
  32. package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -1
  33. package/dist/modules/events/events.gateway.js +4 -2
  34. package/dist/modules/events/events.gateway.js.map +1 -1
  35. package/dist/modules/index.d.ts +1 -1
  36. package/dist/modules/index.js +4 -3
  37. package/dist/modules/index.js.map +1 -1
  38. package/dist/modules/main/main.controller.d.ts +0 -1
  39. package/dist/modules/main/main.controller.js +0 -12
  40. package/dist/modules/main/main.controller.js.map +1 -1
  41. package/dist/modules/main/main.service.d.ts +0 -1
  42. package/dist/modules/main/main.service.js +8 -19
  43. package/dist/modules/main/main.service.js.map +1 -1
  44. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +1 -0
  45. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +12 -0
  46. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  47. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +6 -1
  48. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  49. package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
  50. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +18 -2
  51. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  52. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.d.ts +1 -0
  53. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js +6 -0
  54. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js.map +1 -1
  55. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.d.ts +8 -5
  56. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js +61 -38
  57. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js.map +1 -1
  58. package/dist/modules/menu/menu-screen.view.d.ts +2 -1
  59. package/dist/modules/menu/menu-screen.view.js +9 -3
  60. package/dist/modules/menu/menu-screen.view.js.map +1 -1
  61. package/dist/modules/menu/menu.interfaces.d.ts +1 -0
  62. package/dist/modules/menu/menu.service.js +1 -1
  63. package/dist/modules/menu/menu.service.js.map +1 -1
  64. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.d.ts +1 -0
  65. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js +6 -0
  66. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js.map +1 -1
  67. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.d.ts +8 -5
  68. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js +58 -35
  69. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js.map +1 -1
  70. package/dist/modules/simple-rooms-manager/simple-rooms-manager.interfaces.d.ts +1 -0
  71. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js +6 -0
  72. package/dist/modules/simple-rooms-manager/simple-rooms-manager.module.js.map +1 -1
  73. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +8 -5
  74. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +56 -20
  75. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/dist/views/achievement-snackbar.view.d.ts +8 -0
  78. package/dist/views/achievement-snackbar.view.js +26 -0
  79. package/dist/views/achievement-snackbar.view.js.map +1 -0
  80. package/dist/views/base-table.view.d.ts +13 -0
  81. package/dist/views/base-table.view.js +34 -0
  82. package/dist/views/base-table.view.js.map +1 -0
  83. package/dist/views/index.d.ts +3 -0
  84. package/dist/views/index.js +7 -1
  85. package/dist/views/index.js.map +1 -1
  86. package/dist/views/level-up-snackbar.view.d.ts +7 -0
  87. package/dist/views/level-up-snackbar.view.js +26 -0
  88. package/dist/views/level-up-snackbar.view.js.map +1 -0
  89. package/package.json +5 -5
  90. package/src/common/rooms-manager.service.ts +250 -0
  91. package/src/common/tournament-rooms-manager.service.ts +121 -0
  92. package/src/dto/app-table/card.dto.ts +9 -0
  93. package/src/dto/app-table/player.dto.ts +9 -0
  94. package/src/exception/global-exception-filter.ts +34 -20
  95. package/src/modules/anti-freeze-system/anti-freeze-system.service.ts +48 -35
  96. package/src/modules/base-achievements/base-achievements.constants.ts +1 -0
  97. package/src/modules/base-achievements/base-achievements.interfaces.ts +22 -0
  98. package/src/modules/base-achievements/base-achievements.module.ts +347 -234
  99. package/src/modules/base-achievements/index.ts +5 -0
  100. package/src/modules/event-bus/events-bus.app.subscribe.service.ts +5 -5
  101. package/src/modules/events/events.gateway.ts +4 -2
  102. package/src/modules/index.ts +6 -1
  103. package/src/modules/main/main.controller.ts +1 -22
  104. package/src/modules/main/main.service.ts +7 -34
  105. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +13 -0
  106. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +9 -1
  107. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +33 -0
  108. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.ts +1 -0
  109. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.ts +12 -0
  110. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.ts +92 -42
  111. package/src/modules/menu/menu-screen.view.ts +9 -2
  112. package/src/modules/menu/menu.interfaces.ts +1 -0
  113. package/src/modules/menu/menu.service.ts +1 -0
  114. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.ts +1 -0
  115. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.ts +12 -0
  116. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts +92 -41
  117. package/src/modules/simple-rooms-manager/simple-rooms-manager.interfaces.ts +1 -0
  118. package/src/modules/simple-rooms-manager/simple-rooms-manager.module.ts +12 -0
  119. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +81 -33
  120. package/src/views/achievement-snackbar.view.ts +38 -0
  121. package/src/views/base-table.view.ts +57 -0
  122. package/src/views/index.ts +3 -0
  123. package/src/views/level-up-snackbar.view.ts +38 -0
  124. package/dist/utils/date.d.ts +0 -2
  125. package/dist/utils/date.js +0 -11
  126. package/dist/utils/date.js.map +0 -1
  127. package/dist/utils/game-table-result.d.ts +0 -39
  128. package/dist/utils/game-table-result.js +0 -102
  129. package/dist/utils/game-table-result.js.map +0 -1
  130. package/src/utils/date.ts +0 -7
  131. package/src/utils/game-table-result.ts +0 -129
@@ -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
- saveGameTablesResult,
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
- if (event instanceof GameTableFinishedEvent) {
144
- void this.handleRoomTableGameFinished(event.master);
145
- } else if (event instanceof GameTournamentStartedEvent) {
146
- void this.handleTournamentRoomStarted(event.room.getRoomMaster());
147
- } else if (event instanceof GameTournamentCancelledEvent) {
148
- void this.handleTournamentRoomCancelled(event.room.getRoomMaster());
149
- } else if (event instanceof GameTournamentFinishedEvent) {
150
- void this.handleTournamentRoomFinished(event.room.getRoomMaster());
151
- } else if (
152
- event instanceof GameTournamentPlayerJoinedTheTournamentEvent ||
153
- event instanceof GameTournamentPlayerLeavedTheTournamentEvent ||
154
- event instanceof GameTournamentCancelledEvent ||
155
- event instanceof GameTournamentWaitedEvent ||
156
- event instanceof GameTournamentStartedEvent ||
157
- event instanceof GameTournamentFinishedEvent
158
- ) {
159
- void this.handleRoomStatusUpdated(
160
- new RoomUpdateStateEvent(event.gameType, event.roomId),
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 handleRoomTableGameFinished = async (master: GameMaster) => {
166
- await saveGameTablesResult(
167
- master,
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 (master: TournamentMaster) => {
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 (master: TournamentMaster) => {
208
- await saveTournamentResult(
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 = (event: RoomUpdateStateEvent) => {
217
- this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
218
- 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
+ );
219
270
  };
220
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
  }
@@ -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 { saveGameTablesResult } from '../../utils/game-table-result';
26
- import { EventsBusMainTablesSubscribeService } from '../event-bus/events-bus.main-tables.subscribe.service';
27
- import { EventsBusAppSubscribeService } from '../event-bus/events-bus.app.subscribe.service';
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
- 1. Сначала ищем стол в котором один игрок
91
- 2. Далее ищем стол за которым есть игроки и свободные места
92
- 3. Отправляем на стол для быстрой игры если там есть места
93
- 4. Наконец создаем стол для быстрой игры и отправляем туда
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
- if (event instanceof GameTableFinishedEvent) {
161
- void this.handleRoomTableGameFinished(event.master);
162
- } else if (
163
- event instanceof GamePlayerEnteredTheTableEvent ||
164
- event instanceof GamePlayerExitedTheTableEvent
165
- ) {
166
- this.handleRoomStatusUpdated(
167
- new RoomUpdateStateEvent(event.gameType, event.roomId),
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 (master: GameMaster) => {
173
- await saveGameTablesResult(
174
- master,
175
- this.connection,
176
- this.gameResultRepository,
177
- this.usersRepository,
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
- // TODO: записать разные события для достижений
182
- this.eventsBusAppSubscribeService.pushNewEvent(
183
- new UserWonTheGameAppEvent(this.gameType, '123'),
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 handleRoomStatusUpdated = (event: RoomUpdateStateEvent) => {
188
- this.eventsBusMainTablesSubscribeService.pushNewRoomState(event);
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
+ }
@@ -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
+ }
@@ -1,2 +0,0 @@
1
- export declare function getHours(timeStr: string): number;
2
- export declare function getMinutes(timeStr: string): number;
@@ -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
@@ -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>;