jp.ms.common.modules 1.0.28 → 1.0.30
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.
- package/dist/exception/error-code.enum.d.ts +4 -0
- package/dist/exception/error-code.enum.js +9 -0
- package/dist/exception/error-code.enum.js.map +1 -0
- package/dist/exception/global-exception-filter.d.ts +5 -0
- package/dist/exception/global-exception-filter.js +53 -0
- package/dist/exception/global-exception-filter.js.map +1 -0
- package/dist/exception/http-exception-wth-snackbar.d.ts +12 -0
- package/dist/exception/http-exception-wth-snackbar.js +17 -0
- package/dist/exception/http-exception-wth-snackbar.js.map +1 -0
- package/dist/exception/index.d.ts +4 -0
- package/dist/exception/index.js +12 -0
- package/dist/exception/index.js.map +1 -0
- package/dist/exception/not-enough-money-for-purchase.exception.d.ts +5 -0
- package/dist/exception/not-enough-money-for-purchase.exception.js +12 -0
- package/dist/exception/not-enough-money-for-purchase.exception.js.map +1 -0
- package/dist/exception/not-found-free-room-for-fast-game.exception.d.ts +5 -0
- package/dist/exception/not-found-free-room-for-fast-game.exception.js +12 -0
- package/dist/exception/not-found-free-room-for-fast-game.exception.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/events/events.gateway.js +1 -1
- package/dist/modules/events/events.gateway.js.map +1 -1
- package/dist/modules/main/main-tables-list-screen.view.d.ts +11 -1
- package/dist/modules/main/main-tables-list-screen.view.js +97 -14
- package/dist/modules/main/main-tables-list-screen.view.js.map +1 -1
- package/dist/modules/main/main.controller.d.ts +4 -3
- package/dist/modules/main/main.controller.js +15 -3
- package/dist/modules/main/main.controller.js.map +1 -1
- package/dist/modules/main/main.module.js +2 -2
- package/dist/modules/main/main.module.js.map +1 -1
- package/dist/modules/main/main.service.d.ts +5 -4
- package/dist/modules/main/main.service.js +38 -12
- package/dist/modules/main/main.service.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.d.ts +4 -0
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js +56 -4
- package/dist/modules/many-tables-tournament/many-tables-tournament-status-screen.view.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js +3 -3
- package/dist/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.d.ts +3 -4
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js +5 -17
- package/dist/modules/many-tables-tournament/many-tables-tournament.controller.js.map +1 -1
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.d.ts +3 -4
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js +20 -27
- package/dist/modules/many-tables-tournament/many-tables-tournament.service.js.map +1 -1
- package/dist/modules/menu/menu.service.js +1 -2
- package/dist/modules/menu/menu.service.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.d.ts +1 -0
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js +18 -5
- package/dist/modules/one-table-tournament/one-table-tournament-status-screen.view.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.controller.js.map +1 -1
- package/dist/modules/one-table-tournament/one-table-tournament.service.js +1 -2
- package/dist/modules/one-table-tournament/one-table-tournament.service.js.map +1 -1
- package/dist/modules/simple-rooms-manager/simple-rooms-manager.service.js.map +1 -1
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.module.d.ts +3 -1
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.module.js +14 -3
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.module.js.map +1 -1
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.d.ts +4 -3
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js +49 -25
- package/dist/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.js.map +1 -1
- package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js +9 -6
- package/dist/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/game-table-result.d.ts +1 -2
- package/dist/utils/game-table-result.js +0 -13
- package/dist/utils/game-table-result.js.map +1 -1
- package/dist/views/tournament-buy-ticket-dialog.view.js +1 -1
- package/dist/views/tournament-buy-ticket-dialog.view.js.map +1 -1
- package/package.json +4 -4
- package/src/exception/error-code.enum.ts +4 -0
- package/src/exception/global-exception-filter.ts +50 -0
- package/src/exception/http-exception-wth-snackbar.ts +23 -0
- package/src/exception/index.ts +4 -0
- package/src/exception/not-enough-money-for-purchase.exception.ts +15 -0
- package/src/exception/not-found-free-room-for-fast-game.exception.ts +15 -0
- package/src/index.ts +1 -0
- package/src/modules/events/events.gateway.ts +1 -1
- package/src/modules/main/main-tables-list-screen.view.ts +177 -55
- package/src/modules/main/main.controller.ts +23 -10
- package/src/modules/main/main.module.ts +2 -2
- package/src/modules/main/main.service.ts +53 -19
- package/src/modules/many-tables-tournament/many-tables-tournament-status-screen.view.ts +97 -31
- package/src/modules/many-tables-tournament/many-tables-tournament-tables-list-screen.view.ts +25 -17
- package/src/modules/many-tables-tournament/many-tables-tournament.controller.ts +5 -14
- package/src/modules/many-tables-tournament/many-tables-tournament.service.ts +45 -57
- package/src/modules/menu/menu.service.ts +6 -9
- package/src/modules/one-table-tournament/one-table-tournament-status-screen.view.ts +43 -17
- package/src/modules/one-table-tournament/one-table-tournament.controller.ts +0 -1
- package/src/modules/one-table-tournament/one-table-tournament.service.ts +6 -9
- package/src/modules/simple-rooms-manager/simple-rooms-manager.service.ts +0 -2
- package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.module.ts +17 -9
- package/src/modules/tournament-many-tables-rooms-manager/tournament-many-tables-rooms-manager.service.ts +57 -26
- package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts +10 -7
- package/src/utils/game-table-result.ts +1 -16
- package/src/views/tournament-buy-ticket-dialog.view.ts +4 -4
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
MiniCardSectionListItemComponent,
|
|
16
16
|
UrlImageComponent,
|
|
17
17
|
} from "jp.common.models";
|
|
18
|
+
import { formatChips } from "jp.common.utils";
|
|
18
19
|
import { OneTableTournamentRoom, TournamentMaster } from "jp.ms.common.engine";
|
|
19
20
|
|
|
20
21
|
export class OneTableTournamentStatusScreenView extends UniversalScreenView {
|
|
@@ -48,32 +49,57 @@ export class OneTableTournamentStatusScreenView extends UniversalScreenView {
|
|
|
48
49
|
.addSection(
|
|
49
50
|
new CardListSectionComponent(
|
|
50
51
|
'id1',
|
|
51
|
-
this.
|
|
52
|
-
|
|
53
|
-
item.playerId,
|
|
54
|
-
item.playerName,
|
|
55
|
-
'',
|
|
56
|
-
new UrlImageComponent(item.playerAvatarUrl),
|
|
57
|
-
true,
|
|
58
|
-
true,
|
|
59
|
-
'',
|
|
60
|
-
)
|
|
61
|
-
))
|
|
62
|
-
),
|
|
52
|
+
this.getPlayersList()
|
|
53
|
+
)
|
|
63
54
|
);
|
|
64
55
|
}
|
|
65
56
|
|
|
57
|
+
private getPlayersList (): Array<MiniCardSectionListItemComponent> {
|
|
58
|
+
if (this.tournament.getRoomMaster<TournamentMaster>().isFinish()) {
|
|
59
|
+
return this.tournament.getWinners().map((item) => (
|
|
60
|
+
new MiniCardSectionListItemComponent(
|
|
61
|
+
item.playerId,
|
|
62
|
+
item.playerName,
|
|
63
|
+
this.localeService.t('common.tournaments.status.screen.finish.description', {
|
|
64
|
+
lang: this.lang,
|
|
65
|
+
args: {
|
|
66
|
+
RANK: item.rank.toString(),
|
|
67
|
+
PRIZE: formatChips(item.profit, this.lang, true),
|
|
68
|
+
}
|
|
69
|
+
}),
|
|
70
|
+
new UrlImageComponent(item.playerAvatarUrl),
|
|
71
|
+
true,
|
|
72
|
+
true,
|
|
73
|
+
'',
|
|
74
|
+
)
|
|
75
|
+
));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return this.tournament.getParticipants().map((item) => (
|
|
79
|
+
new MiniCardSectionListItemComponent(
|
|
80
|
+
item.playerId,
|
|
81
|
+
item.playerName,
|
|
82
|
+
'',
|
|
83
|
+
new UrlImageComponent(item.playerAvatarUrl),
|
|
84
|
+
true,
|
|
85
|
+
true,
|
|
86
|
+
'',
|
|
87
|
+
)
|
|
88
|
+
));
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
private getStatusHeader (): StatusHeaderSectionComponent {
|
|
67
|
-
|
|
68
|
-
const foundPlayer = this.tournament.getParticipants().find((item) => item.playerId === this.playerId);
|
|
92
|
+
const foundPlayer = this.tournament.getParticipant(this.playerId)
|
|
69
93
|
|
|
70
94
|
return new StatusHeaderSectionComponent(
|
|
71
95
|
'status',
|
|
72
96
|
this.getStatusDescription(),
|
|
73
97
|
new IconImageComponent(this.getStatusIcon()),
|
|
74
|
-
!foundPlayer ?
|
|
98
|
+
!foundPlayer && this.tournament.getRoomMaster<TournamentMaster>().isWaiting() ?
|
|
75
99
|
new PrimaryButtonButtonsComponent(
|
|
76
|
-
new TextButtonComponent(
|
|
100
|
+
new TextButtonComponent(
|
|
101
|
+
this.localeService.t('common.tournaments.screen.button.join.tournament', { lang: this.lang })
|
|
102
|
+
)
|
|
77
103
|
) : undefined,
|
|
78
104
|
)
|
|
79
105
|
}
|
|
@@ -92,7 +118,7 @@ export class OneTableTournamentStatusScreenView extends UniversalScreenView {
|
|
|
92
118
|
|
|
93
119
|
private getStatusDescription (): string {
|
|
94
120
|
if (this.tournament.getRoomMaster<TournamentMaster>().isCancelled()) {
|
|
95
|
-
return this.localeService.t('common.tournaments.status.
|
|
121
|
+
return this.localeService.t('common.tournaments.status.4', { lang: this.lang });
|
|
96
122
|
} else if (this.tournament.getRoomMaster<TournamentMaster>().isFinish()) {
|
|
97
123
|
return this.localeService.t('common.tournaments.status.3', { lang: this.lang });
|
|
98
124
|
} else if (this.tournament.getRoomMaster<TournamentMaster>().isWaiting()) {
|
|
@@ -2,7 +2,6 @@ import { Body, Controller, Get, Param, Post, Headers, HttpStatus, HttpCode } fro
|
|
|
2
2
|
import { IAppHeaders, IBaseAppScreen, IBaseMoveData, IBaseTableGameState } from 'jp.common.models';
|
|
3
3
|
|
|
4
4
|
import { OneTableTournamentService } from './one-table-tournament.service';
|
|
5
|
-
import { JoinTournamentDto } from '../../dto/common/join-tournament.dto';
|
|
6
5
|
|
|
7
6
|
@Controller('tournament/one_table')
|
|
8
7
|
export class OneTableTournamentController {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Inject, Injectable, InternalServerErrorException } from '@nestjs/common';
|
|
2
2
|
import {
|
|
3
|
-
BaseAppScreen,
|
|
4
3
|
IAppHeaders,
|
|
5
4
|
IBaseAppScreen,
|
|
6
5
|
IBaseMoveData,
|
|
@@ -32,14 +31,12 @@ export class OneTableTournamentService {
|
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
return new BaseAppScreenDto(
|
|
35
|
-
new
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
).build()
|
|
42
|
-
)
|
|
34
|
+
new OneTableTournamentStatusScreenView(
|
|
35
|
+
this.options.i18n,
|
|
36
|
+
lang,
|
|
37
|
+
tournament,
|
|
38
|
+
playerId,
|
|
39
|
+
).buildBS()
|
|
43
40
|
);
|
|
44
41
|
}
|
|
45
42
|
|
|
@@ -147,8 +147,6 @@ export class SimpleRoomsManagerService {
|
|
|
147
147
|
localeService: this.options.i18n,
|
|
148
148
|
startStrategy: new MinPlayersStartStrategy(),
|
|
149
149
|
onRoomEvent: this.handleRoomEvent,
|
|
150
|
-
// onRoomTableGameFinished: this.handleRoomTableGameFinished,
|
|
151
|
-
// onRoomStatusUpdated: this.handleRoomStatusUpdated,
|
|
152
150
|
} as GameRoomConfig;
|
|
153
151
|
}
|
|
154
152
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DynamicModule, Global, Module, Provider } from '@nestjs/common';
|
|
1
|
+
import { DynamicModule, Global, Inject, Module, Provider } from '@nestjs/common';
|
|
2
2
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
3
3
|
import {
|
|
4
4
|
TournamentManyTablesRoom,
|
|
@@ -10,32 +10,37 @@ import {
|
|
|
10
10
|
GameResult,
|
|
11
11
|
GameResultSchema,
|
|
12
12
|
GameResultRepository,
|
|
13
|
+
Purchase,
|
|
14
|
+
PurchaseSchema,
|
|
15
|
+
PurchaseRepository,
|
|
13
16
|
} from 'jp.db.schemas';
|
|
14
17
|
|
|
15
18
|
import { TournamentManyTablesRoomsManagerService } from './tournament-many-tables-rooms-manager.service';
|
|
16
|
-
import {
|
|
17
|
-
TournamentManyTablesRoomsManagerOptions,
|
|
18
|
-
} from './tournament-many-tables-rooms-manager.interfaces';
|
|
19
|
+
import { TournamentManyTablesRoomsManagerOptions } from './tournament-many-tables-rooms-manager.interfaces';
|
|
19
20
|
import { TOURNAMENT_MANY_TABLES_ROOMS_MANAGER_OPTIONS } from './tournament-many-tables-rooms-manager.constants';
|
|
21
|
+
import { TournamentManyTablesRoomsFactoryOptions } from './tournament-many-tables-rooms-manager.interfaces';
|
|
20
22
|
|
|
21
23
|
@Global()
|
|
22
24
|
@Module({
|
|
23
25
|
imports: [
|
|
24
|
-
MongooseModule.forFeature([{name: TournamentManyTablesRoom.name, schema: TournamentManyTablesRoomSchema}]),
|
|
25
|
-
MongooseModule.forFeature([{name: User.name, schema: UserSchema}]),
|
|
26
|
-
MongooseModule.forFeature([{name:
|
|
26
|
+
MongooseModule.forFeature([{ name: TournamentManyTablesRoom.name, schema: TournamentManyTablesRoomSchema }]),
|
|
27
|
+
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
|
|
28
|
+
MongooseModule.forFeature([{ name: Purchase.name, schema: PurchaseSchema }]),
|
|
29
|
+
MongooseModule.forFeature([{ name: GameResult.name, schema: GameResultSchema }]),
|
|
27
30
|
],
|
|
28
31
|
providers: [
|
|
29
32
|
TournamentManyTablesRoomsRepository,
|
|
30
33
|
UsersRepository,
|
|
31
34
|
TournamentManyTablesRoomsManagerService,
|
|
32
35
|
GameResultRepository,
|
|
36
|
+
PurchaseRepository,
|
|
33
37
|
],
|
|
34
38
|
exports: [TournamentManyTablesRoomsManagerService],
|
|
35
39
|
})
|
|
36
40
|
export class TournamentManyTablesRoomsManagerModule {
|
|
37
|
-
constructor
|
|
41
|
+
constructor(
|
|
38
42
|
private readonly managerService: TournamentManyTablesRoomsManagerService,
|
|
43
|
+
@Inject(TOURNAMENT_MANY_TABLES_ROOMS_MANAGER_OPTIONS) private readonly options: TournamentManyTablesRoomsFactoryOptions,
|
|
39
44
|
) {
|
|
40
45
|
}
|
|
41
46
|
|
|
@@ -54,7 +59,10 @@ export class TournamentManyTablesRoomsManagerModule {
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
async onModuleInit () {
|
|
57
|
-
|
|
62
|
+
const dailyTournamentScheduleJobEnabled = this.options.configService.get<string>('DAILY_TOURNAMENT_SCHEDULE_JOB_ENABLED');
|
|
63
|
+
if (dailyTournamentScheduleJobEnabled === 'true') {
|
|
64
|
+
await this.managerService.runDailyTournamentJob();
|
|
65
|
+
}
|
|
58
66
|
await this.managerService.hydrateTournamentsFromDB();
|
|
59
67
|
}
|
|
60
68
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InjectConnection } from '@nestjs/mongoose';
|
|
2
|
+
import { Connection } from 'mongoose';
|
|
3
|
+
import dayjs from 'dayjs';
|
|
4
|
+
import schedule, { Job } from 'node-schedule';
|
|
5
|
+
import { Inject, Injectable, InternalServerErrorException } from '@nestjs/common';
|
|
2
6
|
import {
|
|
3
7
|
BaseGameEvent,
|
|
4
8
|
GameMaster,
|
|
@@ -18,15 +22,11 @@ import {
|
|
|
18
22
|
} from 'jp.ms.common.engine';
|
|
19
23
|
import {
|
|
20
24
|
GameResultRepository,
|
|
25
|
+
PurchaseRepository,
|
|
21
26
|
TournamentManyTablesRoomDocument,
|
|
22
27
|
TournamentManyTablesRoomsRepository,
|
|
23
28
|
UsersRepository
|
|
24
29
|
} from 'jp.db.schemas';
|
|
25
|
-
import { InjectConnection } from '@nestjs/mongoose';
|
|
26
|
-
import { Connection } from 'mongoose';
|
|
27
|
-
import dayjs from 'dayjs';
|
|
28
|
-
import schedule from 'node-schedule';
|
|
29
|
-
import { Job } from 'node-schedule';
|
|
30
30
|
|
|
31
31
|
import { saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
|
|
32
32
|
import { JpLoggerService } from '../logger';
|
|
@@ -42,12 +42,13 @@ import { TournamentManyTablesRoomsFactoryOptions } from './tournament-many-table
|
|
|
42
42
|
@Injectable()
|
|
43
43
|
export class TournamentManyTablesRoomsManagerService {
|
|
44
44
|
private readonly rooms: Map<string, ManyTablesTournamentRoom>;
|
|
45
|
-
private createDailyTournamentJob: Job;
|
|
45
|
+
private createDailyTournamentJob: Job | null;
|
|
46
46
|
|
|
47
47
|
constructor(
|
|
48
48
|
private readonly tournamentRepository: TournamentManyTablesRoomsRepository,
|
|
49
49
|
private readonly usersRepository: UsersRepository,
|
|
50
50
|
private readonly gameResultRepository: GameResultRepository,
|
|
51
|
+
private readonly purchaseRepository: PurchaseRepository,
|
|
51
52
|
private readonly eventsBusMainTablesSubscribeService: EventsBusMainTablesSubscribeService,
|
|
52
53
|
private readonly eventsBusManyTablesTournamentSubscribeService: EventsBusManyTablesTournamentSubscribeService,
|
|
53
54
|
@Inject(TOURNAMENT_MANY_TABLES_ROOMS_MANAGER_OPTIONS) private readonly options: TournamentManyTablesRoomsFactoryOptions,
|
|
@@ -55,6 +56,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
55
56
|
@Inject() private readonly logger: JpLoggerService,
|
|
56
57
|
) {
|
|
57
58
|
this.rooms = new Map<string, ManyTablesTournamentRoom>();
|
|
59
|
+
this.createDailyTournamentJob = null;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
get gameType () {
|
|
@@ -89,7 +91,7 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
89
91
|
}
|
|
90
92
|
|
|
91
93
|
async hydrateTournamentsFromDB () {
|
|
92
|
-
const templates = await this.tournamentRepository.
|
|
94
|
+
const templates = await this.tournamentRepository.findActualTournaments(this.gameType);
|
|
93
95
|
templates.forEach((item) => {
|
|
94
96
|
this.addRoom(this.options.createTournamentRoom(
|
|
95
97
|
this.manyTablesTournamentDocumentToTournamentRoom(item)
|
|
@@ -134,18 +136,47 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
async buyTicket (tournamentId: string, player: GamePlayer) {
|
|
137
|
-
|
|
138
|
-
await this.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
139
|
+
const tournament = this.getRoomById(tournamentId);
|
|
140
|
+
const user = await this.usersRepository.findById(player.id);
|
|
141
|
+
|
|
142
|
+
if (!tournament || !user) {
|
|
143
|
+
throw new InternalServerErrorException();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const session = await this.connection.startSession();
|
|
147
|
+
session.startTransaction();
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
player.decreaseBalance(tournament.getTicketPrice());
|
|
151
|
+
tournament.addParticipant(player);
|
|
152
|
+
this.purchaseRepository.addManyTablesTournamentTicketPurchase(
|
|
153
|
+
player.id,
|
|
154
|
+
player.fullName,
|
|
155
|
+
tournamentId,
|
|
156
|
+
tournament.getTicketPrice(),
|
|
157
|
+
tournament.getGameType(),
|
|
158
|
+
)
|
|
159
|
+
this.usersRepository.subtractFromBalance(player.id, tournament.getTicketPrice());
|
|
160
|
+
|
|
161
|
+
await this.tournamentRepository.addPlayerToParticipants(tournamentId, {
|
|
162
|
+
playerId: player.id,
|
|
163
|
+
playerAvatarUrl: player.avatarUrl,
|
|
164
|
+
playerName: player.fullName,
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
await session.commitTransaction();
|
|
168
|
+
} catch (error) {
|
|
169
|
+
await session.abortTransaction();
|
|
170
|
+
throw error;
|
|
171
|
+
} finally {
|
|
172
|
+
await session.endSession();
|
|
173
|
+
}
|
|
143
174
|
}
|
|
144
175
|
|
|
145
176
|
private manyTablesTournamentDocumentToTournamentRoom (tournamentDocument: TournamentManyTablesRoomDocument): ManyTablesTournamentRoomConfig {
|
|
146
177
|
const restartGameTimeout = this.options.configService.get<number>('RESTART_GAME_TIMEOUT') || 0;
|
|
147
178
|
const playersTurnTimeout = this.options.configService.get<number>('PLAYERS_TURN_TIMEOUT') || 0;
|
|
148
|
-
const minPlayersForMergeTables = this.options.configService.get<
|
|
179
|
+
const minPlayersForMergeTables = this.options.configService.get<string>('TOURNAMENT_MANY_TABLES_MIN_PLAYERS_FOR_MERGE_TABLES');
|
|
149
180
|
|
|
150
181
|
return {
|
|
151
182
|
id: tournamentDocument.tournamentId,
|
|
@@ -163,21 +194,21 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
163
194
|
scheduleDate: tournamentDocument.scheduleDate,
|
|
164
195
|
turnTimeout: playersTurnTimeout,
|
|
165
196
|
restartTimeout: restartGameTimeout,
|
|
166
|
-
minPlayersForMergeTables: minPlayersForMergeTables,
|
|
197
|
+
minPlayersForMergeTables: parseInt(minPlayersForMergeTables ?? '0', 10),
|
|
167
198
|
localeService: this.options.i18n,
|
|
168
199
|
startStrategy: new NoStartStrategy(),
|
|
169
200
|
onRoomEvent: this.handleRoomEvent,
|
|
170
|
-
onRoomTableGameFinished: this.handleRoomTableGameFinished,
|
|
171
|
-
onTournamentRoomStarted: this.handleTournamentRoomStarted,
|
|
172
|
-
onTournamentRoomFinished: this.handleTournamentRoomFinished,
|
|
173
|
-
onTournamentRoomCancelled: this.handleTournamentRoomCancelled,
|
|
174
|
-
onRoomStatusUpdated: this.handleRoomStatusUpdated,
|
|
175
201
|
tournamentPrizeTable: this.options.tournamentPrizeTable,
|
|
176
202
|
tournamentInitialStatus: tournamentDocument.status,
|
|
203
|
+
tournamentWinners: tournamentDocument.winners,
|
|
204
|
+
maxParticipants: tournamentDocument.maxParticipants,
|
|
205
|
+
participants: tournamentDocument.participants,
|
|
177
206
|
} as ManyTablesTournamentRoomConfig;
|
|
178
207
|
}
|
|
179
208
|
|
|
180
209
|
private handleRoomEvent = (event: BaseGameEvent) => {
|
|
210
|
+
this.logger.log(event.toLog());
|
|
211
|
+
|
|
181
212
|
if (event instanceof GameTableFinishedEvent) {
|
|
182
213
|
this.handleRoomTableGameFinished(event.master!!);
|
|
183
214
|
} else if (event instanceof GameTournamentStartedEvent) {
|
|
@@ -187,11 +218,11 @@ export class TournamentManyTablesRoomsManagerService {
|
|
|
187
218
|
} else if (event instanceof GameTournamentFinishedEvent) {
|
|
188
219
|
this.handleTournamentRoomFinished(event.room.getRoomMaster());
|
|
189
220
|
} else if (
|
|
190
|
-
event instanceof GameTournamentPlayerJoinedTheTournamentEvent
|
|
191
|
-
event instanceof GameTournamentPlayerLeavedTheTournamentEvent
|
|
192
|
-
event instanceof GameTournamentCancelledEvent
|
|
193
|
-
event instanceof GameTournamentWaitedEvent
|
|
194
|
-
event instanceof GameTournamentStartedEvent
|
|
221
|
+
event instanceof GameTournamentPlayerJoinedTheTournamentEvent ||
|
|
222
|
+
event instanceof GameTournamentPlayerLeavedTheTournamentEvent ||
|
|
223
|
+
event instanceof GameTournamentCancelledEvent ||
|
|
224
|
+
event instanceof GameTournamentWaitedEvent ||
|
|
225
|
+
event instanceof GameTournamentStartedEvent ||
|
|
195
226
|
event instanceof GameTournamentFinishedEvent
|
|
196
227
|
) {
|
|
197
228
|
this.handleRoomStatusUpdated(new RoomUpdateStateEvent(event.gameType, event.roomId));
|
package/src/modules/tournament-one-table-rooms-manager/tournament-one-table-rooms-manager.service.ts
CHANGED
|
@@ -25,7 +25,7 @@ import { InjectConnection } from '@nestjs/mongoose';
|
|
|
25
25
|
import { Connection } from 'mongoose';
|
|
26
26
|
|
|
27
27
|
import { JpLoggerService } from '../logger/jp-logger.service';
|
|
28
|
-
import {
|
|
28
|
+
import { saveGameTablesResult, saveTournamentResult } from '../../utils/game-table-result';
|
|
29
29
|
import { EventsBusMainTablesSubscribeService, EventsBusOneTableTournamentSubscribeService } from '../event-bus';
|
|
30
30
|
|
|
31
31
|
import { TOURNAMENT_ONE_TABLE_ROOMS_MANAGER_OPTIONS } from './tournament-one-table-rooms-manager.constants';
|
|
@@ -87,7 +87,7 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
async hydrateTournamentsFromDB () {
|
|
90
|
-
const templates = await this.tournamentRepository.
|
|
90
|
+
const templates = await this.tournamentRepository.findActualTournaments(this.gameType);
|
|
91
91
|
templates.forEach((item) => {
|
|
92
92
|
this.addRoom(this.options.createTournamentRoom(
|
|
93
93
|
this.oneTableTournamentDocumentToTournamentRoom(item)
|
|
@@ -119,6 +119,9 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
119
119
|
onRoomEvent: this.handleRoomEvent,
|
|
120
120
|
tournamentPrizeTable: this.options.tournamentPrizeTable,
|
|
121
121
|
tournamentInitialStatus: tournamentDocument.status,
|
|
122
|
+
tournamentWinners: tournamentDocument.winners,
|
|
123
|
+
maxParticipants: tournamentDocument.maxParticipants,
|
|
124
|
+
participants: tournamentDocument.participants,
|
|
122
125
|
} as TournamentRoomConfig;
|
|
123
126
|
}
|
|
124
127
|
|
|
@@ -134,11 +137,11 @@ export class TournamentOneTableRoomsManagerService {
|
|
|
134
137
|
} else if (event instanceof GameTournamentFinishedEvent) {
|
|
135
138
|
this.handleTournamentRoomFinished(event.room.getRoomMaster());
|
|
136
139
|
} else if (
|
|
137
|
-
event instanceof GameTournamentPlayerJoinedTheTournamentEvent
|
|
138
|
-
event instanceof GameTournamentPlayerLeavedTheTournamentEvent
|
|
139
|
-
event instanceof GameTournamentCancelledEvent
|
|
140
|
-
event instanceof GameTournamentWaitedEvent
|
|
141
|
-
event instanceof GameTournamentStartedEvent
|
|
140
|
+
event instanceof GameTournamentPlayerJoinedTheTournamentEvent ||
|
|
141
|
+
event instanceof GameTournamentPlayerLeavedTheTournamentEvent ||
|
|
142
|
+
event instanceof GameTournamentCancelledEvent ||
|
|
143
|
+
event instanceof GameTournamentWaitedEvent ||
|
|
144
|
+
event instanceof GameTournamentStartedEvent ||
|
|
142
145
|
event instanceof GameTournamentFinishedEvent
|
|
143
146
|
) {
|
|
144
147
|
this.handleRoomStatusUpdated(new RoomUpdateStateEvent(event.gameType, event.roomId));
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Connection } from 'mongoose';
|
|
2
|
-
import { BaseGameEvent, GameMaster, GameTournamentCancelledEvent, GameTournamentFinishedEvent, GameTournamentPlayerJoinedTheTournamentEvent, GameTournamentPlayerLeavedTheTournamentEvent, GameTournamentStartedEvent, GameTournamentWaitedEvent, RoomUpdateStateEvent, TournamentMaster } from 'jp.ms.common.engine';
|
|
3
2
|
import {
|
|
4
3
|
GameResultRepository,
|
|
5
4
|
TournamentManyTablesRoomsRepository,
|
|
6
5
|
TournamentOneTableRoomsRepository,
|
|
7
6
|
UsersRepository
|
|
8
7
|
} from 'jp.db.schemas';
|
|
8
|
+
import { GameMaster, TournamentMaster } from 'jp.ms.common.engine';
|
|
9
9
|
|
|
10
10
|
export function getGameTableResults (master: GameMaster) {
|
|
11
11
|
return {
|
|
@@ -108,18 +108,3 @@ export async function saveTournamentResult (
|
|
|
108
108
|
await session.endSession();
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
export function isUpdateTounrmanentRoomEvent (event: BaseGameEvent) {
|
|
113
|
-
if (
|
|
114
|
-
event instanceof GameTournamentPlayerJoinedTheTournamentEvent &&
|
|
115
|
-
event instanceof GameTournamentPlayerLeavedTheTournamentEvent &&
|
|
116
|
-
event instanceof GameTournamentCancelledEvent &&
|
|
117
|
-
event instanceof GameTournamentWaitedEvent &&
|
|
118
|
-
event instanceof GameTournamentStartedEvent &&
|
|
119
|
-
event instanceof GameTournamentFinishedEvent
|
|
120
|
-
) {
|
|
121
|
-
return event
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
@@ -10,11 +10,11 @@ export class TournamentBuyTicketDialogView extends UniversalScreenDialogView {
|
|
|
10
10
|
build () {
|
|
11
11
|
return new StandardDialogComponent(
|
|
12
12
|
AppScreenDialogIdEnum.DIALOG_TOURNAMENT_BUY_TICKET,
|
|
13
|
-
this.localeService.t('common.rooms.screen.
|
|
14
|
-
this.localeService.t('common.rooms.screen.
|
|
13
|
+
this.localeService.t('common.rooms.screen.dialog.buy.ticket.title', { lang: this.lang }),
|
|
14
|
+
this.localeService.t('common.rooms.screen.dialog.buy.ticket.description', { lang: this.lang }),
|
|
15
15
|
new FullButtonsButtonsComponent(
|
|
16
|
-
new TextButtonComponent(this.localeService.t('common.rooms.screen.
|
|
17
|
-
new TextButtonComponent(this.localeService.t('common.rooms.screen.
|
|
16
|
+
new TextButtonComponent(this.localeService.t('common.rooms.screen.dialog.buy.ticket.ok', { lang: this.lang })),
|
|
17
|
+
new TextButtonComponent(this.localeService.t('common.rooms.screen.dialog.buy.ticket.cancel', { lang: this.lang })),
|
|
18
18
|
),
|
|
19
19
|
);
|
|
20
20
|
}
|