jp.ms.common.modules 1.0.20 → 1.0.21

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 (134) hide show
  1. package/dist/dto/app-screen/app-screen-dialog.dto.d.ts +10 -0
  2. package/dist/dto/app-screen/app-screen-dialog.dto.js +81 -0
  3. package/dist/dto/app-screen/app-screen-dialog.dto.js.map +1 -0
  4. package/dist/dto/app-screen/app-screen.dto.d.ts +3 -0
  5. package/dist/dto/app-screen/app-screen.dto.js +12 -0
  6. package/dist/dto/app-screen/app-screen.dto.js.map +1 -1
  7. package/dist/dto/common/player-check-state.dto.d.ts +2 -2
  8. package/dist/dto/common/player-check-state.dto.js.map +1 -1
  9. package/dist/modules/base-achievements/base-achievements.module.d.ts +15 -0
  10. package/dist/modules/base-achievements/base-achievements.module.js +138 -0
  11. package/dist/modules/base-achievements/base-achievements.module.js.map +1 -0
  12. package/dist/modules/base-achievements/index.d.ts +1 -0
  13. package/dist/modules/base-achievements/index.js +6 -0
  14. package/dist/modules/base-achievements/index.js.map +1 -0
  15. package/dist/modules/event-bus/events-bus.app.subscribe.service.d.ts +7 -0
  16. package/dist/modules/event-bus/events-bus.app.subscribe.service.js +32 -0
  17. package/dist/modules/event-bus/events-bus.app.subscribe.service.js.map +1 -0
  18. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.d.ts +11 -0
  19. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js +43 -0
  20. package/dist/modules/event-bus/events-bus.main-tables.subscribe.service.js.map +1 -0
  21. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.d.ts +3 -0
  22. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js +18 -0
  23. package/dist/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.js.map +1 -0
  24. package/dist/modules/event-bus/events-bus.module.d.ts +2 -0
  25. package/dist/modules/event-bus/events-bus.module.js +35 -0
  26. package/dist/modules/event-bus/events-bus.module.js.map +1 -0
  27. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.d.ts +3 -0
  28. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js +18 -0
  29. package/dist/modules/event-bus/events-bus.one-table-tournament.subscribe.service.js.map +1 -0
  30. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.d.ts +7 -0
  31. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js +18 -0
  32. package/dist/modules/event-bus/events-bus.tournament.subscribe.service.js.map +1 -0
  33. package/dist/modules/event-bus/index.d.ts +5 -0
  34. package/dist/modules/event-bus/index.js +14 -0
  35. package/dist/modules/event-bus/index.js.map +1 -0
  36. package/dist/modules/index.d.ts +2 -0
  37. package/dist/modules/index.js +6 -1
  38. package/dist/modules/index.js.map +1 -1
  39. package/dist/modules/main/main-tables-list-screen.view.d.ts +9 -0
  40. package/dist/modules/main/main-tables-list-screen.view.js +38 -0
  41. package/dist/modules/main/main-tables-list-screen.view.js.map +1 -0
  42. package/dist/modules/main/main.controller.d.ts +4 -2
  43. package/dist/modules/main/main.controller.js +23 -4
  44. package/dist/modules/main/main.controller.js.map +1 -1
  45. package/dist/modules/main/main.module.d.ts +7 -1
  46. package/dist/modules/main/main.module.js +29 -3
  47. package/dist/modules/main/main.module.js.map +1 -1
  48. package/dist/modules/main/main.service.d.ts +10 -3
  49. package/dist/modules/main/main.service.js +54 -26
  50. package/dist/modules/main/main.service.js.map +1 -1
  51. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.d.ts +7 -0
  52. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js +19 -0
  53. package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js.map +1 -0
  54. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.d.ts +7 -0
  55. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js +18 -0
  56. package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js.map +1 -0
  57. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +4 -1
  58. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +35 -1
  59. package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
  60. package/dist/modules/many-tables-tournament/many-tables-tournament.module.d.ts +9 -1
  61. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js +22 -2
  62. package/dist/modules/many-tables-tournament/many-tables-tournament.module.js.map +1 -1
  63. package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +4 -1
  64. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +34 -10
  65. package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
  66. package/dist/modules/menu/menu-screen.view.d.ts +7 -0
  67. package/dist/modules/menu/menu-screen.view.js +18 -0
  68. package/dist/modules/menu/menu-screen.view.js.map +1 -0
  69. package/dist/modules/menu/menu.service.d.ts +1 -1
  70. package/dist/modules/menu/menu.service.js +3 -5
  71. package/dist/modules/menu/menu.service.js.map +1 -1
  72. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +7 -0
  73. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +19 -0
  74. package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -0
  75. package/dist/modules/one-table-tournament/one-table-tournament.controller.d.ts +3 -1
  76. package/dist/modules/one-table-tournament/one-table-tournament.controller.js +23 -1
  77. package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
  78. package/dist/modules/one-table-tournament/one-table-tournament.module.d.ts +9 -1
  79. package/dist/modules/one-table-tournament/one-table-tournament.module.js +22 -2
  80. package/dist/modules/one-table-tournament/one-table-tournament.module.js.map +1 -1
  81. package/dist/modules/one-table-tournament/one-table-tournament.service.d.ts +3 -1
  82. package/dist/modules/one-table-tournament/one-table-tournament.service.js +19 -6
  83. package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
  84. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.d.ts +7 -2
  85. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js +20 -8
  86. package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
  87. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.d.ts +7 -2
  88. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +24 -5
  89. package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js.map +1 -1
  90. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.d.ts +5 -1
  91. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +17 -5
  92. package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/dist/views/index.d.ts +1 -0
  95. package/dist/views/index.js +6 -0
  96. package/dist/views/index.js.map +1 -0
  97. package/dist/views/tournament-buy-ticket-dialog.view.d.ts +4 -0
  98. package/dist/views/tournament-buy-ticket-dialog.view.js +11 -0
  99. package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -0
  100. package/package.json +7 -7
  101. package/src/dto/app-screen/app-screen-dialog.dto.ts +57 -0
  102. package/src/dto/app-screen/app-screen.dto.ts +12 -1
  103. package/src/dto/common/player-check-state.dto.ts +2 -2
  104. package/src/modules/base-achievements/base-achievements.module.ts +163 -0
  105. package/src/modules/base-achievements/index.ts +1 -0
  106. package/src/modules/event-bus/events-bus.app.subscribe.service.ts +21 -0
  107. package/src/modules/event-bus/events-bus.main-tables.subscribe.service.ts +34 -0
  108. package/src/modules/event-bus/events-bus.many-tables-tournament.subscribe.service.ts +6 -0
  109. package/src/modules/event-bus/events-bus.module.ts +23 -0
  110. package/src/modules/event-bus/events-bus.one-table-tournament.subscribe.service.ts +6 -0
  111. package/src/modules/event-bus/events-bus.tournament.subscribe.service.ts +19 -0
  112. package/src/modules/event-bus/index.ts +5 -0
  113. package/src/modules/index.ts +2 -1
  114. package/src/modules/main/main-tables-list-screen.view.ts +107 -0
  115. package/src/modules/main/main.controller.ts +16 -7
  116. package/src/modules/main/main.module.ts +30 -5
  117. package/src/modules/main/main.service.ts +66 -82
  118. package/src/modules/many-tables-tournament/index.ts +1 -1
  119. package/src/modules/many-tables-tournament/many-tables-tournament-status-screen.view.ts +59 -0
  120. package/src/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.ts +53 -0
  121. package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +36 -11
  122. package/src/modules/many-tables-tournament/many-tables-tournament.module.ts +21 -4
  123. package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +68 -73
  124. package/src/modules/menu/menu-screen.view.ts +48 -0
  125. package/src/modules/menu/menu.service.ts +14 -32
  126. package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +64 -0
  127. package/src/modules/one-table-tournament/one-table-tournament.controller.ts +23 -7
  128. package/src/modules/one-table-tournament/one-table-tournament.module.ts +21 -4
  129. package/src/modules/one-table-tournament/one-table-tournament.service.ts +39 -46
  130. package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +30 -17
  131. package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +39 -16
  132. package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +48 -35
  133. package/src/views/index.ts +1 -0
  134. package/src/views/tournament-buy-ticket-dialog.view.ts +21 -0
