jp.ms.common.modules 1.0.22 → 1.0.24

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/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "jp.ms.common.modules",
3
- "version": "1.0.22",
3
+ "version": "1.0.24",
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
- "@nestjs/common": "11.1.0",
11
- "@nestjs/config": "4.0.2",
10
+ "@nestjs/common": "^11.1.19",
11
+ "@nestjs/config": "^4.0.4",
12
12
  "@nestjs/core": "11.1.0",
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.1",
17
- "jp.common.utils": "1.0.2",
18
- "jp.db.schemas": "2.1.10",
16
+ "jp.common.models": "1.1.6",
17
+ "jp.common.utils": "1.0.4",
18
+ "jp.db.schemas": "2.2.2",
19
19
  "jp.ms.common.engine": "3.0.8",
20
20
  "mongoose": "9.1.5",
21
21
  "nestjs-i18n": "10.5.1",
@@ -26,7 +26,7 @@
26
26
  "socket.io": "4.8.1"
27
27
  },
28
28
  "devDependencies": {
29
- "@nestjs/swagger": "11.2.3",
29
+ "@nestjs/swagger": "^11.4.1",
30
30
  "@types/express": "^5.0.6",
31
31
  "@types/node": "22.15.3",
32
32
  "@types/node-schedule": "2.1.8",
@@ -43,4 +43,4 @@
43
43
  "src",
44
44
  "dist"
45
45
  ]
46
- }
46
+ }
@@ -9,7 +9,10 @@ import {
9
9
  UsersRepository,
10
10
  AchievementRepository,
11
11
  Achievement,
12
- AchievementSchema
12
+ AchievementSchema,
13
+ UsersAchievement,
14
+ UsersAchievementSchema,
15
+ UsersAchievementsRepository,
13
16
  } from 'jp.db.schemas';
14
17
  import {
15
18
  BaseAppEvent,
@@ -41,11 +44,13 @@ import { PlayersManagerService } from '../players-manager';
41
44
  MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
42
45
  MongooseModule.forFeature([{ name: ActivityLog.name, schema: ActivityLogSchema }]),
43
46
  MongooseModule.forFeature([{ name: Achievement.name, schema: AchievementSchema }]),
47
+ MongooseModule.forFeature([{ name: UsersAchievement.name, schema: UsersAchievementSchema }]),
44
48
  ],
45
49
  providers: [
46
50
  UsersRepository,
47
51
  ActivityLogRepository,
48
52
  AchievementRepository,
53
+ UsersAchievementsRepository,
49
54
  EventsBusAppSubscribeService,
50
55
  ],
51
56
  })
@@ -56,19 +61,21 @@ export abstract class BaseAchievementsModule {
56
61
  protected readonly usersRepository: UsersRepository,
57
62
  protected readonly activityLogRepository: ActivityLogRepository,
58
63
  protected readonly achievementRepository: AchievementRepository,
64
+ protected readonly usersAchievementRepository: UsersAchievementsRepository,
59
65
  ) {
60
66
  }
61
67
 
