@lenne.tech/nest-server 3.1.3 → 3.3.1

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 (127) hide show
  1. package/dist/core/common/args/filter.args.d.ts +5 -0
  2. package/dist/core/common/args/filter.args.js +10 -0
  3. package/dist/core/common/args/filter.args.js.map +1 -1
  4. package/dist/core/common/args/pagination.args.d.ts +8 -1
  5. package/dist/core/common/args/pagination.args.js +24 -6
  6. package/dist/core/common/args/pagination.args.js.map +1 -1
  7. package/dist/core/common/decorators/restricted.decorator.d.ts +3 -0
  8. package/dist/core/common/decorators/restricted.decorator.js +16 -5
  9. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  10. package/dist/core/common/helpers/context.helper.js +15 -5
  11. package/dist/core/common/helpers/context.helper.js.map +1 -1
  12. package/dist/core/common/helpers/filter.helper.d.ts +3 -3
  13. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  14. package/dist/core/common/helpers/graphql.helper.d.ts +4 -4
  15. package/dist/core/common/helpers/input.helper.js +13 -7
  16. package/dist/core/common/helpers/input.helper.js.map +1 -1
  17. package/dist/core/common/helpers/service.helper.d.ts +11 -8
  18. package/dist/core/common/helpers/service.helper.js +50 -12
  19. package/dist/core/common/helpers/service.helper.js.map +1 -1
  20. package/dist/core/common/inputs/combined-filter.input.d.ts +8 -2
  21. package/dist/core/common/inputs/combined-filter.input.js +16 -5
  22. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  23. package/dist/core/common/inputs/core-input.input.d.ts +8 -0
  24. package/dist/core/common/inputs/core-input.input.js +15 -0
  25. package/dist/core/common/inputs/core-input.input.js.map +1 -0
  26. package/dist/core/common/inputs/filter.input.d.ts +7 -1
  27. package/dist/core/common/inputs/filter.input.js +14 -1
  28. package/dist/core/common/inputs/filter.input.js.map +1 -1
  29. package/dist/core/common/inputs/single-filter.input.d.ts +2 -1
  30. package/dist/core/common/inputs/single-filter.input.js +10 -1
  31. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  32. package/dist/core/common/inputs/sort.input.d.ts +2 -1
  33. package/dist/core/common/inputs/sort.input.js +7 -1
  34. package/dist/core/common/inputs/sort.input.js.map +1 -1
  35. package/dist/core/common/interceptors/check-response.interceptor.js +1 -1
  36. package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
  37. package/dist/core/common/interfaces/core-persistence-model.interface.d.ts +1 -0
  38. package/dist/core/common/interfaces/server-options.interface.d.ts +3 -15
  39. package/dist/core/common/models/core-model.model.d.ts +6 -0
  40. package/dist/core/common/models/core-model.model.js +14 -5
  41. package/dist/core/common/models/core-model.model.js.map +1 -1
  42. package/dist/core/common/models/core-persistence.model.d.ts +5 -29
  43. package/dist/core/common/models/core-persistence.model.js +19 -41
  44. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  45. package/dist/core/common/pipes/check-input.pipe.d.ts +2 -3
  46. package/dist/core/common/pipes/check-input.pipe.js +5 -20
  47. package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
  48. package/dist/core/common/pipes/map-and-validate.pipe.d.ts +4 -0
  49. package/dist/core/common/pipes/map-and-validate.pipe.js +40 -0
  50. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -0
  51. package/dist/core/common/types/plain-input.type.d.ts +3 -0
  52. package/dist/core/common/types/plain-input.type.js +3 -0
  53. package/dist/core/common/types/plain-input.type.js.map +1 -0
  54. package/dist/core/modules/auth/core-auth.model.d.ts +3 -1
  55. package/dist/core/modules/auth/core-auth.model.js +7 -1
  56. package/dist/core/modules/auth/core-auth.model.js.map +1 -1
  57. package/dist/core/modules/auth/core-auth.resolver.d.ts +1 -1
  58. package/dist/core/modules/user/core-user.model.d.ts +3 -0
  59. package/dist/core/modules/user/core-user.model.js +9 -4
  60. package/dist/core/modules/user/core-user.model.js.map +1 -1
  61. package/dist/core/modules/user/core-user.service.d.ts +9 -13
  62. package/dist/core/modules/user/core-user.service.js +38 -67
  63. package/dist/core/modules/user/core-user.service.js.map +1 -1
  64. package/dist/core/modules/user/inputs/core-user-create.input.js +4 -0
  65. package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
  66. package/dist/core/modules/user/inputs/core-user.input.d.ts +2 -1
  67. package/dist/core/modules/user/inputs/core-user.input.js +12 -2
  68. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  69. package/dist/core.module.js +4 -4
  70. package/dist/core.module.js.map +1 -1
  71. package/dist/index.d.ts +6 -2
  72. package/dist/index.js +6 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/server/common/models/persistence.model.d.ts +4 -2
  75. package/dist/server/common/models/persistence.model.js +6 -2
  76. package/dist/server/common/models/persistence.model.js.map +1 -1
  77. package/dist/server/modules/auth/auth.model.d.ts +1 -0
  78. package/dist/server/modules/auth/auth.model.js +4 -0
  79. package/dist/server/modules/auth/auth.model.js.map +1 -1
  80. package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
  81. package/dist/server/modules/user/inputs/user.input.js.map +1 -1
  82. package/dist/server/modules/user/user.model.d.ts +3 -2
  83. package/dist/server/modules/user/user.model.js +9 -5
  84. package/dist/server/modules/user/user.model.js.map +1 -1
  85. package/dist/server/modules/user/user.resolver.d.ts +2 -2
  86. package/dist/server/modules/user/user.resolver.js +10 -12
  87. package/dist/server/modules/user/user.resolver.js.map +1 -1
  88. package/dist/server/modules/user/user.service.d.ts +6 -6
  89. package/dist/server/modules/user/user.service.js +12 -4
  90. package/dist/server/modules/user/user.service.js.map +1 -1
  91. package/dist/tsconfig.build.tsbuildinfo +1 -1
  92. package/package.json +26 -26
  93. package/src/core/common/args/filter.args.ts +22 -1
  94. package/src/core/common/args/pagination.args.ts +42 -7
  95. package/src/core/common/decorators/restricted.decorator.ts +24 -5
  96. package/src/core/common/helpers/context.helper.ts +14 -3
  97. package/src/core/common/helpers/filter.helper.ts +3 -3
  98. package/src/core/common/helpers/input.helper.ts +17 -11
  99. package/src/core/common/helpers/service.helper.ts +96 -31
  100. package/src/core/common/inputs/combined-filter.input.ts +30 -9
  101. package/src/core/common/inputs/core-input.input.ts +36 -0
  102. package/src/core/common/inputs/filter.input.ts +27 -3
  103. package/src/core/common/inputs/single-filter.input.ts +7 -6
  104. package/src/core/common/inputs/sort.input.ts +4 -3
  105. package/src/core/common/interceptors/check-response.interceptor.ts +2 -2
  106. package/src/core/common/interfaces/core-persistence-model.interface.ts +1 -0
  107. package/src/core/common/interfaces/server-options.interface.ts +3 -33
  108. package/src/core/common/models/core-model.model.ts +42 -3
  109. package/src/core/common/models/core-persistence.model.ts +33 -120
  110. package/src/core/common/pipes/check-input.pipe.ts +13 -33
  111. package/src/core/common/pipes/map-and-validate.pipe.ts +32 -0
  112. package/src/core/common/types/plain-input.type.ts +6 -0
  113. package/src/core/modules/auth/core-auth.model.ts +15 -1
  114. package/src/core/modules/auth/core-auth.resolver.ts +1 -1
  115. package/src/core/modules/user/core-user.model.ts +16 -4
  116. package/src/core/modules/user/core-user.service.ts +59 -115
  117. package/src/core/modules/user/inputs/core-user-create.input.ts +5 -1
  118. package/src/core/modules/user/inputs/core-user.input.ts +13 -8
  119. package/src/core.module.ts +13 -6
  120. package/src/index.ts +6 -2
  121. package/src/server/common/models/persistence.model.ts +16 -2
  122. package/src/server/modules/auth/auth.model.ts +13 -0
  123. package/src/server/modules/user/inputs/user-create.input.ts +4 -0
  124. package/src/server/modules/user/inputs/user.input.ts +4 -0
  125. package/src/server/modules/user/user.model.ts +18 -5
  126. package/src/server/modules/user/user.resolver.ts +15 -19
  127. package/src/server/modules/user/user.service.ts +22 -7
