jp.ms.common.modules 1.0.54 → 1.0.56

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 (70) hide show
  1. package/dist/exception/global-exception-filter.js +5 -7
  2. package/dist/exception/global-exception-filter.js.map +1 -1
  3. package/dist/modules/main/main-tables-list-screen.view.js +5 -2
  4. package/dist/modules/main/main-tables-list-screen.view.js.map +1 -1
  5. package/dist/modules/main/main.controller.d.ts +1 -1
  6. package/dist/modules/main/main.controller.js +1 -1
  7. package/dist/modules/main/main.controller.js.map +1 -1
  8. package/dist/modules/main/main.service.d.ts +1 -1
  9. package/dist/modules/main/main.service.js +10 -3
  10. package/dist/modules/main/main.service.js.map +1 -1
  11. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +2 -2
  12. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +2 -3
  13. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  14. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +4 -0
  15. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  16. package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +5 -4
  17. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +30 -21
  18. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  19. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.d.ts +2 -0
  20. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js +3 -0
  21. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.js.map +1 -1
  22. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.d.ts +7 -0
  23. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js +48 -3
  24. package/dist/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.js.map +1 -1
  25. package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +1 -1
  26. package/dist/modules/one-table-tournament/one-table-tournament.controller.js +1 -1
  27. package/dist/modules/one-table-tournament/one-table-tournament.module.js +6 -1
  28. package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
  29. package/dist/modules/one-table-tournament/one-table-tournament.service.d.ts +4 -2
  30. package/dist/modules/one-table-tournament/one-table-tournament.service.js +20 -8
  31. package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
  32. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.d.ts +2 -0
  33. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.d.ts +3 -2
  34. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js +15 -2
  35. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.js.map +1 -1
  36. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.d.ts +10 -2
  37. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js +53 -7
  38. package/dist/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.js.map +1 -1
  39. package/dist/modules/simple-rooms/simple-rooms.controller.d.ts +1 -1
  40. package/dist/modules/simple-rooms/simple-rooms.controller.js +2 -2
  41. package/dist/modules/simple-rooms/simple-rooms.controller.js.map +1 -1
  42. package/dist/modules/simple-rooms/simple-rooms.module.js +2 -1
  43. package/dist/modules/simple-rooms/simple-rooms.module.js.map +1 -1
  44. package/dist/modules/simple-rooms/simple-rooms.service.d.ts +4 -2
  45. package/dist/modules/simple-rooms/simple-rooms.service.js +20 -8
  46. package/dist/modules/simple-rooms/simple-rooms.service.js.map +1 -1
  47. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +2 -2
  48. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +3 -3
  51. package/src/exception/global-exception-filter.ts +4 -10
  52. package/src/modules/main/main-tables-list-screen.view.ts +9 -2
  53. package/src/modules/main/main.controller.ts +1 -1
  54. package/src/modules/main/main.service.ts +20 -3
  55. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +2 -2
  56. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +7 -0
  57. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +54 -38
  58. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.interfaces.ts +2 -0
  59. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.module.ts +3 -0
  60. package/src/modules/many-tables-tournament-rooms-manager/many-tables-tournament-rooms-manager.service.ts +81 -3
  61. package/src/modules/one-table-tournament/one-table-tournament.controller.ts +1 -1
  62. package/src/modules/one-table-tournament/one-table-tournament.module.ts +9 -1
  63. package/src/modules/one-table-tournament/one-table-tournament.service.ts +30 -8
  64. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.interfaces.ts +2 -0
  65. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.module.ts +24 -2
  66. package/src/modules/one-table-tournament-rooms-manager/one-table-tournament-rooms-manager.service.ts +69 -1
  67. package/src/modules/simple-rooms/simple-rooms.controller.ts +6 -2
  68. package/src/modules/simple-rooms/simple-rooms.module.ts +5 -1
  69. package/src/modules/simple-rooms/simple-rooms.service.ts +32 -6
  70. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +2 -2
