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
@@ -0,0 +1,8 @@
1
+ import { ILocaleService, AchievementSnackbarComponent, UniversalScreenSnackbarView } from 'jp.common.models';
2
+ import { Achievement } from 'jp.db.schemas';
3
+ export declare class AchievementSnackbarView extends UniversalScreenSnackbarView {
4
+ private achievement;
5
+ private bonus;
6
+ constructor(localeService: ILocaleService, lang: string, achievement: Achievement, bonus: number);
7
+ build(): AchievementSnackbarComponent;
8
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AchievementSnackbarView = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const jp_common_models_1 = require("jp.common.models");
6
+ const jp_common_utils_1 = require("jp.common.utils");
7
+ class AchievementSnackbarView extends jp_common_models_1.UniversalScreenSnackbarView {
8
+ achievement;
9
+ bonus;
10
+ constructor(localeService, lang, achievement, bonus) {
11
+ super(localeService, lang);
12
+ this.achievement = achievement;
13
+ this.bonus = bonus;
14
+ }
15
+ build() {
16
+ return new jp_common_models_1.AchievementSnackbarComponent(`${jp_common_models_1.AppScreenSnackbarIdEnum.SNACKBAR_ACHIEVEMENT}_${(0, crypto_1.randomUUID)()}`, this.localeService.t('common.server.message.code.4011', {
17
+ lang: this.lang,
18
+ args: {
19
+ TITLE: this.getDbResource(this.achievement.title),
20
+ PRIZE: (0, jp_common_utils_1.formatChips)(this.bonus, this.lang, true),
21
+ },
22
+ }));
23
+ }
24
+ }
25
+ exports.AchievementSnackbarView = AchievementSnackbarView;
26
+ //# sourceMappingURL=achievement-snackbar.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"achievement-snackbar.view.js","sourceRoot":"","sources":["../../src/views/achievement-snackbar.view.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AACpC,uDAK0B;AAC1B,qDAA8C;AAG9C,MAAa,uBAAwB,SAAQ,8CAA2B;IAC9D,WAAW,CAAc;IACzB,KAAK,CAAS;IAEtB,YACE,aAA6B,EAC7B,IAAY,EACZ,WAAwB,EACxB,KAAa;QAEb,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,+CAA4B,CACrC,GAAG,0CAAuB,CAAC,oBAAoB,IAAI,IAAA,mBAAU,GAAE,EAAE,EACjE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,iCAAiC,EAAE;YACtD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACjD,KAAK,EAAE,IAAA,6BAAW,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;aAChD;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AA3BD,0DA2BC"}
@@ -0,0 +1,13 @@
1
+ import { IAppScreenDialog, ILocaleService, UniversalView } from 'jp.common.models';
2
+ import { GameMaster, GamePlayer } from 'jp.ms.common.engine';
3
+ export declare abstract class BaseTableView extends UniversalView {
4
+ abstract getConfirmExitDialog(): IAppScreenDialog | undefined;
5
+ protected ROUND_TABLE_TARGET_SEAT_MAPPING: Record<number, number>;
6
+ protected readonly gameMaster: GameMaster;
7
+ protected readonly gamePlayer: GamePlayer;
8
+ constructor(localeService: ILocaleService, lang: string, gameMaster: GameMaster, gamePlayer: GamePlayer);
9
+ protected getGameMaster<T extends GameMaster>(): T;
10
+ protected getGamePlayer<T extends GamePlayer>(): T;
11
+ protected getSeatShift(): number;
12
+ protected getTargetSeat(): number;
13
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseTableView = void 0;
4
+ const jp_common_models_1 = require("jp.common.models");
5
+ class BaseTableView extends jp_common_models_1.UniversalView {
6
+ ROUND_TABLE_TARGET_SEAT_MAPPING = {
7
+ 2: 1,
8
+ 3: 2,
9
+ 4: 2,
10
+ 5: 2,
11
+ 6: 3,
12
+ };
13
+ gameMaster;
14
+ gamePlayer;
15
+ constructor(localeService, lang, gameMaster, gamePlayer) {
16
+ super(localeService, lang);
17
+ this.gameMaster = gameMaster;
18
+ this.gamePlayer = gamePlayer;
19
+ }
20
+ getGameMaster() {
21
+ return this.gameMaster;
22
+ }
23
+ getGamePlayer() {
24
+ return this.gamePlayer;
25
+ }
26
+ getSeatShift() {
27
+ return (this.gameMaster.table.seats.getShift(this.gamePlayer.seatNumber, this.getTargetSeat()) ?? 0);
28
+ }
29
+ getTargetSeat() {
30
+ return (this.ROUND_TABLE_TARGET_SEAT_MAPPING[this.gameMaster.room.getTableSize()] ?? 0);
31
+ }
32
+ }
33
+ exports.BaseTableView = BaseTableView;
34
+ //# sourceMappingURL=base-table.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-table.view.js","sourceRoot":"","sources":["../../src/views/base-table.view.ts"],"names":[],"mappings":";;;AAAA,uDAI0B;AAG1B,MAAsB,aAAc,SAAQ,gCAAa;IAG7C,+BAA+B,GAA2B;QAClE,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACL,CAAC;IAEiB,UAAU,CAAa;IACvB,UAAU,CAAa;IAE1C,YACE,aAA6B,EAC7B,IAAY,EACZ,UAAsB,EACtB,UAAsB;QAEtB,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAC,UAAe,CAAC;IAC9B,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAC,UAAe,CAAC;IAC9B,CAAC;IAES,YAAY;QACpB,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAClC,IAAI,CAAC,UAAU,CAAC,UAAU,EAC1B,IAAI,CAAC,aAAa,EAAE,CACrB,IAAI,CAAC,CACP,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,CACL,IAAI,CAAC,+BAA+B,CAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CACpC,IAAI,CAAC,CACP,CAAC;IACJ,CAAC;CACF;AAjDD,sCAiDC"}
@@ -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';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableSummaryView = exports.OneTableTournamentConfirmExitDialogView = exports.ManyTablesTournamentConfirmExitDialogView = exports.SimpleRoomConfirmExitDialogView = exports.TournamentBuyTicketDialogView = void 0;
3
+ exports.BaseTableView = exports.LevelUpSnackbarView = exports.AchievementSnackbarView = exports.TableSummaryView = exports.OneTableTournamentConfirmExitDialogView = exports.ManyTablesTournamentConfirmExitDialogView = exports.SimpleRoomConfirmExitDialogView = exports.TournamentBuyTicketDialogView = void 0;
4
4
  var tournament_buy_ticket_dialog_view_1 = require("./tournament-buy-ticket-dialog.view");
5
5
  Object.defineProperty(exports, "TournamentBuyTicketDialogView", { enumerable: true, get: function () { return tournament_buy_ticket_dialog_view_1.TournamentBuyTicketDialogView; } });
6
6
  var simple_room_conifrm_exit_dialog_view_1 = require("./simple-room-conifrm-exit-dialog.view");
@@ -11,4 +11,10 @@ var one_table_tournament_conifrm_exit_dialog_view_1 = require("./one-table-tourn
11
11
  Object.defineProperty(exports, "OneTableTournamentConfirmExitDialogView", { enumerable: true, get: function () { return one_table_tournament_conifrm_exit_dialog_view_1.OneTableTournamentConfirmExitDialogView; } });
12
12
  var table_summary_view_1 = require("./table-summary.view");
13
13
  Object.defineProperty(exports, "TableSummaryView", { enumerable: true, get: function () { return table_summary_view_1.TableSummaryView; } });
14
+ var achievement_snackbar_view_1 = require("./achievement-snackbar.view");
15
+ Object.defineProperty(exports, "AchievementSnackbarView", { enumerable: true, get: function () { return achievement_snackbar_view_1.AchievementSnackbarView; } });
16
+ var level_up_snackbar_view_1 = require("./level-up-snackbar.view");
17
+ Object.defineProperty(exports, "LevelUpSnackbarView", { enumerable: true, get: function () { return level_up_snackbar_view_1.LevelUpSnackbarView; } });
18
+ var base_table_view_1 = require("./base-table.view");
19
+ Object.defineProperty(exports, "BaseTableView", { enumerable: true, get: function () { return base_table_view_1.BaseTableView; } });
14
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;;AAAA,yFAAoF;AAA3E,kJAAA,6BAA6B,OAAA;AACtC,+FAAyF;AAAhF,uJAAA,+BAA+B,OAAA;AACxC,qHAA8G;AAArG,4KAAA,yCAAyC,OAAA;AAClD,iHAA0G;AAAjG,wKAAA,uCAAuC,OAAA;AAChD,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.ts"],"names":[],"mappings":";;;AAAA,yFAAoF;AAA3E,kJAAA,6BAA6B,OAAA;AACtC,+FAAyF;AAAhF,uJAAA,+BAA+B,OAAA;AACxC,qHAA8G;AAArG,4KAAA,yCAAyC,OAAA;AAClD,iHAA0G;AAAjG,wKAAA,uCAAuC,OAAA;AAChD,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAChC,mEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAC5B,qDAAkD;AAAzC,gHAAA,aAAa,OAAA"}
@@ -0,0 +1,7 @@
1
+ import { IAppScreenSnackbar, ILocaleService, UniversalScreenSnackbarView } from 'jp.common.models';
2
+ export declare class LevelUpSnackbarView extends UniversalScreenSnackbarView {
3
+ private newLevel;
4
+ private bonus;
5
+ constructor(localeService: ILocaleService, lang: string, newLevel: number, bonus: number);
6
+ build(): IAppScreenSnackbar;
7
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LevelUpSnackbarView = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const jp_common_models_1 = require("jp.common.models");
6
+ const jp_common_utils_1 = require("jp.common.utils");
7
+ class LevelUpSnackbarView extends jp_common_models_1.UniversalScreenSnackbarView {
8
+ newLevel;
9
+ bonus;
10
+ constructor(localeService, lang, newLevel, bonus) {
11
+ super(localeService, lang);
12
+ this.newLevel = newLevel;
13
+ this.bonus = bonus;
14
+ }
15
+ build() {
16
+ return new jp_common_models_1.LevelUpSnackbarComponent(`${jp_common_models_1.AppScreenSnackbarIdEnum.SNACKBAR_LEVEL_UP}_${(0, crypto_1.randomUUID)()}`, this.localeService.t('common.server.message.code.4010', {
17
+ lang: this.lang,
18
+ args: {
19
+ NEW_LEVEL: this.newLevel.toString(),
20
+ BONUS: (0, jp_common_utils_1.formatChips)(this.bonus, this.lang, true),
21
+ },
22
+ }));
23
+ }
24
+ }
25
+ exports.LevelUpSnackbarView = LevelUpSnackbarView;
26
+ //# sourceMappingURL=level-up-snackbar.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level-up-snackbar.view.js","sourceRoot":"","sources":["../../src/views/level-up-snackbar.view.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AACpC,uDAM0B;AAC1B,qDAA8C;AAE9C,MAAa,mBAAoB,SAAQ,8CAA2B;IAC1D,QAAQ,CAAS;IACjB,KAAK,CAAS;IAEtB,YACE,aAA6B,EAC7B,IAAY,EACZ,QAAgB,EAChB,KAAa;QAEb,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,2CAAwB,CACjC,GAAG,0CAAuB,CAAC,iBAAiB,IAAI,IAAA,mBAAU,GAAE,EAAE,EAC9D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,iCAAiC,EAAE;YACtD,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE;gBACJ,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACnC,KAAK,EAAE,IAAA,6BAAW,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;aAChD;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AA3BD,kDA2BC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jp.ms.common.modules",
3
- "version": "1.0.42",
3
+ "version": "1.0.44",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,10 +13,10 @@
13
13
  "@nestjs/mongoose": "11.0.4",
14
14
  "@nestjs/websockets": "11.1.9",
15
15
  "dayjs": "1.11.18",
16
- "jp.common.models": "1.1.45",
17
- "jp.common.utils": "1.0.6",
18
- "jp.db.schemas": "2.2.14",
19
- "jp.ms.common.engine": "3.0.25",
16
+ "jp.common.models": "1.1.52",
17
+ "jp.common.utils": "1.0.8",
18
+ "jp.db.schemas": "2.2.17",
19
+ "jp.ms.common.engine": "3.0.27",
20
20
  "mongoose": "9.1.5",
21
21
  "nestjs-i18n": "10.5.1",
22
22
  "node-schedule": "2.1.1",
@@ -0,0 +1,250 @@
1
+ import { IActivityLogGameResult } from 'jp.db.schemas';
2
+ import {
3
+ GameMaster,
4
+ GamePlayer,
5
+ GamePlayerMovedAppEvent,
6
+ GamePlayerMovedOnTheTableEvent,
7
+ GamePlayerRoundFinishedAppEvent,
8
+ GameTableFinishedEvent,
9
+ SnackbarSendToPlayerWsEvent,
10
+ UserGotNewLevelAppEvent,
11
+ } from 'jp.ms.common.engine';
12
+
13
+ import { EventsBusAppSubscribeService } from '../modules/event-bus';
14
+ import { LevelUpSnackbarView } from '../views';
15
+
16
+ export interface IUserGameResult {
17
+ userId: string;
18
+ userName: string;
19
+ userAvatarUrl: string;
20
+ balanceAdding: number;
21
+ experienceAdding: number;
22
+ levelAdding: number;
23
+ }
24
+
25
+ export class RoomsManagerService {
26
+ protected getGameTableResults(master: GameMaster) {
27
+ return {
28
+ gameType: master.getRoom().getGameType(),
29
+ gameId: master.getGameRound()?.getId() ?? '',
30
+ roomId: master.getRoom().getId(),
31
+ date: new Date(),
32
+ pot: master.getGameRound()?.getPot() ?? 0,
33
+ players: master
34
+ .getTable()
35
+ .getPlayers()
36
+ .map((item) => ({
37
+ userId: item.id,
38
+ fullName: item.fullName,
39
+ profit: item.profit,
40
+ figures: [],
41
+ })),
42
+ winners: master
43
+ .getGameResultHelper()
44
+ .getWinners()
45
+ .map((item) => ({
46
+ userId: item.id,
47
+ fullName: item.fullName,
48
+ profit: item.profit,
49
+ figures: [],
50
+ })),
51
+ history:
52
+ master
53
+ .getGameRound()
54
+ ?.getHistory()
55
+ .map((item) => ({
56
+ userId: item.userId,
57
+ fullName: item.fullName,
58
+ date: item.date,
59
+ actionType: item.actionType,
60
+ state: item.state,
61
+ turnNumber: item.turnNumber,
62
+ moveAction: item.move?.action,
63
+ moveData: item.move ?? undefined,
64
+ figures:
65
+ item.figures?.map((item) => ({
66
+ figureId: item.id,
67
+ type: item.type,
68
+ name: item.getName(),
69
+ })) ?? [],
70
+ })) ?? [],
71
+ };
72
+ }
73
+
74
+ protected getGameTableActivityLogResult(
75
+ master: GameMaster,
76
+ ): IActivityLogGameResult {
77
+ const players = master.table.getPlayers().map((item) => ({
78
+ userId: item.id,
79
+ userName: item.fullName,
80
+ game: master.room.getGameType(),
81
+ channel: '',
82
+ }));
83
+
84
+ const winners = master
85
+ .getGameResultHelper()
86
+ .getWinners()
87
+ .map((item) => ({
88
+ userId: item.id,
89
+ userName: item.fullName,
90
+ game: master.room.getGameType(),
91
+ channel: '',
92
+ }));
93
+
94
+ const loosers = master
95
+ .getGameResultHelper()
96
+ .getLosers()
97
+ .map((item) => ({
98
+ userId: item.id,
99
+ userName: item.fullName,
100
+ game: master.room.getGameType(),
101
+ channel: '',
102
+ }));
103
+
104
+ const foundProfi = master
105
+ .getGameResultHelper()
106
+ .getLosers()
107
+ .find((item) => item.level > 100);
108
+
109
+ return {
110
+ players,
111
+ winners,
112
+ loosers,
113
+ profiWinners: foundProfi ? winners : [],
114
+ };
115
+ }
116
+
117
+ protected getUserGameResults(
118
+ master: GameMaster,
119
+ addBalance: boolean,
120
+ ): IUserGameResult[] {
121
+ return master
122
+ .getTable()
123
+ .getPlayers()
124
+ .map((player) => {
125
+ const experienceAdding =
126
+ master.levelHelper.getNewExperienceAmount(player);
127
+ const levelAdding = master.levelHelper.getNewLevelAdding(
128
+ player.level,
129
+ player.experience + experienceAdding,
130
+ );
131
+
132
+ return {
133
+ userId: player.id,
134
+ userName: player.fullName,
135
+ userAvatarUrl: player.avatarUrl,
136
+ balanceAdding: addBalance ? player.profit : 0,
137
+ experienceAdding,
138
+ levelAdding,
139
+ };
140
+ });
141
+ }
142
+
143
+ protected commitExperience(
144
+ master: GameMaster,
145
+ userGameResults: IUserGameResult[],
146
+ event: GameTableFinishedEvent,
147
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
148
+ levelUpBonus: number,
149
+ ) {
150
+ master.table.getPlayers().forEach((player) => {
151
+ const foundPlayer = userGameResults.find(
152
+ (item) => item.userId === player.id,
153
+ );
154
+ if (foundPlayer) {
155
+ player.addExperience(foundPlayer?.experienceAdding);
156
+ if (foundPlayer.levelAdding === 1) {
157
+ player.levelUp();
158
+ this.processLevelUp(
159
+ event,
160
+ player,
161
+ eventsBusAppSubscribeService,
162
+ levelUpBonus,
163
+ );
164
+ }
165
+ }
166
+ });
167
+ }
168
+
169
+ protected getUserRatings(master: GameMaster) {
170
+ return master
171
+ .getTable()
172
+ .getPlayers()
173
+ .map((player) => {
174
+ return {
175
+ userId: player.id,
176
+ userName: player.fullName,
177
+ userAvatarUrl: player.avatarUrl,
178
+ profit: player.profit,
179
+ game: master.getRoom().getGameType(),
180
+ };
181
+ });
182
+ }
183
+
184
+ protected handleRoomTableGamePlayerMoved = (
185
+ event: GamePlayerMovedOnTheTableEvent,
186
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
187
+ ) => {
188
+ eventsBusAppSubscribeService.pushNewEvent(
189
+ new GamePlayerMovedAppEvent(
190
+ event.gameType,
191
+ event.room.getRoomMaster(),
192
+ event.master,
193
+ event.player,
194
+ ),
195
+ );
196
+ };
197
+
198
+ protected processGameFinishEvent(
199
+ event: GameTableFinishedEvent,
200
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
201
+ ) {
202
+ for (const player of event.master.getTable().getPlayers()) {
203
+ this.processFinishEvent(event, player, eventsBusAppSubscribeService);
204
+ }
205
+ }
206
+
207
+ private processLevelUp(
208
+ event: GameTableFinishedEvent,
209
+ player: GamePlayer,
210
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
211
+ levelUpBonus: number,
212
+ ) {
213
+ eventsBusAppSubscribeService.pushNewEvent(
214
+ new UserGotNewLevelAppEvent(
215
+ event.gameType,
216
+ player.id,
217
+ player.fullName,
218
+ player.level,
219
+ ),
220
+ );
221
+
222
+ player.sendMessage(
223
+ new SnackbarSendToPlayerWsEvent(
224
+ event.gameType,
225
+ player.id,
226
+ new LevelUpSnackbarView(
227
+ event.room.getLocaleService(),
228
+ player.language,
229
+ player.level,
230
+ levelUpBonus,
231
+ ).build(),
232
+ ),
233
+ );
234
+ }
235
+
236
+ private processFinishEvent(
237
+ event: GameTableFinishedEvent,
238
+ player: GamePlayer,
239
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
240
+ ) {
241
+ eventsBusAppSubscribeService.pushNewEvent(
242
+ new GamePlayerRoundFinishedAppEvent(
243
+ event.gameType,
244
+ event.room.getRoomMaster(),
245
+ event.master,
246
+ player,
247
+ ),
248
+ );
249
+ }
250
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ GameResultRepository,
3
+ UsersRepository,
4
+ ActivityLogRepository,
5
+ OneTableTournamentRoomsRepository,
6
+ ManyTablesTournamentRoomsRepository,
7
+ RatingRepository,
8
+ } from 'jp.db.schemas';
9
+ import { GameTableFinishedEvent, TournamentMaster } from 'jp.ms.common.engine';
10
+ import { Connection } from 'mongoose';
11
+
12
+ import { EventsBusAppSubscribeService } from '../modules/event-bus';
13
+
14
+ import { RoomsManagerService } from './rooms-manager.service';
15
+
16
+ export class TournamentRoomsManagerService extends RoomsManagerService {
17
+ protected handleRoomTableGameFinished = async (
18
+ event: GameTableFinishedEvent,
19
+ connection: Connection,
20
+ gameResultRepository: GameResultRepository,
21
+ usersRepository: UsersRepository,
22
+ activityLogRepository: ActivityLogRepository,
23
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
24
+ levelUpBonus: number,
25
+ ) => {
26
+ await this.saveGameTablesResultForTournamentRoom(
27
+ event,
28
+ connection,
29
+ gameResultRepository,
30
+ usersRepository,
31
+ activityLogRepository,
32
+ eventsBusAppSubscribeService,
33
+ levelUpBonus,
34
+ );
35
+ this.processGameFinishEvent(event, eventsBusAppSubscribeService);
36
+ };
37
+
38
+ protected async saveTournamentResult(
39
+ master: TournamentMaster,
40
+ connection: Connection,
41
+ tournamentRepository:
42
+ OneTableTournamentRoomsRepository | ManyTablesTournamentRoomsRepository,
43
+ usersRepository: UsersRepository,
44
+ ratingRepository: RatingRepository,
45
+ ) {
46
+ const userTournamentResult = master.getTournamentResult().map((player) => {
47
+ return {
48
+ userId: player.playerId,
49
+ userName: player.playerName,
50
+ userAvatarUrl: player.playerAvatarUrl,
51
+ balanceAdding: player.profit,
52
+ experienceAdding: 0,
53
+ levelAdding: 0,
54
+ };
55
+ });
56
+
57
+ const ratings = userTournamentResult.map((item) => ({
58
+ userId: item.userId,
59
+ userName: item.userName,
60
+ userAvatarUrl: item.userAvatarUrl,
61
+ profit: item.balanceAdding,
62
+ game: master.getRoom().getGameType(),
63
+ }));
64
+
65
+ const session = await connection.startSession();
66
+ session.startTransaction();
67
+
68
+ try {
69
+ await usersRepository.saveGameResult(userTournamentResult);
70
+ await tournamentRepository.finishTournament(
71
+ master.getTournamentId(),
72
+ master.getTournamentResult(),
73
+ );
74
+ await ratingRepository.addBulkPlayerRating(ratings);
75
+ await session.commitTransaction();
76
+ } catch (error) {
77
+ await session.abortTransaction();
78
+ throw error;
79
+ } finally {
80
+ await session.endSession();
81
+ }
82
+ }
83
+
84
+ private async saveGameTablesResultForTournamentRoom(
85
+ event: GameTableFinishedEvent,
86
+ connection: Connection,
87
+ gameResultRepository: GameResultRepository,
88
+ usersRepository: UsersRepository,
89
+ activityLogRepository: ActivityLogRepository,
90
+ eventsBusAppSubscribeService: EventsBusAppSubscribeService,
91
+ levelUpBonus: number,
92
+ ) {
93
+ const session = await connection.startSession();
94
+ session.startTransaction();
95
+ const master = event.master;
96
+
97
+ try {
98
+ await gameResultRepository.createGameResult(
99
+ this.getGameTableResults(master),
100
+ );
101
+ const userGameResults = this.getUserGameResults(master, false);
102
+ await usersRepository.saveGameResult(userGameResults);
103
+ await activityLogRepository.addGameTableResult(
104
+ this.getGameTableActivityLogResult(master),
105
+ );
106
+ this.commitExperience(
107
+ master,
108
+ userGameResults,
109
+ event,
110
+ eventsBusAppSubscribeService,
111
+ levelUpBonus,
112
+ );
113
+ await session.commitTransaction();
114
+ } catch (error) {
115
+ await session.abortTransaction();
116
+ throw error;
117
+ } finally {
118
+ await session.endSession();
119
+ }
120
+ }
121
+ }
@@ -51,4 +51,13 @@ export class CardDto implements IAppTableCard {
51
51
  @Type(() => Number)
52
52
  @Expose()
53
53
  targets: Array<number>;
54
+
55
+ @ApiProperty({
56
+ description: 'skin',
57
+ required: true,
58
+ type: String,
59
+ })
60
+ @Expose()
61
+ @IsString()
62
+ skin: string;
54
63
  }
@@ -31,6 +31,15 @@ export class PlayerDto implements IAppTablePlayer {
31
31
  @IsString()
32
32
  avatarUrl: string;
33
33
 
34
+ @ApiProperty({
35
+ description: 'avatar frame',
36
+ required: true,
37
+ type: String,
38
+ })
39
+ @Expose()
40
+ @IsString()
41
+ avatarFrame: string;
42
+
34
43
  @ApiProperty({
35
44
  description: 'stack',
36
45
  required: true,
@@ -23,26 +23,16 @@ export class GlobalExceptionFilter implements ExceptionFilter {
23
23
  const ctx = host.switchToHttp();
24
24
  const response = ctx.getResponse<Response>();
25
25
 
26
- if (exception instanceof HttpExceptionWithSnackbar) {
27
- const data = exception.getResponse() as ErrorResponseWithSnackbar;
28
- const status = exception.getStatus();
29
-
30
- response.status(status).json({
31
- statusCode: status,
32
- message: exception.message,
33
- snackbar: data.snackbar,
34
- });
35
-
36
- return;
37
- } else if (exception instanceof HttpException) {
38
- const status = exception.getStatus();
39
-
40
- response.status(status).json({
41
- statusCode: status,
42
- message: exception.message,
43
- });
44
-
45
- return;
26
+ switch (exception.constructor.name) {
27
+ case HttpExceptionWithSnackbar.name: {
28
+ return this.processHttpExceptionWithSnackbar(
29
+ exception as HttpExceptionWithSnackbar,
30
+ response,
31
+ );
32
+ }
33
+ case HttpException.name: {
34
+ return this.processHttpException(exception as HttpException, response);
35
+ }
46
36
  }
47
37
 
48
38
  response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
@@ -50,4 +40,28 @@ export class GlobalExceptionFilter implements ExceptionFilter {
50
40
  message: exception.message,
51
41
  });
52
42
  }
43
+
44
+ private processHttpExceptionWithSnackbar(
45
+ exception: HttpExceptionWithSnackbar,
46
+ response: Response<any, Record<string, any>>,
47
+ ) {
48
+ const data = exception.getResponse() as ErrorResponseWithSnackbar;
49
+ const status = exception.getStatus();
50
+ response.status(status).json({
51
+ statusCode: status,
52
+ message: exception.message,
53
+ snackbar: data.snackbar,
54
+ });
55
+ }
56
+
57
+ private processHttpException(
58
+ exception: HttpException,
59
+ response: Response<any, Record<string, any>>,
60
+ ) {
61
+ const status = exception.getStatus();
62
+ response.status(status).json({
63
+ statusCode: status,
64
+ message: exception.message,
65
+ });
66
+ }
53
67
  }