jp.db.schemas 2.2.14 → 2.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/repositories/menu.repository.d.ts.map +1 -1
  2. package/dist/repositories/menu.repository.js +1 -0
  3. package/dist/repositories/menu.repository.js.map +1 -1
  4. package/dist/repositories/products.repository.d.ts.map +1 -1
  5. package/dist/repositories/products.repository.js +1 -0
  6. package/dist/repositories/products.repository.js.map +1 -1
  7. package/dist/repositories/rating.repository.d.ts +1 -1
  8. package/dist/repositories/rating.repository.d.ts.map +1 -1
  9. package/dist/repositories/rating.repository.js +0 -2
  10. package/dist/repositories/rating.repository.js.map +1 -1
  11. package/dist/repositories/setting.repository.d.ts.map +1 -1
  12. package/dist/repositories/setting.repository.js +1 -0
  13. package/dist/repositories/setting.repository.js.map +1 -1
  14. package/dist/repositories/users.repository.d.ts +1 -0
  15. package/dist/repositories/users.repository.d.ts.map +1 -1
  16. package/dist/repositories/users.repository.js +18 -0
  17. package/dist/repositories/users.repository.js.map +1 -1
  18. package/dist/schemas/activity_log.schema.js +1 -1
  19. package/dist/schemas/activity_log.schema.js.map +1 -1
  20. package/dist/schemas/purchase.schema.js +1 -1
  21. package/dist/schemas/purchase.schema.js.map +1 -1
  22. package/dist/schemas/rating.schema.d.ts +2 -12
  23. package/dist/schemas/rating.schema.d.ts.map +1 -1
  24. package/dist/schemas/rating.schema.js +1 -5
  25. package/dist/schemas/rating.schema.js.map +1 -1
  26. package/dist/schemas/user.schema.js +2 -2
  27. package/dist/schemas/user.schema.js.map +1 -1
  28. package/dist/schemas/users_achievement.schema.js +1 -1
  29. package/dist/schemas/users_achievement.schema.js.map +1 -1
  30. package/dist/schemas/users_balance.schema.js +1 -1
  31. package/dist/schemas/users_balance.schema.js.map +1 -1
  32. package/package.json +37 -37
  33. package/readme.md +3 -3
  34. package/src/index.ts +277 -277
  35. package/src/models/account-type.enum.ts +8 -8
  36. package/src/models/activity-log-user-login.interface.ts +10 -10
  37. package/src/models/activity-log.enum.ts +8 -8
  38. package/src/models/currency.enum.ts +6 -6
  39. package/src/models/experiences-level-edge.enum.ts +4 -4
  40. package/src/models/experiences-level-rank.enum.ts +5 -5
  41. package/src/models/rating-add-bulk-item.interface.ts +7 -7
  42. package/src/models/rating-monthly-result.interface.ts +12 -12
  43. package/src/models/tournament-participant.interface.ts +5 -5
  44. package/src/models/tournament-status.enum.ts +6 -6
  45. package/src/models/tournament-template.enum.ts +3 -3
  46. package/src/models/tournament-winner.interface.ts +7 -7
  47. package/src/models/users-balance-reason.enum.ts +8 -8
  48. package/src/repositories/achievement.repository.ts +22 -22
  49. package/src/repositories/activity-log.repository.ts +209 -209
  50. package/src/repositories/admin.repository.ts +20 -20
  51. package/src/repositories/article.repository.ts +24 -24
  52. package/src/repositories/banners.repository.ts +67 -67
  53. package/src/repositories/complains.repository.ts +31 -31
  54. package/src/repositories/daily-bonus.repository.ts +33 -33
  55. package/src/repositories/friend.repository.ts +16 -16
  56. package/src/repositories/game-result.repository.ts +19 -19
  57. package/src/repositories/game-statistic.repository.ts +22 -22
  58. package/src/repositories/index.ts +57 -57
  59. package/src/repositories/many-tables-tournament-rooms.repository.ts +167 -167
  60. package/src/repositories/menu.repository.ts +21 -20
  61. package/src/repositories/notification.repository.ts +59 -59
  62. package/src/repositories/one-table-tournament-rooms.repository.ts +142 -142
  63. package/src/repositories/premium.repository.ts +22 -22
  64. package/src/repositories/products.repository.ts +33 -32
  65. package/src/repositories/purchase.repository.ts +111 -111
  66. package/src/repositories/rating.repository.ts +77 -79
  67. package/src/repositories/rule.repository.ts +20 -20
  68. package/src/repositories/servers.repository.ts +16 -16
  69. package/src/repositories/setting.repository.ts +26 -25
  70. package/src/repositories/settings-options.repository.ts +17 -17
  71. package/src/repositories/simple-rooms.repository.ts +16 -16
  72. package/src/repositories/users-achievements.repository.ts +46 -46
  73. package/src/repositories/users-balances.repository.ts +65 -65
  74. package/src/repositories/users.repository.ts +179 -153
  75. package/src/repositories/welcome.repository.ts +22 -22
  76. package/src/schemas/achievement.schema.ts +34 -34
  77. package/src/schemas/activity_log.schema.ts +37 -37
  78. package/src/schemas/admin.schema.ts +22 -22
  79. package/src/schemas/article.schema.ts +37 -37
  80. package/src/schemas/banner.schema.ts +37 -37
  81. package/src/schemas/channel_message.schema.ts +32 -32
  82. package/src/schemas/complain.schema.ts +46 -46
  83. package/src/schemas/daily_bonus.schema.ts +46 -46
  84. package/src/schemas/feature.schema.ts +28 -28
  85. package/src/schemas/friend.schema.ts +46 -46
  86. package/src/schemas/game_result.schema.ts +68 -68
  87. package/src/schemas/game_statistic.schema.ts +34 -34
  88. package/src/schemas/many_tables_tournament_rooms.schema.ts +87 -87
  89. package/src/schemas/menu.schema.ts +37 -37
  90. package/src/schemas/notification.schema.ts +61 -61
  91. package/src/schemas/one_table_tournament_rooms.schema.ts +84 -84
  92. package/src/schemas/premium.schema.ts +34 -34
  93. package/src/schemas/product.schema.ts +111 -111
  94. package/src/schemas/purchase.schema.ts +61 -61
  95. package/src/schemas/purchase_channel.schema.ts +32 -32
  96. package/src/schemas/rating.schema.ts +34 -37
  97. package/src/schemas/rule.schema.ts +34 -34
  98. package/src/schemas/server.schema.ts +22 -22
  99. package/src/schemas/setting.schema.ts +49 -49
  100. package/src/schemas/settings_option.schema.ts +41 -41
  101. package/src/schemas/simple_rooms.schema.ts +49 -49
  102. package/src/schemas/user.fb.schema.ts +33 -33
  103. package/src/schemas/user.google.schema.ts +24 -24
  104. package/src/schemas/user.ok.schema.ts +53 -53
  105. package/src/schemas/user.schema.ts +185 -185
  106. package/src/schemas/user.tg.schema.ts +30 -30
  107. package/src/schemas/user.vk.schema.ts +70 -70
  108. package/src/schemas/user.ya.schema.ts +24 -24
  109. package/src/schemas/users_achievement.schema.ts +41 -41
  110. package/src/schemas/users_balance.schema.ts +34 -34
  111. package/src/schemas/welcome.schema.ts +37 -37
  112. package/src/utils.ts +7 -7
