jp.db.schemas 2.0.26 → 2.1.0
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/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/models/activity-log.enum.d.ts +5 -0
- package/dist/models/activity-log.enum.d.ts.map +1 -0
- package/dist/models/activity-log.enum.js +9 -0
- package/dist/models/activity-log.enum.js.map +1 -0
- package/dist/repositories/activity-log.repository.d.ts +11 -0
- package/dist/repositories/activity-log.repository.d.ts.map +1 -0
- package/dist/repositories/activity-log.repository.js +93 -0
- package/dist/repositories/activity-log.repository.js.map +1 -0
- package/dist/repositories/index.d.ts +2 -1
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/index.js +3 -1
- package/dist/repositories/index.js.map +1 -1
- package/dist/schemas/activity_log.schema.d.ts +105 -0
- package/dist/schemas/activity_log.schema.d.ts.map +1 -0
- package/dist/schemas/activity_log.schema.js +57 -0
- package/dist/schemas/activity_log.schema.js.map +1 -0
- package/dist/schemas/daily_bonus.schema.d.ts +12 -0
- package/dist/schemas/daily_bonus.schema.d.ts.map +1 -1
- package/dist/schemas/daily_bonus.schema.js +8 -0
- package/dist/schemas/daily_bonus.schema.js.map +1 -1
- package/package.json +31 -30
- package/readme.md +3 -3
- package/src/index.ts +226 -219
- package/src/models/activity-log.enum.ts +4 -0
- 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/repositories/activity-log.repository.ts +93 -0
- package/src/repositories/admin.repository.ts +23 -23
- package/src/repositories/article.repository.ts +33 -33
- package/src/repositories/balance-history.repository.ts +15 -15
- package/src/repositories/banners.repository.ts +54 -54
- package/src/repositories/complains.repository.ts +30 -30
- package/src/repositories/daily-bonus.repository.ts +19 -19
- package/src/repositories/game-result.repository.ts +15 -15
- package/src/repositories/index.ts +47 -45
- package/src/repositories/menu.repository.ts +21 -21
- package/src/repositories/notification.repository.ts +54 -54
- package/src/repositories/premium.repository.ts +19 -19
- package/src/repositories/products.repository.ts +29 -29
- package/src/repositories/rooms.repository.ts +17 -17
- package/src/repositories/rule.repository.ts +19 -19
- package/src/repositories/scheduled-tournaments.repository.ts +30 -30
- package/src/repositories/servers.repository.ts +18 -18
- package/src/repositories/setting.repository.ts +19 -19
- package/src/repositories/simple-rooms.repository.ts +17 -17
- package/src/repositories/tournament-many-tables-rooms.repository.ts +132 -132
- package/src/repositories/tournament-one-table-rooms.repository.ts +106 -106
- package/src/repositories/users.repository.ts +124 -124
- package/src/repositories/welcome.repository.ts +19 -19
- package/src/schemas/achievement.schema.ts +40 -40
- package/src/schemas/activity_log.schema.ts +37 -0
- package/src/schemas/admin.schema.ts +22 -22
- package/src/schemas/article.schema.ts +37 -37
- package/src/schemas/balance_history.schema.ts +37 -37
- package/src/schemas/banner.schema.ts +40 -40
- package/src/schemas/channel_message.schema.ts +31 -31
- package/src/schemas/complain.schema.ts +46 -46
- package/src/schemas/daily_bonus.schema.ts +56 -50
- package/src/schemas/feature.schema.ts +28 -28
- package/src/schemas/game_result.schema.ts +68 -68
- package/src/schemas/menu.schema.ts +40 -40
- package/src/schemas/notification.schema.ts +61 -61
- package/src/schemas/premium.schema.ts +45 -45
- package/src/schemas/product.schema.ts +123 -123
- package/src/schemas/purchase.schema.ts +64 -64
- package/src/schemas/purchase_channel.schema.ts +31 -31
- package/src/schemas/rating.schema.ts +46 -46
- package/src/schemas/rooms.schema.ts +63 -63
- package/src/schemas/rule.schema.ts +45 -45
- package/src/schemas/scheduled_tournament.schema.ts +93 -93
- package/src/schemas/server.schema.ts +22 -22
- package/src/schemas/setting.schema.ts +55 -55
- package/src/schemas/simple_rooms.schema.ts +46 -46
- package/src/schemas/tournament_many_tables_rooms.schema.ts +84 -84
- package/src/schemas/tournament_one_table_rooms.schema.ts +81 -81
- 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 +52 -52
- package/src/schemas/user.schema.ts +184 -184
- 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/welcome.schema.ts +45 -45
- package/src/utils.ts +3 -3
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
|
|
5
|
-
import { TournamentOneTableRoom, TournamentOneTableRoomDocument } from '../';
|
|
6
|
-
import { ITournamentParticipant } from '../models/tournament-participant.interface';
|
|
7
|
-
import { TournamentStatusEnum } from '../models/tournament-status.enum';
|
|
8
|
-
import { ITournamentWinner } from '../models/tournament-winner.interface';
|
|
9
|
-
import { TournamentTemplateEnum } from '../models/tournament-template.enum';
|
|
10
|
-
|
|
11
|
-
@Injectable()
|
|
12
|
-
export class TournamentOneTableRoomsRepository {
|
|
13
|
-
constructor (@InjectModel(TournamentOneTableRoom.name) private tournamentModel: Model<TournamentOneTableRoomDocument>) {
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async findTournamentById (tournamentId: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
17
|
-
return this.tournamentModel
|
|
18
|
-
.findById(tournamentId)
|
|
19
|
-
.exec();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async findTemplateById (templateId: string, gameType: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
23
|
-
return this.tournamentModel
|
|
24
|
-
.findOne({ isTemplate: true, templateId, gameType })
|
|
25
|
-
.exec();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async findTournaments (gameType: string): Promise<Array<TournamentOneTableRoomDocument>> {
|
|
29
|
-
return this.tournamentModel
|
|
30
|
-
.find({ gameType, isTemplate: false })
|
|
31
|
-
.exec();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async findWaitingTournament (gameType: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
35
|
-
return this.tournamentModel
|
|
36
|
-
.findOne({
|
|
37
|
-
gameType,
|
|
38
|
-
status: TournamentStatusEnum.STATE_WAITING_FOR_START,
|
|
39
|
-
isTemplate: false,
|
|
40
|
-
})
|
|
41
|
-
.exec();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async createTournament (tournament: Partial<TournamentOneTableRoom>): Promise<TournamentOneTableRoomDocument> {
|
|
45
|
-
return this.tournamentModel.create(tournament);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async createTournamentFromMasterTemplate (gameType: string): Promise<TournamentOneTableRoomDocument> {
|
|
49
|
-
const masterTemplate = await this.findTemplateById(TournamentTemplateEnum.MASTER, gameType);
|
|
50
|
-
|
|
51
|
-
return this.createTournament({
|
|
52
|
-
title: masterTemplate.title,
|
|
53
|
-
subtitle: masterTemplate.subtitle,
|
|
54
|
-
description: masterTemplate.description,
|
|
55
|
-
tableSize: masterTemplate.tableSize,
|
|
56
|
-
bet: masterTemplate.bet,
|
|
57
|
-
ticketPrice: masterTemplate.ticketPrice,
|
|
58
|
-
roomType: masterTemplate.roomType,
|
|
59
|
-
gameType: masterTemplate.gameType,
|
|
60
|
-
rulesType: masterTemplate.rulesType,
|
|
61
|
-
deckType: masterTemplate.deckType,
|
|
62
|
-
maxParticipants: masterTemplate.maxParticipants,
|
|
63
|
-
participants: masterTemplate.participants,
|
|
64
|
-
status: masterTemplate.status,
|
|
65
|
-
winners: masterTemplate.winners,
|
|
66
|
-
createDate: new Date(),
|
|
67
|
-
isTemplate: false,
|
|
68
|
-
templateId: undefined,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async startTournament (tournamentId: string, participants: Array<ITournamentParticipant>): Promise<void> {
|
|
73
|
-
await this.tournamentModel.findByIdAndUpdate(
|
|
74
|
-
tournamentId,
|
|
75
|
-
{
|
|
76
|
-
$set: {
|
|
77
|
-
startDate: new Date(),
|
|
78
|
-
status: TournamentStatusEnum.STATE_IN_PROGRESS,
|
|
79
|
-
participants,
|
|
80
|
-
},
|
|
81
|
-
}).exec();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async cancelTournament (tournamentId: string): Promise<void> {
|
|
85
|
-
await this.tournamentModel.findByIdAndUpdate(
|
|
86
|
-
tournamentId,
|
|
87
|
-
{
|
|
88
|
-
$set: {
|
|
89
|
-
finishDate: new Date(),
|
|
90
|
-
status: TournamentStatusEnum.STATE_CANCELLED,
|
|
91
|
-
},
|
|
92
|
-
}).exec();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async finishTournament (tournamentId: string, winners: Array<ITournamentWinner>): Promise<void> {
|
|
96
|
-
await this.tournamentModel.findByIdAndUpdate(
|
|
97
|
-
tournamentId,
|
|
98
|
-
{
|
|
99
|
-
$set: {
|
|
100
|
-
finishDate: new Date(),
|
|
101
|
-
status: TournamentStatusEnum.STATE_FINISHED,
|
|
102
|
-
winners,
|
|
103
|
-
},
|
|
104
|
-
}).exec();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
|
|
5
|
+
import { TournamentOneTableRoom, TournamentOneTableRoomDocument } from '../';
|
|
6
|
+
import { ITournamentParticipant } from '../models/tournament-participant.interface';
|
|
7
|
+
import { TournamentStatusEnum } from '../models/tournament-status.enum';
|
|
8
|
+
import { ITournamentWinner } from '../models/tournament-winner.interface';
|
|
9
|
+
import { TournamentTemplateEnum } from '../models/tournament-template.enum';
|
|
10
|
+
|
|
11
|
+
@Injectable()
|
|
12
|
+
export class TournamentOneTableRoomsRepository {
|
|
13
|
+
constructor (@InjectModel(TournamentOneTableRoom.name) private tournamentModel: Model<TournamentOneTableRoomDocument>) {
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async findTournamentById (tournamentId: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
17
|
+
return this.tournamentModel
|
|
18
|
+
.findById(tournamentId)
|
|
19
|
+
.exec();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async findTemplateById (templateId: string, gameType: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
23
|
+
return this.tournamentModel
|
|
24
|
+
.findOne({ isTemplate: true, templateId, gameType })
|
|
25
|
+
.exec();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async findTournaments (gameType: string): Promise<Array<TournamentOneTableRoomDocument>> {
|
|
29
|
+
return this.tournamentModel
|
|
30
|
+
.find({ gameType, isTemplate: false })
|
|
31
|
+
.exec();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async findWaitingTournament (gameType: string): Promise<TournamentOneTableRoomDocument | null> {
|
|
35
|
+
return this.tournamentModel
|
|
36
|
+
.findOne({
|
|
37
|
+
gameType,
|
|
38
|
+
status: TournamentStatusEnum.STATE_WAITING_FOR_START,
|
|
39
|
+
isTemplate: false,
|
|
40
|
+
})
|
|
41
|
+
.exec();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async createTournament (tournament: Partial<TournamentOneTableRoom>): Promise<TournamentOneTableRoomDocument> {
|
|
45
|
+
return this.tournamentModel.create(tournament);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async createTournamentFromMasterTemplate (gameType: string): Promise<TournamentOneTableRoomDocument> {
|
|
49
|
+
const masterTemplate = await this.findTemplateById(TournamentTemplateEnum.MASTER, gameType);
|
|
50
|
+
|
|
51
|
+
return this.createTournament({
|
|
52
|
+
title: masterTemplate.title,
|
|
53
|
+
subtitle: masterTemplate.subtitle,
|
|
54
|
+
description: masterTemplate.description,
|
|
55
|
+
tableSize: masterTemplate.tableSize,
|
|
56
|
+
bet: masterTemplate.bet,
|
|
57
|
+
ticketPrice: masterTemplate.ticketPrice,
|
|
58
|
+
roomType: masterTemplate.roomType,
|
|
59
|
+
gameType: masterTemplate.gameType,
|
|
60
|
+
rulesType: masterTemplate.rulesType,
|
|
61
|
+
deckType: masterTemplate.deckType,
|
|
62
|
+
maxParticipants: masterTemplate.maxParticipants,
|
|
63
|
+
participants: masterTemplate.participants,
|
|
64
|
+
status: masterTemplate.status,
|
|
65
|
+
winners: masterTemplate.winners,
|
|
66
|
+
createDate: new Date(),
|
|
67
|
+
isTemplate: false,
|
|
68
|
+
templateId: undefined,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async startTournament (tournamentId: string, participants: Array<ITournamentParticipant>): Promise<void> {
|
|
73
|
+
await this.tournamentModel.findByIdAndUpdate(
|
|
74
|
+
tournamentId,
|
|
75
|
+
{
|
|
76
|
+
$set: {
|
|
77
|
+
startDate: new Date(),
|
|
78
|
+
status: TournamentStatusEnum.STATE_IN_PROGRESS,
|
|
79
|
+
participants,
|
|
80
|
+
},
|
|
81
|
+
}).exec();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async cancelTournament (tournamentId: string): Promise<void> {
|
|
85
|
+
await this.tournamentModel.findByIdAndUpdate(
|
|
86
|
+
tournamentId,
|
|
87
|
+
{
|
|
88
|
+
$set: {
|
|
89
|
+
finishDate: new Date(),
|
|
90
|
+
status: TournamentStatusEnum.STATE_CANCELLED,
|
|
91
|
+
},
|
|
92
|
+
}).exec();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async finishTournament (tournamentId: string, winners: Array<ITournamentWinner>): Promise<void> {
|
|
96
|
+
await this.tournamentModel.findByIdAndUpdate(
|
|
97
|
+
tournamentId,
|
|
98
|
+
{
|
|
99
|
+
$set: {
|
|
100
|
+
finishDate: new Date(),
|
|
101
|
+
status: TournamentStatusEnum.STATE_FINISHED,
|
|
102
|
+
winners,
|
|
103
|
+
},
|
|
104
|
+
}).exec();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
import { BulkWriteResult } from 'mongodb';
|
|
5
|
-
|
|
6
|
-
import { User, UserDocument } from '../';
|
|
7
|
-
|
|
8
|
-
function getFullNameFilter (userName: string) {
|
|
9
|
-
const regexpName = {
|
|
10
|
-
'$regex': userName,
|
|
11
|
-
'$options': 'i',
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
return userName ? { $or: [{ fullName: regexpName }, { fullNameAlias: regexpName }] } : {};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type UserGameResultType = {
|
|
18
|
-
userId: string;
|
|
19
|
-
balanceAdding: number;
|
|
20
|
-
experienceAdding: number;
|
|
21
|
-
levelAdding: number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@Injectable()
|
|
25
|
-
export class UsersRepository {
|
|
26
|
-
constructor (@InjectModel(User.name) private userModel: Model<UserDocument>) {
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async findById (id: string): Promise<User | null> {
|
|
30
|
-
return this.userModel
|
|
31
|
-
.findById(id)
|
|
32
|
-
.exec();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async findByVKId (vkId: number): Promise<User | null> {
|
|
36
|
-
return this.userModel
|
|
37
|
-
.findOne({ 'vkUser.id': vkId })
|
|
38
|
-
.exec();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async findByOkId (okId: string): Promise<User | null> {
|
|
42
|
-
return this.userModel
|
|
43
|
-
.findOne({ 'okUser.uid': okId })
|
|
44
|
-
.exec();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async findByYAId (yaId: string): Promise<User | null> {
|
|
48
|
-
return this.userModel
|
|
49
|
-
.findOne({ 'yaUser.userId': yaId })
|
|
50
|
-
.exec();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async findByGoogleId (googleId: string): Promise<User | null> {
|
|
54
|
-
return this.userModel
|
|
55
|
-
.findOne({ 'googleUser.userId': googleId })
|
|
56
|
-
.exec();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async findByFBId (fbId: string): Promise<User | null> {
|
|
60
|
-
return this.userModel
|
|
61
|
-
.findOne({ 'fbUser.playerId': fbId })
|
|
62
|
-
.exec();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async findByTGId (tgId: number): Promise<User | null> {
|
|
66
|
-
return this.userModel
|
|
67
|
-
.findOne({ 'tgUser.id': tgId })
|
|
68
|
-
.exec();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async findAndCount (userName: string, limit: number, skip: number): Promise<{
|
|
72
|
-
items: Array<User>,
|
|
73
|
-
total: number
|
|
74
|
-
}> {
|
|
75
|
-
const items = await this.userModel
|
|
76
|
-
.find(getFullNameFilter(userName))
|
|
77
|
-
.limit(limit)
|
|
78
|
-
.skip(skip)
|
|
79
|
-
.exec();
|
|
80
|
-
|
|
81
|
-
const total = await this.userModel
|
|
82
|
-
.find(getFullNameFilter(userName))
|
|
83
|
-
.countDocuments()
|
|
84
|
-
.exec();
|
|
85
|
-
|
|
86
|
-
return { items, total };
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
async createUser (user: Partial<User>): Promise<User> {
|
|
90
|
-
return this.userModel.create(user);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
async updateUser (userId: string, user: Partial<User>, balanceAdding?: number): Promise<UserDocument | null> {
|
|
94
|
-
delete user.balance;
|
|
95
|
-
|
|
96
|
-
return this.userModel.findByIdAndUpdate(
|
|
97
|
-
userId,
|
|
98
|
-
{
|
|
99
|
-
$set: {
|
|
100
|
-
...user,
|
|
101
|
-
},
|
|
102
|
-
$inc: { balance: balanceAdding ?? 0 }
|
|
103
|
-
},
|
|
104
|
-
{ new: true },
|
|
105
|
-
).exec();
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
async saveGameResult (usersBalances: Array<UserGameResultType>): Promise<BulkWriteResult> {
|
|
109
|
-
return this.userModel.bulkWrite(
|
|
110
|
-
usersBalances.map((item) => ({
|
|
111
|
-
updateOne: {
|
|
112
|
-
filter: { _id: item.userId },
|
|
113
|
-
update: {
|
|
114
|
-
$inc: {
|
|
115
|
-
balance: item.balanceAdding,
|
|
116
|
-
experience: item.experienceAdding,
|
|
117
|
-
level: item.levelAdding,
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
})),
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
import { BulkWriteResult } from 'mongodb';
|
|
5
|
+
|
|
6
|
+
import { User, UserDocument } from '../';
|
|
7
|
+
|
|
8
|
+
function getFullNameFilter (userName: string) {
|
|
9
|
+
const regexpName = {
|
|
10
|
+
'$regex': userName,
|
|
11
|
+
'$options': 'i',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return userName ? { $or: [{ fullName: regexpName }, { fullNameAlias: regexpName }] } : {};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UserGameResultType = {
|
|
18
|
+
userId: string;
|
|
19
|
+
balanceAdding: number;
|
|
20
|
+
experienceAdding: number;
|
|
21
|
+
levelAdding: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Injectable()
|
|
25
|
+
export class UsersRepository {
|
|
26
|
+
constructor (@InjectModel(User.name) private userModel: Model<UserDocument>) {
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async findById (id: string): Promise<User | null> {
|
|
30
|
+
return this.userModel
|
|
31
|
+
.findById(id)
|
|
32
|
+
.exec();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async findByVKId (vkId: number): Promise<User | null> {
|
|
36
|
+
return this.userModel
|
|
37
|
+
.findOne({ 'vkUser.id': vkId })
|
|
38
|
+
.exec();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async findByOkId (okId: string): Promise<User | null> {
|
|
42
|
+
return this.userModel
|
|
43
|
+
.findOne({ 'okUser.uid': okId })
|
|
44
|
+
.exec();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async findByYAId (yaId: string): Promise<User | null> {
|
|
48
|
+
return this.userModel
|
|
49
|
+
.findOne({ 'yaUser.userId': yaId })
|
|
50
|
+
.exec();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async findByGoogleId (googleId: string): Promise<User | null> {
|
|
54
|
+
return this.userModel
|
|
55
|
+
.findOne({ 'googleUser.userId': googleId })
|
|
56
|
+
.exec();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async findByFBId (fbId: string): Promise<User | null> {
|
|
60
|
+
return this.userModel
|
|
61
|
+
.findOne({ 'fbUser.playerId': fbId })
|
|
62
|
+
.exec();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async findByTGId (tgId: number): Promise<User | null> {
|
|
66
|
+
return this.userModel
|
|
67
|
+
.findOne({ 'tgUser.id': tgId })
|
|
68
|
+
.exec();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async findAndCount (userName: string, limit: number, skip: number): Promise<{
|
|
72
|
+
items: Array<User>,
|
|
73
|
+
total: number
|
|
74
|
+
}> {
|
|
75
|
+
const items = await this.userModel
|
|
76
|
+
.find(getFullNameFilter(userName))
|
|
77
|
+
.limit(limit)
|
|
78
|
+
.skip(skip)
|
|
79
|
+
.exec();
|
|
80
|
+
|
|
81
|
+
const total = await this.userModel
|
|
82
|
+
.find(getFullNameFilter(userName))
|
|
83
|
+
.countDocuments()
|
|
84
|
+
.exec();
|
|
85
|
+
|
|
86
|
+
return { items, total };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async createUser (user: Partial<User>): Promise<User> {
|
|
90
|
+
return this.userModel.create(user);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async updateUser (userId: string, user: Partial<User>, balanceAdding?: number): Promise<UserDocument | null> {
|
|
94
|
+
delete user.balance;
|
|
95
|
+
|
|
96
|
+
return this.userModel.findByIdAndUpdate(
|
|
97
|
+
userId,
|
|
98
|
+
{
|
|
99
|
+
$set: {
|
|
100
|
+
...user,
|
|
101
|
+
},
|
|
102
|
+
$inc: { balance: balanceAdding ?? 0 }
|
|
103
|
+
},
|
|
104
|
+
{ new: true },
|
|
105
|
+
).exec();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async saveGameResult (usersBalances: Array<UserGameResultType>): Promise<BulkWriteResult> {
|
|
109
|
+
return this.userModel.bulkWrite(
|
|
110
|
+
usersBalances.map((item) => ({
|
|
111
|
+
updateOne: {
|
|
112
|
+
filter: { _id: item.userId },
|
|
113
|
+
update: {
|
|
114
|
+
$inc: {
|
|
115
|
+
balance: item.balanceAdding,
|
|
116
|
+
experience: item.experienceAdding,
|
|
117
|
+
level: item.levelAdding,
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
})),
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
-
import { Model } from 'mongoose';
|
|
4
|
-
|
|
5
|
-
import { Welcome, WelcomeDocument } from '..';
|
|
6
|
-
import { getChannelRegExpFilter } from '../utils';
|
|
7
|
-
|
|
8
|
-
@Injectable()
|
|
9
|
-
export class WelcomeRepository {
|
|
10
|
-
constructor (@InjectModel(Welcome.name) private welcomeModel: Model<WelcomeDocument>) {
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async findWelcome (channel: string, game: string): Promise<Array<Welcome> | null> {
|
|
14
|
-
return this.welcomeModel
|
|
15
|
-
.find({
|
|
16
|
-
channels: getChannelRegExpFilter(channel),
|
|
17
|
-
})
|
|
18
|
-
.exec();
|
|
19
|
-
}
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectModel } from '@nestjs/mongoose';
|
|
3
|
+
import { Model } from 'mongoose';
|
|
4
|
+
|
|
5
|
+
import { Welcome, WelcomeDocument } from '..';
|
|
6
|
+
import { getChannelRegExpFilter } from '../utils';
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class WelcomeRepository {
|
|
10
|
+
constructor (@InjectModel(Welcome.name) private welcomeModel: Model<WelcomeDocument>) {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
async findWelcome (channel: string, game: string): Promise<Array<Welcome> | null> {
|
|
14
|
+
return this.welcomeModel
|
|
15
|
+
.find({
|
|
16
|
+
channels: getChannelRegExpFilter(channel),
|
|
17
|
+
})
|
|
18
|
+
.exec();
|
|
19
|
+
}
|
|
20
20
|
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
|
|
2
|
-
import { Document, HydratedDocument } from 'mongoose';
|
|
3
|
-
|
|
4
|
-
export type AchievementDocument = HydratedDocument<Achievement>;
|
|
5
|
-
|
|
6
|
-
@Schema()
|
|
7
|
-
export class Achievement {
|
|
8
|
-
@Virtual({
|
|
9
|
-
get: function (this: Document) {
|
|
10
|
-
return this._id.toString();
|
|
11
|
-
},
|
|
12
|
-
})
|
|
13
|
-
readonly achievementId: string;
|
|
14
|
-
|
|
15
|
-
@Prop()
|
|
16
|
-
title: string;
|
|
17
|
-
|
|
18
|
-
@Prop()
|
|
19
|
-
titleEn: string;
|
|
20
|
-
|
|
21
|
-
@Prop()
|
|
22
|
-
description: string;
|
|
23
|
-
|
|
24
|
-
@Prop()
|
|
25
|
-
descriptionEn: string;
|
|
26
|
-
|
|
27
|
-
@Prop()
|
|
28
|
-
code: string;
|
|
29
|
-
|
|
30
|
-
@Prop()
|
|
31
|
-
vkId: string;
|
|
32
|
-
|
|
33
|
-
@Prop()
|
|
34
|
-
prize: number;
|
|
35
|
-
|
|
36
|
-
@Prop()
|
|
37
|
-
game?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const AchievementSchema = SchemaFactory.createForClass(Achievement);
|
|
1
|
+
import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
|
|
2
|
+
import { Document, HydratedDocument } from 'mongoose';
|
|
3
|
+
|
|
4
|
+
export type AchievementDocument = HydratedDocument<Achievement>;
|
|
5
|
+
|
|
6
|
+
@Schema()
|
|
7
|
+
export class Achievement {
|
|
8
|
+
@Virtual({
|
|
9
|
+
get: function (this: Document) {
|
|
10
|
+
return this._id.toString();
|
|
11
|
+
},
|
|
12
|
+
})
|
|
13
|
+
readonly achievementId: string;
|
|
14
|
+
|
|
15
|
+
@Prop()
|
|
16
|
+
title: string;
|
|
17
|
+
|
|
18
|
+
@Prop()
|
|
19
|
+
titleEn: string;
|
|
20
|
+
|
|
21
|
+
@Prop()
|
|
22
|
+
description: string;
|
|
23
|
+
|
|
24
|
+
@Prop()
|
|
25
|
+
descriptionEn: string;
|
|
26
|
+
|
|
27
|
+
@Prop()
|
|
28
|
+
code: string;
|
|
29
|
+
|
|
30
|
+
@Prop()
|
|
31
|
+
vkId: string;
|
|
32
|
+
|
|
33
|
+
@Prop()
|
|
34
|
+
prize: number;
|
|
35
|
+
|
|
36
|
+
@Prop()
|
|
37
|
+
game?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const AchievementSchema = SchemaFactory.createForClass(Achievement);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
|
|
2
|
+
import { Document, HydratedDocument } from 'mongoose';
|
|
3
|
+
|
|
4
|
+
export type ActivityLogDocument = HydratedDocument<ActivityLog>;
|
|
5
|
+
|
|
6
|
+
@Schema({ collection: 'activity_log' })
|
|
7
|
+
export class ActivityLog {
|
|
8
|
+
@Virtual({
|
|
9
|
+
get: function (this: Document) {
|
|
10
|
+
return this._id.toString();
|
|
11
|
+
},
|
|
12
|
+
})
|
|
13
|
+
readonly activityLogId: string;
|
|
14
|
+
|
|
15
|
+
@Prop()
|
|
16
|
+
date: Date;
|
|
17
|
+
|
|
18
|
+
@Prop()
|
|
19
|
+
event: string;
|
|
20
|
+
|
|
21
|
+
@Prop()
|
|
22
|
+
userId: string;
|
|
23
|
+
|
|
24
|
+
@Prop()
|
|
25
|
+
userName: string;
|
|
26
|
+
|
|
27
|
+
@Prop()
|
|
28
|
+
amount?: number;
|
|
29
|
+
|
|
30
|
+
@Prop()
|
|
31
|
+
game: string;
|
|
32
|
+
|
|
33
|
+
@Prop()
|
|
34
|
+
channel: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const ActivityLogSchema = SchemaFactory.createForClass(ActivityLog);
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
|
|
2
|
-
import { Document, HydratedDocument } from 'mongoose';
|
|
3
|
-
|
|
4
|
-
export type AdminDocument = HydratedDocument<Admin>;
|
|
5
|
-
|
|
6
|
-
@Schema()
|
|
7
|
-
export class Admin {
|
|
8
|
-
@Virtual({
|
|
9
|
-
get: function (this: Document) {
|
|
10
|
-
return this._id.toString();
|
|
11
|
-
},
|
|
12
|
-
})
|
|
13
|
-
readonly adminId: string;
|
|
14
|
-
|
|
15
|
-
@Prop()
|
|
16
|
-
login: string;
|
|
17
|
-
|
|
18
|
-
@Prop()
|
|
19
|
-
pass: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const AdminSchema = SchemaFactory.createForClass(Admin);
|
|
1
|
+
import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
|
|
2
|
+
import { Document, HydratedDocument } from 'mongoose';
|
|
3
|
+
|
|
4
|
+
export type AdminDocument = HydratedDocument<Admin>;
|
|
5
|
+
|
|
6
|
+
@Schema()
|
|
7
|
+
export class Admin {
|
|
8
|
+
@Virtual({
|
|
9
|
+
get: function (this: Document) {
|
|
10
|
+
return this._id.toString();
|
|
11
|
+
},
|
|
12
|
+
})
|
|
13
|
+
readonly adminId: string;
|
|
14
|
+
|
|
15
|
+
@Prop()
|
|
16
|
+
login: string;
|
|
17
|
+
|
|
18
|
+
@Prop()
|
|
19
|
+
pass: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const AdminSchema = SchemaFactory.createForClass(Admin);
|