@@ -1,4 +1,8 @@
1
- import { Inject, Injectable } from '@nestjs/common';
1
+ import {
2
+ Inject,
3
+ Injectable,
4
+ InternalServerErrorException,
5
+ } from '@nestjs/common';
2
6
  import {
3
7
  BaseGameEvent,
4
8
  GameMaster,
@@ -23,11 +27,13 @@ import {
23
27
  GameResultRepository,
24
28
  OneTableTournamentRoomDocument,
25
29
  OneTableTournamentRoomsRepository,
30
+ PurchaseRepository,
26
31
  RatingRepository,
27
32
  UsersRepository,
28
33
  } from 'jp.db.schemas';
29
34
  import { InjectConnection } from '@nestjs/mongoose';
30
35
  import { Connection } from 'mongoose';
36
+ import schedule, { Job } from 'node-schedule';
31
37
 
32
38
  import { JpLoggerService } from '../logger/jp-logger.service';
33
39
  import {
@@ -36,6 +42,7 @@ import {
36
42
  EventsBusOneTableTournamentSubscribeService,
37
43
  } from '../event-bus';
38
44
  import { TournamentRoomsManagerService } from '../../common/tournament-rooms-manager.service';
45
+ import { PlayersManagerService } from '../players-manager';
39
46
 
40
47
  import { ONE_TABLE_TOURNAMENT_ROOMS_MANAGER_OPTIONS } from './one-table-tournament-rooms-manager.constants';
41
48
  import { OneTableTournamentRoomsFactoryOptions } from './one-table-tournament-rooms-manager.interfaces';
@@ -43,6 +50,7 @@ import { OneTableTournamentRoomsFactoryOptions } from './one-table-tournament-ro
43
50
  @Injectable()
44
51
  export class OneTableTournamentRoomsManagerService extends TournamentRoomsManagerService {
45
52
  private readonly rooms: Map<string, OneTableTournamentRoom>;
53
+ private purgeRoomsJob: Job;
46
54
 
47
55
  constructor(
48
56
  private readonly tournamentRepository: OneTableTournamentRoomsRepository,
@@ -50,6 +58,7 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
50
58
  private readonly gameResultRepository: GameResultRepository,
51
59
  private readonly ratingRepository: RatingRepository,
52
60
  private readonly activityLogRepository: ActivityLogRepository,
61
+ private readonly purchaseRepository: PurchaseRepository,
53
62
  private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
54
63
  private readonly eventsBusOneTableTournamentSubscribeService: EventsBusOneTableTournamentSubscribeService,
55
64
  private readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
@@ -57,6 +66,7 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
57
66
  private readonly options: OneTableTournamentRoomsFactoryOptions,
58
67
  @InjectConnection() private readonly connection: Connection,
59
68
  @Inject() private readonly logger: JpLoggerService,
69
+ private readonly playersManager: PlayersManagerService,
60
70
  ) {
61
71
  super();
62
72
  this.rooms = new Map<string, OneTableTournamentRoom>();
@@ -90,6 +100,10 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
90
100
  this.rooms.set(room.getId(), room);
91
101
  }
92
102
 
103
+ removeRoom(roomId: string) {
104
+ this.rooms.delete(roomId);
105
+ }
106
+
93
107
  async createMasterTournament() {
94
108
  const waitingTournament =
95
109
  await this.tournamentRepository.findWaitingTournament(this.gameType);
@@ -113,6 +127,31 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
113
127
  });
114
128
  }
115
129
 
130
+ runPurgeRoomsJob() {
131
+ const purgeRoomsTime = this.options.purgeRoomsTime;
132
+
133
+ if (purgeRoomsTime) {
134
+ this.logger.log(
135
+ `${OneTableTournamentRoomsManagerService.name}: runPurgeRoomsJob`,
136
+ );
137
+
138
+ this.purgeRoomsJob = schedule.scheduleJob(purgeRoomsTime, () =>
139
+ this.purgeRooms(),
140
+ );
141
+ }
142
+ }
143
+
144
+ purgeRooms() {
145
+ for (const room of this.getRooms()) {
146
+ if (!room.isActual()) {
147
+ this.removeRoom(room.getId());
148
+ this.logger.log(
149
+ `${OneTableTournamentRoomsManagerService.name}: removeRoom: ${room.getId()}`,
150
+ );
151
+ }
152
+ }
153
+ }
154
+
116
155
  private oneTableTournamentDocumentToTournamentRoom(
117
156
  tournamentDocument: OneTableTournamentRoomDocument,
118
157
  ): TournamentRoomConfig {
@@ -141,6 +180,7 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
141
180
  tournamentWinners: tournamentDocument.winners,
142
181
  maxParticipants: tournamentDocument.maxParticipants,
143
182
  participants: tournamentDocument.participants,
183
+ finishDate: tournamentDocument.finishDate,
144
184
  };
145
185
  }
