jp.db.schemas 2.2.10 → 2.2.11
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 +37 -37
- package/readme.md +3 -3
- package/src/index.ts +294 -294
- package/src/models/account-type.enum.ts +8 -8
- package/src/models/activity-log-user-login.interface.ts +10 -10
- package/src/models/activity-log.enum.ts +8 -8
- package/src/models/currency.enum.ts +6 -6
- package/src/models/rating-add-bulk-item.interface.ts +7 -7
- package/src/models/rating-monthly-result.interface.ts +11 -11
- package/src/models/tournament-participant.interface.ts +5 -5
- package/src/models/tournament-status.enum.ts +6 -6
- package/src/models/tournament-template.enum.ts +3 -3
- package/src/models/tournament-winner.interface.ts +7 -7
- package/src/models/users-balance-reason.enum.ts +8 -8
- package/src/repositories/achievement.repository.ts +17 -17
- package/src/repositories/activity-log.repository.ts +209 -209
- package/src/repositories/admin.repository.ts +20 -20
- package/src/repositories/article.repository.ts +24 -24
- package/src/repositories/banners.repository.ts +60 -60
- package/src/repositories/complains.repository.ts +31 -31
- package/src/repositories/daily-bonus.repository.ts +32 -32
- package/src/repositories/friend.repository.ts +24 -24
- package/src/repositories/game-result.repository.ts +19 -19
- package/src/repositories/game-statistic.repository.ts +25 -25
- package/src/repositories/index.ts +61 -61
- package/src/repositories/menu.repository.ts +19 -19
- package/src/repositories/notification.repository.ts +59 -59
- package/src/repositories/premium.repository.ts +16 -16
- package/src/repositories/products.repository.ts +30 -30
- package/src/repositories/purchase.repository.ts +111 -111
- package/src/repositories/rating.repository.ts +90 -90
- package/src/repositories/rooms.repository.ts +14 -14
- package/src/repositories/rule.repository.ts +14 -14
- package/src/repositories/scheduled-tournaments.repository.ts +35 -35
- package/src/repositories/servers.repository.ts +16 -16
- package/src/repositories/setting.repository.ts +24 -24
- package/src/repositories/settings-options.repository.ts +17 -17
- package/src/repositories/simple-rooms.repository.ts +16 -16
- package/src/repositories/tournament-many-tables-rooms.repository.ts +171 -171
- package/src/repositories/tournament-one-table-rooms.repository.ts +142 -142
- package/src/repositories/users-achievements.repository.ts +46 -46
- package/src/repositories/users-balances.repository.ts +65 -65
- package/src/repositories/users.repository.ts +153 -153
- package/src/repositories/welcome.repository.ts +16 -16
- package/src/schemas/achievement.schema.ts +40 -40
- package/src/schemas/activity_log.schema.ts +37 -37
- package/src/schemas/admin.schema.ts +22 -22
- package/src/schemas/article.schema.ts +37 -37
- package/src/schemas/banner.schema.ts +40 -40
- package/src/schemas/channel_message.schema.ts +32 -32
- package/src/schemas/complain.schema.ts +46 -46
- package/src/schemas/daily_bonus.schema.ts +49 -49
- package/src/schemas/feature.schema.ts +28 -28
- package/src/schemas/friend.schema.ts +49 -49
- package/src/schemas/game_result.schema.ts +68 -68
- package/src/schemas/game_statistic.schema.ts +40 -40
- package/src/schemas/menu.schema.ts +37 -37
- package/src/schemas/notification.schema.ts +61 -61
- package/src/schemas/premium.schema.ts +37 -37
- package/src/schemas/product.schema.ts +111 -111
- package/src/schemas/purchase.schema.ts +61 -61
- package/src/schemas/purchase_channel.schema.ts +32 -32
- package/src/schemas/rating.schema.ts +37 -37
- package/src/schemas/rooms.schema.ts +63 -63
- package/src/schemas/rule.schema.ts +37 -37
- package/src/schemas/scheduled_tournament.schema.ts +94 -94
- package/src/schemas/server.schema.ts +22 -22
- package/src/schemas/setting.schema.ts +49 -49
- package/src/schemas/settings_option.schema.ts +41 -41
- package/src/schemas/simple_rooms.schema.ts +49 -49
- package/src/schemas/tournament_many_tables_rooms.schema.ts +87 -87
- package/src/schemas/tournament_one_table_rooms.schema.ts +84 -84
- package/src/schemas/user.fb.schema.ts +33 -33
- package/src/schemas/user.google.schema.ts +24 -24
- package/src/schemas/user.ok.schema.ts +53 -53
- package/src/schemas/user.schema.ts +160 -160
- package/src/schemas/user.tg.schema.ts +30 -30
- package/src/schemas/user.vk.schema.ts +70 -70
- package/src/schemas/user.ya.schema.ts +24 -24
- package/src/schemas/users_achievement.schema.ts +41 -41
- package/src/schemas/users_balance.schema.ts +34 -34
- package/src/schemas/welcome.schema.ts +37 -37
- package/src/utils.ts +3 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export enum AccountTypeEnum {
|
|
2
|
-
VK = 'VK',
|
|
3
|
-
OK = 'OK',
|
|
4
|
-
YA = 'YA',
|
|
5
|
-
FB = 'FB',
|
|
6
|
-
GOOGLE = 'GOOGLE',
|
|
7
|
-
GUEST = 'GUEST',
|
|
8
|
-
}
|
|
1
|
+
export enum AccountTypeEnum {
|
|
2
|
+
VK = 'VK',
|
|
3
|
+
OK = 'OK',
|
|
4
|
+
YA = 'YA',
|
|
5
|
+
FB = 'FB',
|
|
6
|
+
GOOGLE = 'GOOGLE',
|
|
7
|
+
GUEST = 'GUEST',
|
|
8
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export interface IActivityLogUserLogin {
|
|
2
|
-
id: string;
|
|
3
|
-
userId: string;
|
|
4
|
-
userName: string;
|
|
5
|
-
event: string;
|
|
6
|
-
game: string;
|
|
7
|
-
channel: string;
|
|
8
|
-
count: number;
|
|
9
|
-
date: string;
|
|
10
|
-
}
|
|
1
|
+
export interface IActivityLogUserLogin {
|
|
2
|
+
id: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
userName: string;
|
|
5
|
+
event: string;
|
|
6
|
+
game: string;
|
|
7
|
+
channel: string;
|
|
8
|
+
count: number;
|
|
9
|
+
date: string;
|
|
10
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export enum ActivityLogEnum {
|
|
2
|
-
USER_LOGIN = 'USER_LOGIN',
|
|
3
|
-
USER_GOT_BONUS = 'USER_GOT_BONUS',
|
|
4
|
-
USER_PLAYED_GAME = 'USER_PLAYED_GAME',
|
|
5
|
-
USER_WON_GAME = 'USER_WON_GAME',
|
|
6
|
-
USER_WON_PROFI = 'USER_WON_PROFI',
|
|
7
|
-
USER_WON_ONE_TABLE_TOURNAMENT = 'USER_WON_ONE_TABLE_TOURNAMENT',
|
|
8
|
-
}
|
|
1
|
+
export enum ActivityLogEnum {
|
|
2
|
+
USER_LOGIN = 'USER_LOGIN',
|
|
3
|
+
USER_GOT_BONUS = 'USER_GOT_BONUS',
|
|
4
|
+
USER_PLAYED_GAME = 'USER_PLAYED_GAME',
|
|
5
|
+
USER_WON_GAME = 'USER_WON_GAME',
|
|
6
|
+
USER_WON_PROFI = 'USER_WON_PROFI',
|
|
7
|
+
USER_WON_ONE_TABLE_TOURNAMENT = 'USER_WON_ONE_TABLE_TOURNAMENT',
|
|
8
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export enum CurrencyEnum {
|
|
2
|
-
VK_VOTES = 'VK_VOTES',
|
|
3
|
-
YAN = 'YAN',
|
|
4
|
-
RUB = 'RUB',
|
|
5
|
-
JP = 'JP',
|
|
6
|
-
}
|
|
1
|
+
export enum CurrencyEnum {
|
|
2
|
+
VK_VOTES = 'VK_VOTES',
|
|
3
|
+
YAN = 'YAN',
|
|
4
|
+
RUB = 'RUB',
|
|
5
|
+
JP = 'JP',
|
|
6
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface IRatingAddBulkItem {
|
|
2
|
-
userId: string;
|
|
3
|
-
userName: string;
|
|
4
|
-
userAvatarUrl: string;
|
|
5
|
-
game: string;
|
|
6
|
-
channels: string;
|
|
7
|
-
}
|
|
1
|
+
export interface IRatingAddBulkItem {
|
|
2
|
+
userId: string;
|
|
3
|
+
userName: string;
|
|
4
|
+
userAvatarUrl: string;
|
|
5
|
+
game: string;
|
|
6
|
+
channels: string;
|
|
7
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface IRatingMonthlyResult {
|
|
2
|
-
id: string;
|
|
3
|
-
userId: string;
|
|
4
|
-
userName: string;
|
|
5
|
-
userAvatarUrl: string;
|
|
6
|
-
game: string;
|
|
7
|
-
channels: string;
|
|
8
|
-
count: number;
|
|
9
|
-
date: string;
|
|
10
|
-
rank: number;
|
|
11
|
-
}
|
|
1
|
+
export interface IRatingMonthlyResult {
|
|
2
|
+
id: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
userName: string;
|
|
5
|
+
userAvatarUrl: string;
|
|
6
|
+
game: string;
|
|
7
|
+
channels: string;
|
|
8
|
+
count: number;
|
|
9
|
+
date: string;
|
|
10
|
+
rank: number;
|
|
11
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export interface ITournamentParticipant {
|
|
2
|
-
playerId: string;
|
|
3
|
-
playerName: string;
|
|
4
|
-
playerAvatarUrl: string;
|
|
5
|
-
}
|
|
1
|
+
export interface ITournamentParticipant {
|
|
2
|
+
playerId: string;
|
|
3
|
+
playerName: string;
|
|
4
|
+
playerAvatarUrl: string;
|
|
5
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export enum TournamentStatusEnum {
|
|
2
|
-
STATE_WAITING_FOR_START = 'STATE_WAITING_FOR_START',
|
|
3
|
-
STATE_IN_PROGRESS = 'STATE_IN_PROGRESS',
|
|
4
|
-
STATE_FINISHED = 'STATE_FINISHED',
|
|
5
|
-
STATE_CANCELLED = 'STATE_CANCELLED',
|
|
6
|
-
}
|
|
1
|
+
export enum TournamentStatusEnum {
|
|
2
|
+
STATE_WAITING_FOR_START = 'STATE_WAITING_FOR_START',
|
|
3
|
+
STATE_IN_PROGRESS = 'STATE_IN_PROGRESS',
|
|
4
|
+
STATE_FINISHED = 'STATE_FINISHED',
|
|
5
|
+
STATE_CANCELLED = 'STATE_CANCELLED',
|
|
6
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export enum TournamentTemplateEnum {
|
|
2
|
-
MASTER = 'MASTER',
|
|
3
|
-
}
|
|
1
|
+
export enum TournamentTemplateEnum {
|
|
2
|
+
MASTER = 'MASTER',
|
|
3
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export interface ITournamentWinner {
|
|
2
|
-
playerId: string;
|
|
3
|
-
playerName: string;
|
|
4
|
-
playerAvatarUrl: string;
|
|
5
|
-
profit: number;
|
|
6
|
-
rank: number;
|
|
7
|
-
}
|
|
1
|
+
export interface ITournamentWinner {
|
|
2
|
+
playerId: string;
|
|
3
|
+
playerName: string;
|
|
4
|
+
playerAvatarUrl: string;
|
|
5
|
+
profit: number;
|
|
6
|
+
rank: number;
|
|
7
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export enum UsersBalanceReasonEnum {
|
|
2
|
-
REGISTER = 'REGISTER',
|
|
3
|
-
DAILY_BONUS = 'DAILY_BONUS',
|
|
4
|
-
SHOP_PURCHASE = 'SHOP_PURCHASE',
|
|
5
|
-
SIMPLE_ROOM_RESULT = 'SIMPLE_ROOM_RESULT',
|
|
6
|
-
ONE_TABLE_TOURNAMENT_RESULT = 'ONE_TABLE_TOURNAMENT_RESULT',
|
|
7
|
-
MANY_TABLES_TOURNAMENT_RESULT = 'MANY_TABLES_TOURNAMENT_RESULT',
|
|
8
|
-
}
|
|
1
|
+
export enum UsersBalanceReasonEnum {
|
|
2
|
+
REGISTER = 'REGISTER',
|
|
3
|
+
DAILY_BONUS = 'DAILY_BONUS',
|
|
4
|
+
SHOP_PURCHASE = 'SHOP_PURCHASE',
|
|
5
|
+
SIMPLE_ROOM_RESULT = 'SIMPLE_ROOM_RESULT',
|
|
6
|
+
ONE_TABLE_TOURNAMENT_RESULT = 'ONE_TABLE_TOURNAMENT_RESULT',
|
|
7
|
+
MANY_TABLES_TOURNAMENT_RESULT = 'MANY_TABLES_TOURNAMENT_RESULT',
|
|
8
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
|
|
5
|
-
import { Achievement, AchievementDocument } from '..';
|
|
6
|
-
|
|
7
|
-
@Injectable()
|
|
8
|
-
export class AchievementRepository {
|
|
9
|
-
constructor(
|
|
10
|
-
@InjectModel(Achievement.name)
|
|
11
|
-
private menuModel: Model<AchievementDocument>,
|
|
12
|
-
) {}
|
|
13
|
-
|
|
14
|
-
async findAchievements(): Promise<Array<Achievement>> {
|
|
15
|
-
return this.menuModel.find().exec();
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
|
|
5
|
+
import { Achievement, AchievementDocument } from '..';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class AchievementRepository {
|
|
9
|
+
constructor(
|
|
10
|
+
@InjectModel(Achievement.name)
|
|
11
|
+
private menuModel: Model<AchievementDocument>,
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
async findAchievements(): Promise<Array<Achievement>> {
|
|
15
|
+
return this.menuModel.find().exec();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
import dayjs from 'dayjs';
|
|
5
|
-
|
|
6
|
-
import { ActivityLog, ActivityLogDocument } from '..';
|
|
7
|
-
import { ActivityLogEnum } from '../models/activity-log.enum';
|
|
8
|
-
import { IActivityLogUserLogin } from '../models/activity-log-user-login.interface';
|
|
9
|
-
|
|
10
|
-
@Injectable()
|
|
11
|
-
export class ActivityLogRepository {
|
|
12
|
-
constructor(
|
|
13
|
-
@InjectModel(ActivityLog.name)
|
|
14
|
-
private activityLogModel: Model<ActivityLogDocument>,
|
|
15
|
-
) {}
|
|
16
|
-
|
|
17
|
-
async findLast7DaysLogins(
|
|
18
|
-
game: string,
|
|
19
|
-
userId: string,
|
|
20
|
-
): Promise<Array<IActivityLogUserLogin>> {
|
|
21
|
-
const weekAgo = dayjs().startOf('day').add(-1, 'week');
|
|
22
|
-
|
|
23
|
-
return this.activityLogModel.aggregate([
|
|
24
|
-
{
|
|
25
|
-
$match: {
|
|
26
|
-
game,
|
|
27
|
-
userId,
|
|
28
|
-
date: { $gte: weekAgo.toDate() },
|
|
29
|
-
event: ActivityLogEnum.USER_LOGIN,
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
$group: {
|
|
34
|
-
_id: { $dateToString: { format: '%Y-%m-%d', date: '$date' } },
|
|
35
|
-
userId: { $first: '$userId' },
|
|
36
|
-
userName: { $first: '$userName' },
|
|
37
|
-
event: { $first: '$event' },
|
|
38
|
-
game: { $first: '$game' },
|
|
39
|
-
channels: { $first: '$channels' },
|
|
40
|
-
count: { $sum: 1 },
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
$project: {
|
|
45
|
-
_id: 0,
|
|
46
|
-
id: '$_id',
|
|
47
|
-
userId: 1,
|
|
48
|
-
userName: 1,
|
|
49
|
-
event: 1,
|
|
50
|
-
game: 1,
|
|
51
|
-
channel: 1,
|
|
52
|
-
count: 1,
|
|
53
|
-
date: '$_id',
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
$sort: { date: -1 },
|
|
58
|
-
},
|
|
59
|
-
]);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async userIsNewbie(userId: string): Promise<boolean> {
|
|
63
|
-
return (
|
|
64
|
-
(await this.activityLogModel
|
|
65
|
-
.countDocuments({ userId, event: ActivityLogEnum.USER_LOGIN })
|
|
66
|
-
.exec()) === 1
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async getUserPlayedGamesCount(userId: string): Promise<number> {
|
|
71
|
-
return await this.activityLogModel
|
|
72
|
-
.countDocuments({ userId, event: ActivityLogEnum.USER_PLAYED_GAME })
|
|
73
|
-
.exec();
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async getUserWonGamesCount(userId: string): Promise<number> {
|
|
77
|
-
return await this.activityLogModel
|
|
78
|
-
.countDocuments({ userId, event: ActivityLogEnum.USER_WON_GAME })
|
|
79
|
-
.exec();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async getUserWonProfiCount(userId: string): Promise<number> {
|
|
83
|
-
return await this.activityLogModel
|
|
84
|
-
.countDocuments({ userId, event: ActivityLogEnum.USER_WON_PROFI })
|
|
85
|
-
.exec();
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async getUserWonOneTableTournamentCount(userId: string): Promise<number> {
|
|
89
|
-
return await this.activityLogModel
|
|
90
|
-
.countDocuments({
|
|
91
|
-
userId,
|
|
92
|
-
event: ActivityLogEnum.USER_WON_ONE_TABLE_TOURNAMENT,
|
|
93
|
-
})
|
|
94
|
-
.exec();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
async getUserTodayBonus(userId: string): Promise<number> {
|
|
98
|
-
const log = await this.activityLogModel
|
|
99
|
-
.findOne({
|
|
100
|
-
userId,
|
|
101
|
-
event: ActivityLogEnum.USER_GOT_BONUS,
|
|
102
|
-
date: {
|
|
103
|
-
$gte: dayjs().startOf('day').toDate(),
|
|
104
|
-
$lte: dayjs().endOf('day').toDate(),
|
|
105
|
-
},
|
|
106
|
-
})
|
|
107
|
-
.exec();
|
|
108
|
-
|
|
109
|
-
return log?.amount ?? 0;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async addUserLoginEvent(
|
|
113
|
-
userId: string,
|
|
114
|
-
userName: string,
|
|
115
|
-
game: string,
|
|
116
|
-
channels: string,
|
|
117
|
-
): Promise<ActivityLog> {
|
|
118
|
-
return this.addActivityLog({
|
|
119
|
-
event: ActivityLogEnum.USER_LOGIN,
|
|
120
|
-
userId,
|
|
121
|
-
userName,
|
|
122
|
-
game,
|
|
123
|
-
channels,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
async addUserGotBonuseEvent(
|
|
128
|
-
userId: string,
|
|
129
|
-
userName: string,
|
|
130
|
-
game: string,
|
|
131
|
-
channels: string,
|
|
132
|
-
amount: number,
|
|
133
|
-
): Promise<ActivityLog> {
|
|
134
|
-
return this.addActivityLog({
|
|
135
|
-
event: ActivityLogEnum.USER_GOT_BONUS,
|
|
136
|
-
userId,
|
|
137
|
-
userName,
|
|
138
|
-
game,
|
|
139
|
-
channels,
|
|
140
|
-
amount,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
async addUserPlayedGameEvent(
|
|
145
|
-
userId: string,
|
|
146
|
-
userName: string,
|
|
147
|
-
game: string,
|
|
148
|
-
channels: string,
|
|
149
|
-
): Promise<ActivityLog> {
|
|
150
|
-
return this.addActivityLog({
|
|
151
|
-
event: ActivityLogEnum.USER_PLAYED_GAME,
|
|
152
|
-
userId,
|
|
153
|
-
userName,
|
|
154
|
-
game,
|
|
155
|
-
channels,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
async addUserWonGameEvent(
|
|
160
|
-
userId: string,
|
|
161
|
-
userName: string,
|
|
162
|
-
game: string,
|
|
163
|
-
channels: string,
|
|
164
|
-
): Promise<ActivityLog> {
|
|
165
|
-
return this.addActivityLog({
|
|
166
|
-
event: ActivityLogEnum.USER_WON_GAME,
|
|
167
|
-
userId,
|
|
168
|
-
userName,
|
|
169
|
-
game,
|
|
170
|
-
channels,
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
async addUserWonProfieEvent(
|
|
175
|
-
userId: string,
|
|
176
|
-
userName: string,
|
|
177
|
-
game: string,
|
|
178
|
-
channels: string,
|
|
179
|
-
): Promise<ActivityLog> {
|
|
180
|
-
return this.addActivityLog({
|
|
181
|
-
event: ActivityLogEnum.USER_WON_PROFI,
|
|
182
|
-
userId,
|
|
183
|
-
userName,
|
|
184
|
-
game,
|
|
185
|
-
channels,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
async addUserWonOneTableTournamentEvent(
|
|
190
|
-
userId: string,
|
|
191
|
-
userName: string,
|
|
192
|
-
game: string,
|
|
193
|
-
channels: string,
|
|
194
|
-
): Promise<ActivityLog> {
|
|
195
|
-
return this.addActivityLog({
|
|
196
|
-
event: ActivityLogEnum.USER_WON_ONE_TABLE_TOURNAMENT,
|
|
197
|
-
userId,
|
|
198
|
-
userName,
|
|
199
|
-
game,
|
|
200
|
-
channels,
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
async addActivityLog(
|
|
205
|
-
activityLog: Partial<ActivityLog>,
|
|
206
|
-
): Promise<ActivityLog> {
|
|
207
|
-
return this.activityLogModel.create(activityLog);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
import dayjs from 'dayjs';
|
|
5
|
+
|
|
6
|
+
import { ActivityLog, ActivityLogDocument } from '..';
|
|
7
|
+
import { ActivityLogEnum } from '../models/activity-log.enum';
|
|
8
|
+
import { IActivityLogUserLogin } from '../models/activity-log-user-login.interface';
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class ActivityLogRepository {
|
|
12
|
+
constructor(
|
|
13
|
+
@InjectModel(ActivityLog.name)
|
|
14
|
+
private activityLogModel: Model<ActivityLogDocument>,
|
|
15
|
+
) {}
|
|
16
|
+
|
|
17
|
+
async findLast7DaysLogins(
|
|
18
|
+
game: string,
|
|
19
|
+
userId: string,
|
|
20
|
+
): Promise<Array<IActivityLogUserLogin>> {
|
|
21
|
+
const weekAgo = dayjs().startOf('day').add(-1, 'week');
|
|
22
|
+
|
|
23
|
+
return this.activityLogModel.aggregate([
|
|
24
|
+
{
|
|
25
|
+
$match: {
|
|
26
|
+
game,
|
|
27
|
+
userId,
|
|
28
|
+
date: { $gte: weekAgo.toDate() },
|
|
29
|
+
event: ActivityLogEnum.USER_LOGIN,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
$group: {
|
|
34
|
+
_id: { $dateToString: { format: '%Y-%m-%d', date: '$date' } },
|
|
35
|
+
userId: { $first: '$userId' },
|
|
36
|
+
userName: { $first: '$userName' },
|
|
37
|
+
event: { $first: '$event' },
|
|
38
|
+
game: { $first: '$game' },
|
|
39
|
+
channels: { $first: '$channels' },
|
|
40
|
+
count: { $sum: 1 },
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
$project: {
|
|
45
|
+
_id: 0,
|
|
46
|
+
id: '$_id',
|
|
47
|
+
userId: 1,
|
|
48
|
+
userName: 1,
|
|
49
|
+
event: 1,
|
|
50
|
+
game: 1,
|
|
51
|
+
channel: 1,
|
|
52
|
+
count: 1,
|
|
53
|
+
date: '$_id',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
$sort: { date: -1 },
|
|
58
|
+
},
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async userIsNewbie(userId: string): Promise<boolean> {
|
|
63
|
+
return (
|
|
64
|
+
(await this.activityLogModel
|
|
65
|
+
.countDocuments({ userId, event: ActivityLogEnum.USER_LOGIN })
|
|
66
|
+
.exec()) === 1
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async getUserPlayedGamesCount(userId: string): Promise<number> {
|
|
71
|
+
return await this.activityLogModel
|
|
72
|
+
.countDocuments({ userId, event: ActivityLogEnum.USER_PLAYED_GAME })
|
|
73
|
+
.exec();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async getUserWonGamesCount(userId: string): Promise<number> {
|
|
77
|
+
return await this.activityLogModel
|
|
78
|
+
.countDocuments({ userId, event: ActivityLogEnum.USER_WON_GAME })
|
|
79
|
+
.exec();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async getUserWonProfiCount(userId: string): Promise<number> {
|
|
83
|
+
return await this.activityLogModel
|
|
84
|
+
.countDocuments({ userId, event: ActivityLogEnum.USER_WON_PROFI })
|
|
85
|
+
.exec();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async getUserWonOneTableTournamentCount(userId: string): Promise<number> {
|
|
89
|
+
return await this.activityLogModel
|
|
90
|
+
.countDocuments({
|
|
91
|
+
userId,
|
|
92
|
+
event: ActivityLogEnum.USER_WON_ONE_TABLE_TOURNAMENT,
|
|
93
|
+
})
|
|
94
|
+
.exec();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async getUserTodayBonus(userId: string): Promise<number> {
|
|
98
|
+
const log = await this.activityLogModel
|
|
99
|
+
.findOne({
|
|
100
|
+
userId,
|
|
101
|
+
event: ActivityLogEnum.USER_GOT_BONUS,
|
|
102
|
+
date: {
|
|
103
|
+
$gte: dayjs().startOf('day').toDate(),
|
|
104
|
+
$lte: dayjs().endOf('day').toDate(),
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
.exec();
|
|
108
|
+
|
|
109
|
+
return log?.amount ?? 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async addUserLoginEvent(
|
|
113
|
+
userId: string,
|
|
114
|
+
userName: string,
|
|
115
|
+
game: string,
|
|
116
|
+
channels: string,
|
|
117
|
+
): Promise<ActivityLog> {
|
|
118
|
+
return this.addActivityLog({
|
|
119
|
+
event: ActivityLogEnum.USER_LOGIN,
|
|
120
|
+
userId,
|
|
121
|
+
userName,
|
|
122
|
+
game,
|
|
123
|
+
channels,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async addUserGotBonuseEvent(
|
|
128
|
+
userId: string,
|
|
129
|
+
userName: string,
|
|
130
|
+
game: string,
|
|
131
|
+
channels: string,
|
|
132
|
+
amount: number,
|
|
133
|
+
): Promise<ActivityLog> {
|
|
134
|
+
return this.addActivityLog({
|
|
135
|
+
event: ActivityLogEnum.USER_GOT_BONUS,
|
|
136
|
+
userId,
|
|
137
|
+
userName,
|
|
138
|
+
game,
|
|
139
|
+
channels,
|
|
140
|
+
amount,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async addUserPlayedGameEvent(
|
|
145
|
+
userId: string,
|
|
146
|
+
userName: string,
|
|
147
|
+
game: string,
|
|
148
|
+
channels: string,
|
|
149
|
+
): Promise<ActivityLog> {
|
|
150
|
+
return this.addActivityLog({
|
|
151
|
+
event: ActivityLogEnum.USER_PLAYED_GAME,
|
|
152
|
+
userId,
|
|
153
|
+
userName,
|
|
154
|
+
game,
|
|
155
|
+
channels,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async addUserWonGameEvent(
|
|
160
|
+
userId: string,
|
|
161
|
+
userName: string,
|
|
162
|
+
game: string,
|
|
163
|
+
channels: string,
|
|
164
|
+
): Promise<ActivityLog> {
|
|
165
|
+
return this.addActivityLog({
|
|
166
|
+
event: ActivityLogEnum.USER_WON_GAME,
|
|
167
|
+
userId,
|
|
168
|
+
userName,
|
|
169
|
+
game,
|
|
170
|
+
channels,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async addUserWonProfieEvent(
|
|
175
|
+
userId: string,
|
|
176
|
+
userName: string,
|
|
177
|
+
game: string,
|
|
178
|
+
channels: string,
|
|
179
|
+
): Promise<ActivityLog> {
|
|
180
|
+
return this.addActivityLog({
|
|
181
|
+
event: ActivityLogEnum.USER_WON_PROFI,
|
|
182
|
+
userId,
|
|
183
|
+
userName,
|
|
184
|
+
game,
|
|
185
|
+
channels,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
async addUserWonOneTableTournamentEvent(
|
|
190
|
+
userId: string,
|
|
191
|
+
userName: string,
|
|
192
|
+
game: string,
|
|
193
|
+
channels: string,
|
|
194
|
+
): Promise<ActivityLog> {
|
|
195
|
+
return this.addActivityLog({
|
|
196
|
+
event: ActivityLogEnum.USER_WON_ONE_TABLE_TOURNAMENT,
|
|
197
|
+
userId,
|
|
198
|
+
userName,
|
|
199
|
+
game,
|
|
200
|
+
channels,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async addActivityLog(
|
|
205
|
+
activityLog: Partial<ActivityLog>,
|
|
206
|
+
): Promise<ActivityLog> {
|
|
207
|
+
return this.activityLogModel.create(activityLog);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
|
|
5
|
-
import { Admin, AdminDocument } from '../';
|
|
6
|
-
|
|
7
|
-
@Injectable()
|
|
8
|
-
export class AdminRepository {
|
|
9
|
-
constructor(
|
|
10
|
-
@InjectModel(Admin.name) private adminModel: Model<AdminDocument>,
|
|
11
|
-
) {}
|
|
12
|
-
|
|
13
|
-
async findById(id: string): Promise<Admin | null> {
|
|
14
|
-
return this.adminModel.findOne({ _id: id }).exec();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async findByLogin(login: string): Promise<Admin | null> {
|
|
18
|
-
return this.adminModel.findOne({ login }).exec();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
|
|
5
|
+
import { Admin, AdminDocument } from '../';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class AdminRepository {
|
|
9
|
+
constructor(
|
|
10
|
+
@InjectModel(Admin.name) private adminModel: Model<AdminDocument>,
|
|
11
|
+
) {}
|
|
12
|
+
|
|
13
|
+
async findById(id: string): Promise<Admin | null> {
|
|
14
|
+
return this.adminModel.findOne({ _id: id }).exec();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async findByLogin(login: string): Promise<Admin | null> {
|
|
18
|
+
return this.adminModel.findOne({ login }).exec();
|
|
19
|
+
}
|
|
20
|
+
}
|