62
- async onModuleInit() {
68
+ async onModuleInit () {
63
69
  this.eventsBusAppSubscribeService.subscribe(this.onHandleAppEvent);
64
70
  }
65
71
 
66
- protected async onHandleAppEvent(event: BaseAppEvent) {
72
+ protected async onHandleAppEvent (event: BaseAppEvent) {
67
73
  if (event instanceof BaseUserAppEvent) {
68
74
  const userId = event.userId;
69
75
  const player = this.playersManager.getPlayerById(userId);
70
76
  const foundUser = await this.usersRepository.findById(userId);
71
77
  const allAchievements: Array<Achievement> = await this.achievementRepository.findAchievements();
78
+ const usersAchievements: Array<UsersAchievement> = await this.usersAchievementRepository.findAchivementsByUserId(userId);
72
79
 
73
80
  if (!player || !foundUser) {
74
81
  throw new InternalServerErrorException();
@@ -82,76 +89,89 @@ export abstract class BaseAchievementsModule {
82
89
  'buttonText'
83
90
  ));
84
91
 
85
- if (foundUser.hasNoAchievement(GotLevel3Achievement.code)) {
92
+ if (this.userHasNoAchievement(usersAchievements, GotLevel3Achievement.code)) {
86
93
  if (new GotLevel3Achievement(event.newLevel).userGotAchievement()) {
87
- this.giveAchievement(allAchievements, GotLevel3Achievement.code, userId);
94
+ this.giveAchievement(allAchievements, GotLevel3Achievement.code, foundUser);
88
95
  }
89
96
  }
90
97
 
91
- if (foundUser.hasNoAchievement(GotLevel10Achievement.code)) {
98
+ if (this.userHasNoAchievement(usersAchievements, GotLevel10Achievement.code)) {
92
99
  if (new GotLevel10Achievement(event.newLevel).userGotAchievement()) {
93
- this.giveAchievement(allAchievements, GotLevel10Achievement.code, userId);
100
+ this.giveAchievement(allAchievements, GotLevel10Achievement.code, foundUser);
94
101
  }
95
102
  }
96
103
 
97
104
  } else if (event instanceof UserPlayedTheGameAppEvent) {
98
- if (foundUser.hasNoAchievement(Playd10GamesAchievement.code)) {
105
+
106
+ if (this.userHasNoAchievement(usersAchievements, Playd10GamesAchievement.code)) {
99
107
  const playdGamesCount = await this.activityLogRepository.getUserPlayedGamesCount(userId);
100
108
 
101
109
  if (new Playd10GamesAchievement(playdGamesCount).userGotAchievement()) {
102
- this.giveAchievement(allAchievements, Playd10GamesAchievement.code, userId);
110
+ this.giveAchievement(allAchievements, Playd10GamesAchievement.code, foundUser);
103
111
  }
104
112
  }
105
113
  } else if (event instanceof UserWonTheGameAppEvent) {
106
- if (foundUser.hasNoAchievement(Won3GamesAchievement.code)) {
114
+ if (this.userHasNoAchievement(usersAchievements, Won3GamesAchievement.code)) {
107
115
  const wonGamesCount = await this.activityLogRepository.getUserWonGamesCount(userId);
108
116
 
109
117
  if (new Won3GamesAchievement(wonGamesCount).userGotAchievement()) {
110
- this.giveAchievement(allAchievements, Won3GamesAchievement.code, userId);
118
+ this.giveAchievement(allAchievements, Won3GamesAchievement.code, foundUser);
111
119
  }
112
120
  }
113
121
 
114
- if (foundUser.hasNoAchievement(Won3ProfiAchievement.code)) {
122
+ if (this.userHasNoAchievement(usersAchievements, Won3ProfiAchievement.code)) {
115
123
  const wonProfiCount = await this.activityLogRepository.getUserWonProfiCount(userId);
116
124
  if (new Won3ProfiAchievement(wonProfiCount).userGotAchievement()) {
117
- this.giveAchievement(allAchievements, Won3ProfiAchievement.code, userId);
125
+ this.giveAchievement(allAchievements, Won3ProfiAchievement.code, foundUser);
118
126
  }
119
127
  }
120
128
 
121
- if (foundUser.hasNoAchievement(EarnOneMillionAchievement.code)) {
129
+ if (this.userHasNoAchievement(usersAchievements, EarnOneMillionAchievement.code)) {
122
130
  if (new EarnOneMillionAchievement(foundUser.balance).userGotAchievement()) {
123
- this.giveAchievement(allAchievements, EarnOneMillionAchievement.code, userId);
131
+ this.giveAchievement(allAchievements, EarnOneMillionAchievement.code, foundUser);
124
132
  }
125
133
  }
126
134
  } else if (event instanceof UserWonOneTableTournamentAppEvent) {
127
- if (foundUser.hasNoAchievement(WonOneTableTournament3TimesAchievement.code)) {
135
+ if (this.userHasNoAchievement(usersAchievements, WonOneTableTournament3TimesAchievement.code)) {
128
136
  const wonFastTournamentCount = await this.activityLogRepository.getUserWonOneTableTournamentCount(userId);
129
137
  if (new WonOneTableTournament3TimesAchievement(wonFastTournamentCount).userGotAchievement()) {
130
- this.giveAchievement(allAchievements, WonOneTableTournament3TimesAchievement.code, userId);
138
+ this.giveAchievement(allAchievements, WonOneTableTournament3TimesAchievement.code, foundUser);
131
139
  }
132
140
  }
133
141
  } else if (event instanceof UserWonManyTablesTournamentAppEvent) {
134
- if (foundUser.hasNoAchievement(Take1PlaceOnManyTablesTournamentAchievement.code)) {
142
+ if (this.userHasNoAchievement(usersAchievements, Take1PlaceOnManyTablesTournamentAchievement.code)) {
135
143
  if (new Take1PlaceOnManyTablesTournamentAchievement(event.rank)) {
136
- this.giveAchievement(allAchievements, Take1PlaceOnManyTablesTournamentAchievement.code, userId);
144
+ this.giveAchievement(allAchievements, Take1PlaceOnManyTablesTournamentAchievement.code, foundUser);
137
145
  }
138
146
  }
139
147
 
140
- if (foundUser.hasNoAchievement(Take2Or3PlaceOnManyTablesTournamentAchievement.code)) {
148
+ if (this.userHasNoAchievement(usersAchievements, Take2Or3PlaceOnManyTablesTournamentAchievement.code)) {
141
149
  if (new Take2Or3PlaceOnManyTablesTournamentAchievement(event.rank)) {
142
- this.giveAchievement(allAchievements, Take2Or3PlaceOnManyTablesTournamentAchievement.code, userId);
150
+ this.giveAchievement(allAchievements, Take2Or3PlaceOnManyTablesTournamentAchievement.code, foundUser);
143
151
  }
144
152
  }
145
153
  }
146
154
  }
147
155
  }
148
156
 
149
- protected async giveAchievement(allAchievements: Array<Achievement>, achievementCode: string, userId: string) {
157
+ protected userHasNoAchievement (usersAchievements: Array<UsersAchievement>, achievementCode: string) {
158
+ return !usersAchievements.find((item) => item.achievementCode === achievementCode);
159
+ }
160
+
161
+ protected async giveAchievement (allAchievements: Array<Achievement>, achievementCode: string, user: User) {
150
162
  const foundAchievement = allAchievements.find((item) => item.code === achievementCode);
151
- const player = this.playersManager.getPlayerById(userId);
163
+ const player = this.playersManager.getPlayerById(user.userId);
152
164
 
153
165
  if (foundAchievement && player) {
154
- await this.usersRepository.addAchievement(userId, achievementCode);
166
+ await this.usersAchievementRepository.addUsersAchievement(
167
+ user.userId,
168
+ user.fullName,
169
+ foundAchievement.achievementId,
170
+ foundAchievement.title,
171
+ foundAchievement.code,
172
+ foundAchievement.prize,
173
+ '',
174
+ );
155
175
 
156
176
  player.sendMessage(new SnackbarSendToPlayerWsEvent(
157
177
  AppScreenIconEnum.EMOJI_EVENTS,