146
186
 
@@ -212,6 +252,10 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
212
252
  const master = event.room.getRoomMaster<TournamentMaster>();
213
253
 
214
254
  try {
255
+ for (const participant of master.getRoom().getParticipants()) {
256
+ await this.buyTicket(master.getTournamentId(), participant.playerId);
257
+ }
258
+
215
259
  await this.tournamentRepository.startTournament(
216
260
  master.getTournamentId(),
217
261
  master.getRoom().getParticipants(),
@@ -272,4 +316,28 @@ export class OneTableTournamentRoomsManagerService extends TournamentRoomsManage
272
316
  updateEvent,
273
317
  );
274
318
  };
319
+
320
+ private async buyTicket(tournamentId: string, playerId: string) {
321
+ const tournament = this.getRoomById(tournamentId);
322
+ const user = await this.usersRepository.findById(playerId);
323
+ const player = this.playersManager.getPlayerById(playerId);
324
+
325
+ if (!tournament || !user || !player) {
326
+ throw new InternalServerErrorException();
327
+ }
328
+
329
+ player.decreaseBalance(tournament.getTicketPrice());
330
+
331
+ void this.purchaseRepository.addOneTableTournamentTicketPurchase(
332
+ player.id,
333
+ player.fullName,
334
+ tournamentId,
335
+ tournament.getTicketPrice(),
336
+ tournament.getGameType(),
337
+ );
338
+ void this.usersRepository.subtractFromBalance(
339
+ player.id,
340
+ tournament.getTicketPrice(),
341
+ );
342
+ }
275
343
  }
@@ -28,8 +28,12 @@ export class SimpleRoomsController {
28
28
  enterTheTable(
29
29
  @Param('tableId') tableId: string,
30
30
  @Headers() headers: IAppHeaders,
31
- ): IAppTableState {
32
- return this.roomsService.enterTheTable(tableId, headers.client_auth_token);
31
+ ): Promise<IAppTableState> {
32
+ return this.roomsService.enterTheTable(
33
+ tableId,
34
+ headers.client_auth_token,
35
+ headers.client_language,
36
+ );
33
37
  }
34
38
 
35
39
  @Post('table/exit/:tableId')
@@ -4,6 +4,9 @@ import {
4
4
  SimpleRoom,
5
5
  SimpleRoomSchema,
6
6
  SimpleRoomsRepository,
7
+ User,
8
+ UserSchema,
9
+ UsersRepository,
7
10
  } from 'jp.db.schemas';
8
11
 
9
12
  import { SimpleRoomsController } from './simple-rooms.controller';
@@ -16,9 +19,10 @@ import { SimpleRoomsModuleOptions } from './simple-rooms.interfaces';
16
19
  MongooseModule.forFeature([
17
20
  { name: SimpleRoom.name, schema: SimpleRoomSchema },
18
21
  ]),
22
+ MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
19
23
  ],
20
24
  controllers: [SimpleRoomsController],
21
- providers: [SimpleRoomsService, SimpleRoomsRepository],
25
+ providers: [SimpleRoomsService, SimpleRoomsRepository, UsersRepository],
22
26
  })