@@ -1,153 +1,179 @@
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
15
- ? { $or: [{ fullName: regexpName }, { fullNameAlias: regexpName }] }
16
- : {};
17
- }
18
-
19
- export type UserGameResultType = {
20
- userId: string;
21
- balanceAdding: number;
22
- experienceAdding: number;
23
- levelAdding: number;
24
- };
25
-
26
- @Injectable()
27
- export class UsersRepository {
28
- constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}
29
-
30
- async findById(id: string): Promise<User | null> {
31
- return this.userModel.findById(id).exec();
32
- }
33
-
34
- async findByVKId(vkId: number): Promise<User | null> {
35
- return this.userModel.findOne({ 'vkUser.id': vkId }).exec();
36
- }
37
-
38
- async findByOkId(okId: string): Promise<User | null> {
39
- return this.userModel.findOne({ 'okUser.uid': okId }).exec();
40
- }
41
-
42
- async findByYAId(yaId: string): Promise<User | null> {
43
- return this.userModel.findOne({ 'yaUser.userId': yaId }).exec();
44
- }
45
-
46
- async findByGoogleId(googleId: string): Promise<User | null> {
47
- return this.userModel.findOne({ 'googleUser.userId': googleId }).exec();
48
- }
49
-
50
- async findByFBId(fbId: string): Promise<User | null> {
51
- return this.userModel.findOne({ 'fbUser.playerId': fbId }).exec();
52
- }
53
-
54
- async findByTGId(tgId: number): Promise<User | null> {
55
- return this.userModel.findOne({ 'tgUser.id': tgId }).exec();
56
- }
57
-
58
- async findAndCount(
59
- userName: string,
60
- limit: number,
61
- skip: number,
62
- ): Promise<{
63
- items: Array<User>;
64
- total: number;
65
- }> {
66
- const items = await this.userModel
67
- .find(getFullNameFilter(userName))
68
- .limit(limit)
69
- .skip(skip)
70
- .exec();
71
-
72
- const total = await this.userModel
73
- .find(getFullNameFilter(userName))
74
- .countDocuments()
75
- .exec();
76
-
77
- return { items, total };
78
- }
79
-
80
- async createUser(user: Partial<User>): Promise<User> {
81
- return this.userModel.create(user);
82
- }
83
-
84
- async updateUser(
85
- userId: string,
86
- user: Partial<User>,
87
- balanceAdding?: number,
88
- ): Promise<UserDocument | null> {
89
- delete user.balance;
90
-
91
- return this.userModel
92
- .findByIdAndUpdate(
93
- userId,
94
- {
95
- $set: {
96
- ...user,
97
- },
98
- $inc: { balance: balanceAdding ?? 0 },
99
- },
100
- { new: true },
101
- )
102
- .exec();
103
- }
104
-
105
- async saveGameResult(
106
- usersBalances: Array<UserGameResultType>,
107
- ): Promise<BulkWriteResult> {
108
- return this.userModel.bulkWrite(
109
- usersBalances.map((item) => ({
110
- updateOne: {
111
- filter: { _id: item.userId },
112
- update: {
113
- $inc: {
114
- balance: item.balanceAdding,
115
- experience: item.experienceAdding,
116
- level: item.levelAdding,
117
- },
118
- },
119
- },
120
- })),
121
- );
122
- }
123
-
124
- async addToBalance(
125
- userId: string,
126
- balanceAdding: number,
127
- ): Promise<UserDocument | null> {
128
- return this.userModel
129
- .findByIdAndUpdate(
130
- userId,
131
- {
132
- $inc: { balance: balanceAdding },
133
- },
134
- { new: true },
135
- )
136
- .exec();
137
- }
138
-
139
- async subtractFromBalance(
140
- userId: string,
141
- balanceSubtraction: number,
142
- ): Promise<UserDocument | null> {
143
- return this.userModel
144
- .findByIdAndUpdate(
145
- userId,
146
- {
147
- $inc: { balance: -balanceSubtraction },
148
- },
149
- { new: true },
150
- )
151
- .exec();
152
- }
153
- }
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
+ import dayjs, { ManipulateType } from 'dayjs';
8
+
9
+ function getFullNameFilter(userName: string) {
10
+ const regexpName = {
11
+ $regex: userName,
12
+ $options: 'i',
13
+ };
14
+
15
+ return userName
16
+ ? { $or: [{ fullName: regexpName }, { fullNameAlias: regexpName }] }
17
+ : {};
18
+ }
19
+
20
+ export type UserGameResultType = {
21
+ userId: string;
22
+ balanceAdding: number;
23
+ experienceAdding: number;
24
+ levelAdding: number;
25
+ };
26
+
27
+ @Injectable()
28
+ export class UsersRepository {
29
+ constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}
30
+
31
+ async findById(id: string): Promise<User | null> {
32
+ return this.userModel.findById(id).exec();
33
+ }
34
+
35
+ async findByVKId(vkId: number): Promise<User | null> {
36
+ return this.userModel.findOne({ 'vkUser.id': vkId }).exec();
37
+ }
38
+
39
+ async findByOkId(okId: string): Promise<User | null> {
40
+ return this.userModel.findOne({ 'okUser.uid': okId }).exec();
41
+ }
42
+
43
+ async findByYAId(yaId: string): Promise<User | null> {
44
+ return this.userModel.findOne({ 'yaUser.userId': yaId }).exec();
45
+ }
46
+
47
+ async findByGoogleId(googleId: string): Promise<User | null> {
48
+ return this.userModel.findOne({ 'googleUser.userId': googleId }).exec();
49
+ }
50
+
51
+ async findByFBId(fbId: string): Promise<User | null> {
52
+ return this.userModel.findOne({ 'fbUser.playerId': fbId }).exec();
53
+ }
54
+
55
+ async findByTGId(tgId: number): Promise<User | null> {
56
+ return this.userModel.findOne({ 'tgUser.id': tgId }).exec();
57
+ }
58
+
59
+ async findAndCount(
60
+ userName: string,
61
+ limit: number,
62
+ skip: number,
63
+ ): Promise<{
64
+ items: Array<User>;
65
+ total: number;
66
+ }> {
67
+ const items = await this.userModel
68
+ .find(getFullNameFilter(userName))
69
+ .limit(limit)
70
+ .skip(skip)
71
+ .exec();
72
+
73
+ const total = await this.userModel
74
+ .find(getFullNameFilter(userName))
75
+ .countDocuments()
76
+ .exec();
77
+
78
+ return { items, total };
79
+ }
80
+
81
+ async createUser(user: Partial<User>): Promise<User> {
82
+ return this.userModel.create(user);
83
+ }
84
+
85
+ async updateUser(
86
+ userId: string,
87
+ user: Partial<User>,
88
+ balanceAdding?: number,
89
+ ): Promise<UserDocument | null> {
90
+ delete user.balance;
91
+
92
+ return this.userModel
93
+ .findByIdAndUpdate(
94
+ userId,
95
+ {
96
+ $set: {
97
+ ...user,
98
+ },
99
+ $inc: { balance: balanceAdding ?? 0 },
100
+ },
101
+ { new: true },
102
+ )
103
+ .exec();
104
+ }
105
+
106
+ async saveGameResult(
107
+ usersBalances: Array<UserGameResultType>,
108
+ ): 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
+
125
+ async addToBalance(
126
+ userId: string,
127
+ balanceAdding: number,
128
+ ): Promise<UserDocument | null> {
129
+ return this.userModel
130
+ .findByIdAndUpdate(
131
+ userId,
132
+ {
133
+ $inc: { balance: balanceAdding },
134
+ },
135
+ { new: true },
136
+ )
137
+ .exec();
138
+ }
139
+
140
+ async renewPremium(
141
+ userId: string,
142
+ premiumExpired: Date,
143
+ value: number,
144
+ period: string,
145
+ ): Promise<UserDocument | null> {
146
+ const renewPremium = dayjs().isBefore(premiumExpired)
147
+ ? dayjs(premiumExpired)
148
+ .add(value, period as ManipulateType)
149
+ .toDate()
150
+ : dayjs()
151
+ .add(value, period as ManipulateType)
152
+ .toDate();
153
+
154
+ return this.userModel
155
+ .findByIdAndUpdate(
156
+ userId,
157
+ {
158
+ premiumExpired: renewPremium,
159
+ },
160
+ { new: true },
161
+ )
162
+ .exec();
163
+ }
164
+
165
+ async subtractFromBalance(
166
+ userId: string,
167
+ balanceSubtraction: number,
168
+ ): Promise<UserDocument | null> {
169
+ return this.userModel
170
+ .findByIdAndUpdate(
171
+ userId,
172
+ {
173
+ $inc: { balance: -balanceSubtraction },
174
+ },
175
+ { new: true },
176
+ )
177
+ .exec();
178
+ }
179
+ }
@@ -1,22 +1,22 @@
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 { getGameRegExpFilter, getChannelRegExpFilter } from '../utils';
7
-
8
- @Injectable()
9
- export class WelcomeRepository {
10
- constructor(
11
- @InjectModel(Welcome.name) private welcomeModel: Model<WelcomeDocument>,
12
- ) {}
13
-
14
- async findWelcome(game: string, channel: string): Promise<Welcome | null> {
15
- return this.welcomeModel
16
- .findOne({
17
- game: getGameRegExpFilter(game),
18
- channel: getChannelRegExpFilter(channel),
19
- })
20
- .exec();
21
- }
22
- }
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 { getGameRegExpFilter, getChannelRegExpFilter } from '../utils';
7
+
8
+ @Injectable()
9
+ export class WelcomeRepository {
10
+ constructor(
11
+ @InjectModel(Welcome.name) private welcomeModel: Model<WelcomeDocument>,
12
+ ) {}
13
+
14
+ async findWelcome(game: string, channel: string): Promise<Welcome | null> {
15
+ return this.welcomeModel
16
+ .findOne({
17
+ game: getGameRegExpFilter(game),
18
+ channel: getChannelRegExpFilter(channel),
19
+ })
20
+ .exec();
21
+ }
22
+ }
@@ -1,34 +1,34 @@
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({ type: Object })
16
- title: Record<string, string>;
17
-
18
- @Prop({ type: Object })
19
- description: Record<string, string>;
20
-
21
- @Prop()
22
- code: string;
23
-
24
- @Prop()
25
- vkId: string;
26
-
27
- @Prop()
28
- prize: number;
29
-
30
- @Prop()
31
- game?: string;
32
- }
33
-
34
- 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({ type: Object })
16
+ title: Record<string, string>;
17
+
18
+ @Prop({ type: Object })
19
+ description: Record<string, string>;
20
+
21
+ @Prop()
22
+ code: string;
23
+
24
+ @Prop()
25
+ vkId: string;
26
+
27
+ @Prop()
28
+ prize: number;
29
+
30
+ @Prop()
31
+ game?: string;
32
+ }
33
+
34
+ export const AchievementSchema = SchemaFactory.createForClass(Achievement);
@@ -1,37 +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({ default: new Date() })
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
+ 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({ default: Date.now })
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);
@@ -1,37 +1,37 @@
1
- import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
2
- import { Document, HydratedDocument } from 'mongoose';
3
-
4
- export type ArticleDocument = HydratedDocument<Article>;
5
-
6
- @Schema()
7
- export class Article {
8
- @Virtual({
9
- get: function (this: Document) {
10
- return this._id.toString();
11
- },
12
- })
13
- readonly articleId: string;
14
-
15
- @Prop()
16
- title: string;
17
-
18
- @Prop()
19
- titleEn: string;
20
-
21
- @Prop()
22
- text: string;
23
-
24
- @Prop()
25
- textEn: string;
26
-
27
- @Prop()
28
- cover: string;
29
-
30
- @Prop()
31
- createDate: Date;
32
-
33
- @Prop()
34
- keywords: string;
35
- }
36
-
37
- export const ArticleSchema = SchemaFactory.createForClass(Article);
1
+ import { Prop, Schema, SchemaFactory, Virtual } from '@nestjs/mongoose';
2
+ import { Document, HydratedDocument } from 'mongoose';
3
+
4
+ export type ArticleDocument = HydratedDocument<Article>;
5
+
6
+ @Schema()
7
+ export class Article {
8
+ @Virtual({
9
+ get: function (this: Document) {
10
+ return this._id.toString();
11
+ },
12
+ })
13
+ readonly articleId: string;
14
+
15
+ @Prop()
16
+ title: string;
17
+
18
+ @Prop()
19
+ titleEn: string;
20
+
21
+ @Prop()
22
+ text: string;
23
+
24
+ @Prop()
25
+ textEn: string;
26
+
27
+ @Prop()
28
+ cover: string;
29
+
30
+ @Prop()
31
+ createDate: Date;
32
+
33
+ @Prop()
34
+ keywords: string;
35
+ }
36
+
37
+ export const ArticleSchema = SchemaFactory.createForClass(Article);