@@ -47,8 +47,8 @@ export class UserResolver {
47
47
  * Request new password for user with email
48
48
  */
49
49
  @Query((returns) => Boolean, { description: 'Request new password for user with email' })
50
- async requestPasswordResetMail(@Args('email') email: string) {
51
- return await this.usersService.requestPasswordResetMail(email);
50
+ async requestPasswordResetMail(@Args('email') email: string): Promise<boolean> {
51
+ return !!(await this.usersService.sendPasswordResetMail(email));
52
52
  }
53
53
 
54
54
  // ===========================================================================
@@ -58,28 +58,29 @@ export class UserResolver {
58
58
  * Verify user with email
59
59
  */
60
60
  @Mutation((returns) => Boolean, { description: 'Verify user with email' })
61
- async verifyUser(@Args('token') token: string) {
62
- return await this.usersService.verify(token);
61
+ async verifyUser(@Args('token') token: string): Promise<boolean> {
62
+ return !!(await this.usersService.verify(token));
63
63
  }
64
64
 
65
65
  /**
66
66
  * Set new password for user with token
67
67
  */
68
68
  @Mutation((returns) => Boolean, { description: 'Set new password for user with token' })
69
- async resetPassword(@Args('token') token: string, @Args('password') password: string) {
70
- return await this.usersService.resetPassword(token, password);
69
+ async resetPassword(@Args('token') token: string, @Args('password') password: string): Promise<boolean> {
70
+ return !!(await this.usersService.resetPassword(token, password));
71
71
  }
72
72
 
73
73
  /**
74
74
  * Create new user
75
75
  */
76
76
  @Mutation((returns) => User, { description: 'Create a new user' })
77
- async createUser(
78
- @Args('input') input: UserCreateInput,
79
- @GraphQLUser() user: User,
80
- @Info() info: GraphQLResolveInfo
81
- ): Promise<User> {
82
- return await this.usersService.create(input, user, info);
77
+ async createUser(@Args('input') input: UserCreateInput, @GraphQLUser() user: User): Promise<User> {
78
+ // Check input
79
+ // Hint: necessary as long as global CheckInputPipe can't access context for current user
80
+ // (see https://github.com/nestjs/graphql/issues/325)
81
+ input = await InputHelper.check(input, user, UserCreateInput);
82
+
83
+ return await this.usersService.create(input, user);
83
84
  }
84
85
 
85
86
  /**
@@ -87,19 +88,14 @@ export class UserResolver {
87
88
  */
88
89
  @Roles(RoleEnum.ADMIN, RoleEnum.OWNER)
89
90
  @Mutation((returns) => User, { description: 'Update existing user' })
90
- async updateUser(
91
- @Args('input') input: UserInput,
92
- @Args('id') id: string,
93
- @GraphQLUser() user: User,
94
- @Info() info: GraphQLResolveInfo
95
- ): Promise<User> {
91
+ async updateUser(@Args('input') input: UserInput, @Args('id') id: string, @GraphQLUser() user: User): Promise<User> {
96
92
  // Check input
97
93
  // Hint: necessary as long as global CheckInputPipe can't access context for current user
98
94
  // (see https://github.com/nestjs/graphql/issues/325)
99
95
  input = await InputHelper.check(input, user, UserInput);
100
96
 
101
97
  // Update user
102
- return await this.usersService.update(id, input, user, info);
98
+ return await this.usersService.update(id, input, user);
103
99
  }
104
100
 
105
101
  /**
@@ -1,6 +1,5 @@
1
1
  import { Inject, Injectable, UnauthorizedException, UnprocessableEntityException } from '@nestjs/common';
2
2
  import * as fs from 'fs';
3
- import { GraphQLResolveInfo } from 'graphql';
4
3
  import envConfig from '../../../config.env';
5
4
  import { FilterArgs } from '../../../core/common/args/filter.args';
6
5
  import { Filter } from '../../../core/common/helpers/filter.helper';
@@ -10,7 +9,7 @@ import { EmailService } from '../../../core/common/services/email.service';
10
9
  import { CoreUserService } from '../../../core/modules/user/core-user.service';
11
10
  import { UserCreateInput } from './inputs/user-create.input';
12
11
  import { UserInput } from './inputs/user.input';
13
- import { User } from './user.model';
12
+ import { User, UserDocument } from './user.model';
14
13
  import { InjectModel } from '@nestjs/mongoose';
15
14
  import { Model } from 'mongoose';
16
15
  import { ICorePersistenceModel } from '../../../core/common/interfaces/core-persistence-model.interface';
@@ -39,7 +38,7 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
39
38
  constructor(
40
39
  protected readonly configService: ConfigService,
41
40
  protected readonly emailService: EmailService,
42
- @InjectModel('User') protected readonly userModel: Model<User>,
41
+ @InjectModel('User') protected readonly userModel: Model<UserDocument>,
43
42
  @Inject('PUB_SUB') protected readonly pubSub: PubSub
44
43
  ) {
45
44
  super(userModel, emailService);
@@ -53,10 +52,10 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
53
52
  /**
54
53
  * Create new user and send welcome email
55
54
  */
56
- async create(input: UserCreateInput, currentUser?: User, ...args: any[]): Promise<User> {
55
+ async create(input: UserCreateInput, currentUser?: User): Promise<User> {
57
56
  const user = await super.create(input, currentUser);
58
57
 
59
- await this.prepareOutput(user, args[0]);
58
+ await this.prepareOutput(user);
60
59
 
61
60
  await this.pubSub.publish('userCreated', User.map(user));
62
61
 
@@ -77,6 +76,22 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
77
76
  return this.userModel.find(filterQuery[0], null, filterQuery[1]).exec();
78
77
  }
79
78
 
79
+ /**
80
+ * Request password reset mail
81
+ *
82
+ * @param email
83
+ */
84
+ async sendPasswordResetMail(email: string): Promise<User> {
85
+ const user = await super.setPasswordResetTokenForEmail(email);
86
+
87
+ await this.emailService.sendMail(user.email, 'Password reset', {
88
+ htmlTemplate: 'password-reset',
89
+ templateData: { name: user.username, link: envConfig.email.passwordResetLink + '/' + user.passwordResetToken },
90
+ });
91
+
92
+ return user;
93
+ }
94
+
80
95
  /**
81
96
  * Set avatar image
82
97
  */
@@ -124,7 +139,7 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
124
139
  /**
125
140
  * Prepare output before return
126
141
  */
127
- protected async prepareOutput(user: User, info?: GraphQLResolveInfo) {
128
- return ServiceHelper.prepareOutput(user, User, this);
142
+ protected async prepareOutput(user: User): Promise<User> {
143
+ return ServiceHelper.prepareOutput(user);
129
144
  }
130
145
  }