23
27
  export class SimpleRoomsModule {
24
28
  constructor() {}
@@ -3,10 +3,19 @@ import {
3
3
  Injectable,
4
4
  InternalServerErrorException,
5
5
  } from '@nestjs/common';
6
- import { IBaseMoveData, IAppTableState } from 'jp.common.models';
6
+ import {
7
+ IBaseMoveData,
8
+ IAppTableState,
9
+ ErrorSnackbarComponent,
10
+ } from 'jp.common.models';
11
+ import { UsersRepository } from 'jp.db.schemas';
7
12
 
8
13
  import { SimpleRoomsManagerService } from '../simple-rooms-manager';
9
14
  import { PlayersManagerService } from '../players-manager';
15
+ import {
16
+ NotEnoughMoneyForPurchaseException,
17
+ ErrorCodeEnum,
18
+ } from '../../exception';
10
19
 
11
20
  import { SIMPLE_ROOMS_OPTIONS } from './simple-rooms.constants';
12
21
  import { SimpleRoomsFactoryOptions } from './simple-rooms.interfaces';
@@ -16,6 +25,7 @@ export class SimpleRoomsService {
16
25
  constructor(
17
26
  private readonly simpleRoomsManager: SimpleRoomsManagerService,
18
27
  private readonly playersManager: PlayersManagerService,
28
+ private readonly usersRepository: UsersRepository,
19
29
  @Inject(SIMPLE_ROOMS_OPTIONS)
20
30
  private readonly options: SimpleRoomsFactoryOptions,
21
31
  ) {}
@@ -34,18 +44,34 @@ export class SimpleRoomsService {
34
44
  throw new InternalServerErrorException();
35
45
  }
36
46
 
37
- enterTheTable(tableId: string, clientAuthToken: string): IAppTableState {
47
+ async enterTheTable(
48
+ tableId: string,
49
+ clientAuthToken: string,
50
+ clientLanguage: string,
51
+ ): Promise<IAppTableState> {
38
52
  const player = this.playersManager.getPlayerById(clientAuthToken);
39
53
  const room = this.simpleRoomsManager.getRoomByTableId(tableId);
40
54
  const master = room?.getMasterById(tableId);
55
+ const user = await this.usersRepository.findById(player?.id ?? '');
41
56
 
42
- if (player && room && master) {
43
- room.handleEnterTheTable(player, tableId);
57
+ if (!player || !room || !master || !user) {
58
+ throw new InternalServerErrorException();
59
+ }
44
60
 
45
- return master.createGameStateDto(player);
61
+ if (user.balance < room.getTicketPrice()) {
62
+ throw new NotEnoughMoneyForPurchaseException(
63
+ new ErrorSnackbarComponent(
64
+ ErrorCodeEnum.NOT_ENOUGH_MONEY_FOR_PURCHASE,
65
+ this.options.i18n.t('common.server.message.code.4002', {
66
+ lang: clientLanguage,
67
+ }),
68
+ ),
69
+ );
46
70
  }
47
71
 
48
- throw new InternalServerErrorException();
72
+ room.handleEnterTheTable(player, tableId);
73
+
74
+ return master.createGameStateDto(player);
49
75
  }
50
76
 
51
77
  exitTheTable(tableId: string, clientAuthToken: string): IAppTableState {
@@ -149,7 +149,7 @@ export class SimpleRoomsManagerService extends RoomsManagerService {
149
149
  tableSize: room.tableSize,
150
150
  tableType: room.tableType,
151
151
  bet: room.bet,
152
- ticketPrice: room.ticketPrice / 2,
152
+ ticketPrice: room.ticketPrice,
153
153
  title: room.title,
154
154
  subtitle: room.subtitle,
155
155
  description: room.description,
@@ -216,7 +216,7 @@ export class SimpleRoomsManagerService extends RoomsManagerService {
216
216
  await this.gameResultRepository.createGameResult(
217
217
  this.getGameTableResults(master),
218
218
  );
219
- const userGameResults = this.getUserGameResults(master, false);
219
+ const userGameResults = this.getUserGameResults(master, true);
220
220
  await this.usersRepository.saveGameResult(userGameResults);
221
221
  await this.ratingRepository.addBulkPlayerRating(
222
222
  this.getUserRatings(master),