@@ -0,0 +1 @@
1
+ export { TournamentBuyTicketDialogView } from './tournament-buy-ticket-dialog.view';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TournamentBuyTicketDialogView = void 0;
4
+ var tournament_buy_ticket_dialog_view_1 = require("./tournament-buy-ticket-dialog.view");
5
+ Object.defineProperty(exports, "TournamentBuyTicketDialogView", { enumerable: true, get: function () { return tournament_buy_ticket_dialog_view_1.TournamentBuyTicketDialogView; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;;AAAA,yFAAoF;AAA3E,kJAAA,6BAA6B,OAAA"}
@@ -0,0 +1,4 @@
1
+ import { UniversalScreenDialogView, AppScreenDialog } from "jp.common.models";
2
+ export declare class TournamentBuyTicketDialogView extends UniversalScreenDialogView {
3
+ build(): AppScreenDialog;
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TournamentBuyTicketDialogView = void 0;
4
+ const jp_common_models_1 = require("jp.common.models");
5
+ class TournamentBuyTicketDialogView extends jp_common_models_1.UniversalScreenDialogView {
6
+ build() {
7
+ return jp_common_models_1.AppScreenDialog.CreateStandardDialog(jp_common_models_1.AppScreenDialogIdEnum.DIALOG_TOURNAMENT_BUY_TICKET, this.localeService.t('common.rooms.screen.buyTicket.title', { lang: this.lang }), this.localeService.t('common.rooms.screen.buyTicket.description', { lang: this.lang }), jp_common_models_1.AppScreenSectionButtons.CreateFullButtonSection(jp_common_models_1.AppScreenSectionButton.CreateTextButton('Ok'), jp_common_models_1.AppScreenSectionButton.CreateTextButton('Cancel')));
8
+ }
9
+ }
10
+ exports.TournamentBuyTicketDialogView = TournamentBuyTicketDialogView;
11
+ //# sourceMappingURL=tournament-buy-ticket-dialog.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tournament-buy-ticket-dialog.view.js","sourceRoot":"","sources":["../../src/views/tournament-buy-ticket-dialog.view.ts"],"names":[],"mappings":";;;AAAA,uDAM2B;AAE3B,MAAa,6BAA8B,SAAQ,4CAAyB;IACxE,KAAK;QACD,OAAO,kCAAe,CAAC,oBAAoB,CACvC,wCAAqB,CAAC,4BAA4B,EAClD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAChF,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,2CAA2C,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EACtF,0CAAuB,CAAC,uBAAuB,CAC3C,yCAAsB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAC7C,yCAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CACpD,CACJ,CAAC;IACN,CAAC;CACJ;AAZD,sEAYC"}
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "jp.ms.common.modules",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "author": "",
8
8
  "license": "ISC",
9
9
  "dependencies": {
10
- "dayjs": "1.11.18",
11
10
  "@nestjs/common": "11.1.0",
12
11
  "@nestjs/config": "4.0.2",
13
12
  "@nestjs/core": "11.1.0",
14
13
  "@nestjs/mongoose": "11.0.4",
15
14
  "@nestjs/websockets": "11.1.9",
16
- "jp.common.models": "1.0.10",
15
+ "dayjs": "1.11.18",
16
+ "jp.common.models": "1.1.1",
17
17
  "jp.common.utils": "1.0.2",
18
- "jp.db.schemas": "2.0.9",
19
- "jp.ms.common.engine": "3.0.4",
18
+ "jp.db.schemas": "2.1.10",
19
+ "jp.ms.common.engine": "3.0.8",
20
20
  "mongoose": "9.1.5",
21
- "node-schedule": "2.1.1",
22
21
  "nestjs-i18n": "10.5.1",
22
+ "node-schedule": "2.1.1",
23
23
  "prom-client": "^15.1.0",
24
24
  "reflect-metadata": "0.2.2",
25
25
  "rxjs": "7.8.2",
@@ -43,4 +43,4 @@
43
43
  "src",
44
44
  "dist"
45
45
  ]
46
- }
46
+ }
@@ -0,0 +1,57 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IAppScreenDialog } from 'jp.common.models';
3
+ import { ApiProperty } from '@nestjs/swagger';
4
+ import { IsString } from 'class-validator';
5
+
6
+ import { AppScreenSectionButtonsDto } from './app-screen-section-buttons.dto';
7
+
8
+ export class AppScreenDialogDto implements IAppScreenDialog {
9
+ @ApiProperty({
10
+ description: 'id',
11
+ required: true,
12
+ type: String,
13
+ })
14
+ @Expose()
15
+ @IsString()
16
+ id: string;
17
+
18
+ @ApiProperty({
19
+ description: 'type',
20
+ required: true,
21
+ type: String,
22
+ })
23
+ @Expose()
24
+ @IsString()
25
+ type: string;
26
+
27
+ @ApiProperty({
28
+ description: 'isOpen',
29
+ required: true,
30
+ type: Boolean,
31
+ })
32
+ @Expose()
33
+ @IsString()
34
+ isOpen: boolean;
35
+
36
+ @ApiProperty({
37
+ description: 'title',
38
+ required: true,
39
+ type: String,
40
+ })
41
+ @Expose()
42
+ @IsString()
43
+ title: string;
44
+
45
+ @ApiProperty({
46
+ description: 'description',
47
+ required: true,
48
+ type: String,
49
+ })
50
+ @Expose()
51
+ @IsString()
52
+ description?: string;
53
+
54
+ @Type(() => AppScreenSectionButtonsDto)
55
+ @Expose()
56
+ buttons: AppScreenSectionButtonsDto;
57
+ }
@@ -1,10 +1,11 @@
1
1
  import { ApiProperty } from '@nestjs/swagger';
2
- import { Expose, Type } from 'class-transformer';
2
+ import { Expose, plainToInstance, Type } from 'class-transformer';
3
3
  import { IsArray, IsString, ValidateNested } from 'class-validator';
4
4
  import { IAppScreen } from 'jp.common.models';
5
5
 
6
6
  import { AppScreenSectionDto } from './app-screen-section.dto';
7
7
  import { AppScreenAppBarDto } from './app-screen-app-bar.dto';
8
+ import { AppScreenDialogDto } from './app-screen-dialog.dto';
8
9
 
9
10
  export class AppScreenDto implements IAppScreen {
10
11
  @ApiProperty({
@@ -31,7 +32,17 @@ export class AppScreenDto implements IAppScreen {
31
32
  @Expose()
32
33
  sections: Array<AppScreenSectionDto>;
33
34
 
35
+ @IsArray()
36
+ @ValidateNested({ each: true })
37
+ @Type(() => AppScreenDialogDto)
38
+ @Expose()
39
+ dialogs?: Array<AppScreenDialogDto>;
40
+
34
41
  @Type(() => AppScreenAppBarDto)
35
42
  @Expose()
36
43
  appBar?: AppScreenAppBarDto;
44
+
45
+ constructor(screen: IAppScreen) {
46
+ return plainToInstance(AppScreenDto, screen, { excludeExtraneousValues: true });
47
+ }
37
48
  }
@@ -10,7 +10,7 @@ export class PlayerCheckStateDto {
10
10
  })
11
11
  @Expose()
12
12
  @IsString()
13
- playerId?: string;
13
+ playerId: string;
14
14
 
15
15
  @ApiProperty({
16
16
  description: 'redirect link',
@@ -21,7 +21,7 @@ export class PlayerCheckStateDto {
21
21
  @IsString()
22
22
  redirectUrl: string;
23
23
 
24
- static fromEntities(redirectUrl: string, playerId?: string): PlayerCheckStateDto {
24
+ static fromEntities(redirectUrl: string, playerId: string): PlayerCheckStateDto {
25
25
  const dto = new PlayerCheckStateDto();
26
26
  dto.redirectUrl = redirectUrl;
27
27
  dto.playerId = playerId
@@ -0,0 +1,163 @@
1
+ import { Global, InternalServerErrorException, Module } from '@nestjs/common';
2
+ import { MongooseModule } from '@nestjs/mongoose';
3
+ import {
4
+ ActivityLog,
5
+ ActivityLogRepository,
6
+ ActivityLogSchema,
7
+ User,
8
+ UserSchema,
9
+ UsersRepository,
10
+ AchievementRepository,
11
+ Achievement,
12
+ AchievementSchema
13
+ } from 'jp.db.schemas';
14
+ import {
15
+ BaseAppEvent,
16
+ BaseUserAppEvent,
17
+ EarnOneMillionAchievement,
18
+ GotLevel10Achievement,
19
+ GotLevel3Achievement,
20
+ Playd10GamesAchievement,
21
+ SnackbarSendToPlayerWsEvent,
22
+ Take1PlaceOnManyTablesTournamentAchievement,
23
+ Take2Or3PlaceOnManyTablesTournamentAchievement,
24
+ UserGotNewLevelAppEvent,
25
+ UserPlayedTheGameAppEvent,
26
+ UserWonManyTablesTournamentAppEvent,
27
+ UserWonOneTableTournamentAppEvent,
28
+ UserWonTheGameAppEvent,
29
+ Won3GamesAchievement, Won3ProfiAchievement,
30
+ WonOneTableTournament3TimesAchievement
31
+ } from 'jp.ms.common.engine';
32
+ import { AppScreenIconEnum } from 'jp.common.models';
33
+
34
+ import { EventsBusAppSubscribeService } from '../event-bus/events-bus.app.subscribe.service';
35
+ import { PlayersManagerService } from '../players-manager';
36
+
37
+
38
+ @Global()
39
+ @Module({
40
+ imports: [
41
+ MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
42
+ MongooseModule.forFeature([{ name: ActivityLog.name, schema: ActivityLogSchema }]),
43
+ MongooseModule.forFeature([{ name: Achievement.name, schema: AchievementSchema }]),
44
+ ],
45
+ providers: [
46
+ UsersRepository,
47
+ ActivityLogRepository,
48
+ AchievementRepository,
49
+ EventsBusAppSubscribeService,
50
+ ],
51
+ })
52
+ export abstract class BaseAchievementsModule {
53
+ constructor(
54
+ protected readonly eventsBusAppSubscribeService: EventsBusAppSubscribeService,
55
+ protected readonly playersManager: PlayersManagerService,
56
+ protected readonly usersRepository: UsersRepository,
57
+ protected readonly activityLogRepository: ActivityLogRepository,
58
+ protected readonly achievementRepository: AchievementRepository,
59
+ ) {
60
+ }
61
+
62
+ async onModuleInit() {
63
+ this.eventsBusAppSubscribeService.subscribe(this.onHandleAppEvent);
64
+ }
65
+
66
+ protected async onHandleAppEvent(event: BaseAppEvent) {
67
+ if (event instanceof BaseUserAppEvent) {
68
+ const userId = event.userId;
69
+ const player = this.playersManager.getPlayerById(userId);
70
+ const foundUser = await this.usersRepository.findById(userId);
71
+ const allAchievements: Array<Achievement> = await this.achievementRepository.findAchievements();
72
+
73
+ if (!player || !foundUser) {
74
+ throw new InternalServerErrorException();
75
+ }
76
+
77
+ if (event instanceof UserGotNewLevelAppEvent) {
78
+ // TODO подумать куда перенести LEVEL UP
79
+ player.sendMessage(new SnackbarSendToPlayerWsEvent(
80
+ AppScreenIconEnum.ARROW_UPWARD,
81
+ 'level up',
82
+ 'buttonText'
83
+ ));
84
+
85
+ if (foundUser.hasNoAchievement(GotLevel3Achievement.code)) {
86
+ if (new GotLevel3Achievement(event.newLevel).userGotAchievement()) {
87
+ this.giveAchievement(allAchievements, GotLevel3Achievement.code, userId);
88
+ }
89
+ }
90
+
91
+ if (foundUser.hasNoAchievement(GotLevel10Achievement.code)) {
92
+ if (new GotLevel10Achievement(event.newLevel).userGotAchievement()) {
93
+ this.giveAchievement(allAchievements, GotLevel10Achievement.code, userId);
94
+ }
95
+ }
96
+
97
+ } else if (event instanceof UserPlayedTheGameAppEvent) {
98
+ if (foundUser.hasNoAchievement(Playd10GamesAchievement.code)) {
99
+ const playdGamesCount = await this.activityLogRepository.getUserPlayedGamesCount(userId);
100
+
101
+ if (new Playd10GamesAchievement(playdGamesCount).userGotAchievement()) {
102
+ this.giveAchievement(allAchievements, Playd10GamesAchievement.code, userId);
103
+ }
104
+ }
105
+ } else if (event instanceof UserWonTheGameAppEvent) {
106
+ if (foundUser.hasNoAchievement(Won3GamesAchievement.code)) {
107
+ const wonGamesCount = await this.activityLogRepository.getUserWonGamesCount(userId);
108
+
109
+ if (new Won3GamesAchievement(wonGamesCount).userGotAchievement()) {
110
+ this.giveAchievement(allAchievements, Won3GamesAchievement.code, userId);
111
+ }
112
+ }
113
+
114
+ if (foundUser.hasNoAchievement(Won3ProfiAchievement.code)) {
115
+ const wonProfiCount = await this.activityLogRepository.getUserWonProfiCount(userId);
116
+ if (new Won3ProfiAchievement(wonProfiCount).userGotAchievement()) {
117
+ this.giveAchievement(allAchievements, Won3ProfiAchievement.code, userId);
118
+ }
119
+ }
120
+
121
+ if (foundUser.hasNoAchievement(EarnOneMillionAchievement.code)) {
122
+ if (new EarnOneMillionAchievement(foundUser.balance).userGotAchievement()) {
123
+ this.giveAchievement(allAchievements, EarnOneMillionAchievement.code, userId);
124
+ }
125
+ }
126
+ } else if (event instanceof UserWonOneTableTournamentAppEvent) {
127
+ if (foundUser.hasNoAchievement(WonOneTableTournament3TimesAchievement.code)) {
128
+ const wonFastTournamentCount = await this.activityLogRepository.getUserWonOneTableTournamentCount(userId);
129
+ if (new WonOneTableTournament3TimesAchievement(wonFastTournamentCount).userGotAchievement()) {
130
+ this.giveAchievement(allAchievements, WonOneTableTournament3TimesAchievement.code, userId);
131
+ }
132
+ }
133
+ } else if (event instanceof UserWonManyTablesTournamentAppEvent) {
134
+ if (foundUser.hasNoAchievement(Take1PlaceOnManyTablesTournamentAchievement.code)) {
135
+ if (new Take1PlaceOnManyTablesTournamentAchievement(event.rank)) {
136
+ this.giveAchievement(allAchievements, Take1PlaceOnManyTablesTournamentAchievement.code, userId);
137
+ }
138
+ }
139
+
140
+ if (foundUser.hasNoAchievement(Take2Or3PlaceOnManyTablesTournamentAchievement.code)) {
141
+ if (new Take2Or3PlaceOnManyTablesTournamentAchievement(event.rank)) {
142
+ this.giveAchievement(allAchievements, Take2Or3PlaceOnManyTablesTournamentAchievement.code, userId);
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ protected async giveAchievement(allAchievements: Array<Achievement>, achievementCode: string, userId: string) {
150
+ const foundAchievement = allAchievements.find((item) => item.code === achievementCode);
151
+ const player = this.playersManager.getPlayerById(userId);
152
+
153
+ if (foundAchievement && player) {
154
+ await this.usersRepository.addAchievement(userId, achievementCode);
155
+
156
+ player.sendMessage(new SnackbarSendToPlayerWsEvent(
157
+ AppScreenIconEnum.EMOJI_EVENTS,
158
+ foundAchievement.title,
159
+ foundAchievement.description
160
+ ));
161
+ }
162
+ }
163
+ }
@@ -0,0 +1 @@
1
+ export { BaseAchievementsModule } from './base-achievements.module';
@@ -0,0 +1,21 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { BaseAppEvent } from 'jp.ms.common.engine';
3
+ import { Subject } from 'rxjs';
4
+
5
+
6
+ @Injectable()
7
+ export class EventsBusAppSubscribeService {
8
+ private readonly appEventSubject: Subject<BaseAppEvent>;
9
+
10
+ constructor() {
11
+ this.appEventSubject = new Subject<BaseAppEvent>();
12
+ }
13
+
14
+ pushNewEvent(event: BaseAppEvent) {
15
+ this.appEventSubject.next(event);
16
+ }
17
+
18
+ subscribe(onHandleAppEvent: (event: BaseAppEvent) => void) {
19
+ this.appEventSubject.subscribe(onHandleAppEvent);
20
+ }
21
+ }
@@ -0,0 +1,34 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { GamePlayer, RoomUpdateStateEvent } from "jp.ms.common.engine";
3
+ import { Subject } from 'rxjs';
4
+
5
+ @Injectable()
6
+ export class EventsBusMainTablesSubscribeService {
7
+ private readonly roomStatesSubject: Subject<RoomUpdateStateEvent>;
8
+ private readonly tablesSubscribers: Map<string, GamePlayer>;
9
+
10
+ constructor() {
11
+ this.roomStatesSubject = new Subject<RoomUpdateStateEvent>();
12
+ this.tablesSubscribers = new Map();
13
+ }
14
+
15
+ getTablesSubscribers() {
16
+ return Array.from(this.tablesSubscribers.values());
17
+ }
18
+
19
+ addTablesSubscriber(player: GamePlayer) {
20
+ this.tablesSubscribers.set(player.id, player);
21
+ }
22
+
23
+ removeTablesSubbcriber(player: GamePlayer) {
24
+ this.tablesSubscribers.delete(player.id);
25
+ }
26
+
27
+ pushNewRoomState(event: RoomUpdateStateEvent) {
28
+ this.roomStatesSubject.next(event);
29
+ }
30
+
31
+ subscribe(onHandleStatusRoomChange: () => void) {
32
+ this.roomStatesSubject.subscribe(onHandleStatusRoomChange);
33
+ }
34
+ }
@@ -0,0 +1,6 @@
1
+ import { Injectable } from "@nestjs/common";
2
+
3
+ import { EventsBusTournamentSubscribeService } from './events-bus.tournament.subscribe.service';
4
+
5
+ @Injectable()
6
+ export class EventsBusManyTablesTournamentSubscribeService extends EventsBusTournamentSubscribeService {}
@@ -0,0 +1,23 @@
1
+ import { Global, Module } from '@nestjs/common';
2
+
3
+ import { EventsBusMainTablesSubscribeService } from './events-bus.main-tables.subscribe.service';
4
+ import { EventsBusOneTableTournamentSubscribeService } from './events-bus.one-table-tournament.subscribe.service';
5
+ import { EventsBusManyTablesTournamentSubscribeService } from './events-bus.many-tables-tournament.subscribe.service';
6
+ import { EventsBusAppSubscribeService } from './events-bus.app.subscribe.service';
7
+
8
+ @Global()
9
+ @Module({
10
+ providers: [
11
+ EventsBusMainTablesSubscribeService,
12
+ EventsBusOneTableTournamentSubscribeService,
13
+ EventsBusManyTablesTournamentSubscribeService,
14
+ EventsBusAppSubscribeService,
15
+ ],
16
+ exports: [
17
+ EventsBusMainTablesSubscribeService,
18
+ EventsBusOneTableTournamentSubscribeService,
19
+ EventsBusManyTablesTournamentSubscribeService,
20
+ EventsBusAppSubscribeService,
21
+ ]
22
+ })
23
+ export class EventsBusModule { }
@@ -0,0 +1,6 @@
1
+ import { Injectable } from "@nestjs/common";
2
+
3
+ import { EventsBusTournamentSubscribeService } from './events-bus.tournament.subscribe.service';
4
+
5
+ @Injectable()
6
+ export class EventsBusOneTableTournamentSubscribeService extends EventsBusTournamentSubscribeService {}
@@ -0,0 +1,19 @@
1
+ import { RoomUpdateStateEvent } from 'jp.ms.common.engine';
2
+ import { Subject } from 'rxjs';
3
+
4
+
5
+ export abstract class EventsBusTournamentSubscribeService {
6
+ private readonly roomStatesSubject: Subject<RoomUpdateStateEvent>;
7
+
8
+ constructor() {
9
+ this.roomStatesSubject = new Subject<RoomUpdateStateEvent>();
10
+ }
11
+
12
+ pushNewRoomState(event: RoomUpdateStateEvent) {
13
+ this.roomStatesSubject.next(event);
14
+ }
15
+
16
+ subscribe(onHandleStatusRoomChange: (event: RoomUpdateStateEvent) => void) {
17
+ this.roomStatesSubject.subscribe(onHandleStatusRoomChange);
18
+ }
19
+ }
@@ -0,0 +1,5 @@
1
+ export { EventsBusModule } from './events-bus.module';
2
+ export { EventsBusMainTablesSubscribeService } from './events-bus.main-tables.subscribe.service';
3
+ export { EventsBusOneTableTournamentSubscribeService } from './events-bus.one-table-tournament.subscribe.service';
4
+ export { EventsBusManyTablesTournamentSubscribeService } from './events-bus.many-tables-tournament.subscribe.service';
5
+ export { EventsBusAppSubscribeService } from './events-bus.app.subscribe.service';
@@ -17,4 +17,5 @@ export {
17
17
  TournamentOneTableRoomsManagerService,
18
18
  TournamentOneTableRoomsManagerModule,
19
19
  } from './tournament-one-table-rooms-manager';
20
-
20
+ export { EventsBusModule, EventsBusMainTablesSubscribeService } from './event-bus'
21
+ export { BaseAchievementsModule } from './base-achievements/base-achievements.module'
@@ -0,0 +1,107 @@
1
+ import {
2
+ AppScreen,
3
+ AppScreenAppBar,
4
+ AppScreenIconEnum,
5
+ AppScreenIdEnum,
6
+ AppScreenSection,
7
+ AppScreenSectionButton,
8
+ AppScreenSectionImage,
9
+ AppScreenSectionListItem,
10
+ IAppScreen,
11
+ UniversalScreenView,
12
+ ILocaleService,
13
+ router,
14
+ AppScreenSectionButtons,
15
+ } from "jp.common.models";
16
+ import {
17
+ SimpleRoom,
18
+ OneTableTournamentRoom,
19
+ ManyTablesTournamentRoom,
20
+ } from "jp.ms.common.engine";
21
+ import { replacePattern } from "jp.common.utils";
22
+
23
+ import { TournamentBuyTicketDialogView } from "../../views";
24
+
25
+ export class MainTablesListScreenView extends UniversalScreenView {
26
+ private readonly simpleRooms: Array<SimpleRoom>;
27
+ private readonly oneTableTournamentRooms: Array<OneTableTournamentRoom>;
28
+ private readonly manyTablesTournamentRooms: Array<ManyTablesTournamentRoom>;
29
+
30
+ constructor(
31
+ localeService: ILocaleService,
32
+ lang: string,
33
+ simpleRooms: Array<SimpleRoom>,
34
+ oneTableTournamentRooms: Array<OneTableTournamentRoom>,
35
+ manyTablesTournamentRooms: Array<ManyTablesTournamentRoom>,
36
+ ) {
37
+ super(localeService, lang);
38
+ this.simpleRooms = simpleRooms;
39
+ this.oneTableTournamentRooms = oneTableTournamentRooms;
40
+ this.manyTablesTournamentRooms = manyTablesTournamentRooms;
41
+ }
42
+
43
+ build(): IAppScreen {
44
+ const oneTableTournamentsCardList = this.oneTableTournamentRooms.map((room) =>
45
+ AppScreenSectionListItem.CreateCardListItemMini(
46
+ room.getId(),
47
+ room.getTitle(this.lang),
48
+ room.getSubtitle(this.lang),
49
+ AppScreenSectionImage.CreateIconImage(AppScreenIconEnum.EMOJI_EVENTS),
50
+ true,
51
+ router.getOneTableTournamentStatusPath(room.getId()),
52
+ ));
53
+
54
+ const manyTablesTournamentsCardList = this.manyTablesTournamentRooms.map((room) =>
55
+ AppScreenSectionListItem.CreateCardListItemExtended(
56
+ room.getId(),
57
+ room.getTitle(this.lang),
58
+ room.getSubtitle(this.lang),
59
+ AppScreenSectionImage.CreateIconImage(AppScreenIconEnum.EMOJI_EVENTS),
60
+ true,
61
+ true,
62
+ AppScreenSectionImage.CreateIconImage(AppScreenIconEnum.EMOJI_EVENTS),
63
+ room.getDescription(this.lang),
64
+ AppScreenSectionButtons.CreatePrimaryButtonSection(AppScreenSectionButton.CreateTextButton('button')),
65
+ ));
66
+
67
+ const simpleRoomsTableCardList = this.simpleRooms.reduce<Array<AppScreenSectionListItem>>((result, room) => {
68
+ const list = room.getTables().map((table) => AppScreenSectionListItem.CreateCardListItemMini(
69
+ table.getId(),
70
+ replacePattern(table.getTitle(this.lang), { NUMBER: table.getNumber().toString() }),
71
+ replacePattern(table.getSubtitle(this.lang), {
72
+ HALF_BET: table.getHalfBet().toString(),
73
+ BET: table.getBet().toString()
74
+ }),
75
+ AppScreenSectionImage.CreateUrlImage(`${table.getPlayers().length}/${table.getTableSize()}`),
76
+ true,
77
+ router.getRoomPath(table.getId()),
78
+ ));
79
+
80
+ return [...result, ...list];
81
+ }, []);
82
+
83
+ return AppScreen.CreateStandardScreen(AppScreenIdEnum.ROOMS)
84
+ .addAppBar(
85
+ AppScreenAppBar.CreateStandardAppBar(
86
+ this.localeService.t('common.rooms.screen.title', { lang: this.lang }),
87
+ AppScreenSectionButton.CreateArrowBackButton(this.localeService.t('common.button.back', { lang: this.lang })),
88
+ ),
89
+ )
90
+ .addSection(
91
+ AppScreenSection.CreateCardListSection(
92
+ 'id1',
93
+ [
94
+ ...manyTablesTournamentsCardList,
95
+ ...oneTableTournamentsCardList,
96
+ ...simpleRoomsTableCardList
97
+ ]
98
+ ),
99
+ )
100
+ .addDialog(
101
+ new TournamentBuyTicketDialogView(
102
+ this.localeService,
103
+ this.lang,
104
+ ).build(),
105
+ )
106
+ }
107
+ }
@@ -7,23 +7,32 @@ import { MainService } from './main.service';
7
7
 
8
8
  @Controller('main')
9
9
  export class MainController {
10
- constructor (
10
+ constructor(
11
11
  private readonly mainService: MainService,
12
- ) {
13
- }
12
+ ) { }
14
13
 
15
14
  @Get('player/check/state')
16
- checkState (@Headers() headers: IAppHeaders): PlayerCheckStateDto {
17
- return this.mainService.playerCheckState(headers.client_auth_token);
15
+ checkState(@Headers() headers: IAppHeaders): Promise<PlayerCheckStateDto> {
16
+ return this.mainService.playerCheckState(headers.client_auth_token, headers.client_game);
18
17
  }
19
18
 
20
19
  @Get('tables')
21
- getScreen (@Headers() headers: IAppHeaders): Promise<IBaseAppScreen> {
20
+ getScreen(@Headers() headers: IAppHeaders): IBaseAppScreen {
22
21
  return this.mainService.getScreen(headers.client_language);
23
22
  }
24
23
 
24
+ @Get('tables/subscribe')
25
+ subscribeOnTablesScreen(@Headers() headers: IAppHeaders): Promise<void> {
26
+ return this.mainService.subscribeOnTablesScreen(headers.client_language);
27
+ }
28
+
29
+ @Get('tables/unsubscribe')
30
+ unsubscribeFromTablesScreen(@Headers() headers: IAppHeaders): Promise<void> {
31
+ return this.mainService.unsubscribeFromTablesScreen(headers.client_language);
32
+ }
33
+
25
34
  @Get('findFreeTable')
26
- findFreeTable (@Headers() headers: IAppHeaders) {
35
+ findFreeTable(@Headers() headers: IAppHeaders) {
27
36
  return this.mainService.findFreeTable(headers.client_auth_token);
28
37
  }
29
38
  }