@lenne.tech/nest-server 10.8.9 → 10.8.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.
Files changed (212) hide show
  1. package/dist/core/common/args/filter.args.js +2 -2
  2. package/dist/core/common/args/filter.args.js.map +1 -1
  3. package/dist/core/common/args/pagination.args.js +5 -5
  4. package/dist/core/common/args/pagination.args.js.map +1 -1
  5. package/dist/core/common/helpers/config.helper.d.ts +1 -1
  6. package/dist/core/common/helpers/config.helper.js +8 -8
  7. package/dist/core/common/helpers/config.helper.js.map +1 -1
  8. package/dist/core/common/helpers/db.helper.d.ts +11 -11
  9. package/dist/core/common/helpers/db.helper.js +100 -100
  10. package/dist/core/common/helpers/db.helper.js.map +1 -1
  11. package/dist/core/common/helpers/file.helper.d.ts +1 -1
  12. package/dist/core/common/helpers/file.helper.js +10 -10
  13. package/dist/core/common/helpers/file.helper.js.map +1 -1
  14. package/dist/core/common/helpers/filter.helper.d.ts +12 -12
  15. package/dist/core/common/helpers/filter.helper.js +19 -19
  16. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  17. package/dist/core/common/helpers/graphql.helper.d.ts +8 -8
  18. package/dist/core/common/helpers/graphql.helper.js +75 -75
  19. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  20. package/dist/core/common/helpers/input.helper.d.ts +7 -7
  21. package/dist/core/common/helpers/input.helper.js +60 -60
  22. package/dist/core/common/helpers/input.helper.js.map +1 -1
  23. package/dist/core/common/helpers/model.helper.d.ts +8 -8
  24. package/dist/core/common/helpers/model.helper.js +38 -38
  25. package/dist/core/common/helpers/model.helper.js.map +1 -1
  26. package/dist/core/common/helpers/service.helper.d.ts +2 -2
  27. package/dist/core/common/helpers/table.helper.d.ts +1 -1
  28. package/dist/core/common/inputs/combined-filter.input.js +6 -6
  29. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  30. package/dist/core/common/inputs/filter.input.js +6 -6
  31. package/dist/core/common/inputs/filter.input.js.map +1 -1
  32. package/dist/core/common/inputs/single-filter.input.js +10 -10
  33. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  34. package/dist/core/common/inputs/sort.input.js +4 -4
  35. package/dist/core/common/inputs/sort.input.js.map +1 -1
  36. package/dist/core/common/interfaces/server-options.interface.d.ts +8 -8
  37. package/dist/core/common/models/core-persistence.model.js +8 -8
  38. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  39. package/dist/core/common/plugins/mongoose-id.plugin.d.ts +1 -1
  40. package/dist/core/common/plugins/mongoose-id.plugin.js +2 -2
  41. package/dist/core/common/plugins/mongoose-id.plugin.js.map +1 -1
  42. package/dist/core/common/scalars/any.scalar.js +8 -8
  43. package/dist/core/common/scalars/any.scalar.js.map +1 -1
  44. package/dist/core/common/scalars/date-timestamp.scalar.js +1 -1
  45. package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
  46. package/dist/core/common/scalars/date.scalar.js +1 -1
  47. package/dist/core/common/scalars/date.scalar.js.map +1 -1
  48. package/dist/core/common/scalars/json.scalar.js +8 -8
  49. package/dist/core/common/scalars/json.scalar.js.map +1 -1
  50. package/dist/core/common/services/config.service.d.ts +26 -26
  51. package/dist/core/common/services/crud.service.d.ts +32 -32
  52. package/dist/core/common/services/mailjet.service.js +1 -1
  53. package/dist/core/common/services/mailjet.service.js.map +1 -1
  54. package/dist/core/common/services/module.service.d.ts +1 -1
  55. package/dist/core/common/services/module.service.js.map +1 -1
  56. package/dist/core/common/types/falsy.type.d.ts +1 -1
  57. package/dist/core/common/types/id.type.d.ts +4 -4
  58. package/dist/core/common/types/require-only-one.type.d.ts +2 -2
  59. package/dist/core/common/types/required-at-least-one.type.d.ts +2 -2
  60. package/dist/core/common/types/string-or-object-id.type.d.ts +1 -1
  61. package/dist/core/modules/auth/core-auth.controller.js +6 -6
  62. package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
  63. package/dist/core/modules/auth/core-auth.model.js +2 -2
  64. package/dist/core/modules/auth/core-auth.model.js.map +1 -1
  65. package/dist/core/modules/auth/core-auth.module.d.ts +4 -4
  66. package/dist/core/modules/auth/core-auth.module.js +2 -2
  67. package/dist/core/modules/auth/core-auth.module.js.map +1 -1
  68. package/dist/core/modules/auth/core-auth.resolver.js +6 -6
  69. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  70. package/dist/core/modules/auth/guards/auth.guard.d.ts +2 -2
  71. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js +2 -2
  72. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js.map +1 -1
  73. package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js +2 -2
  74. package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js.map +1 -1
  75. package/dist/core/modules/auth/services/core-auth.service.d.ts +2 -2
  76. package/dist/core/modules/file/core-file-info.model.js +8 -8
  77. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  78. package/dist/core/modules/file/core-file.controller.js +2 -2
  79. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  80. package/dist/core/modules/file/core-file.resolver.js +6 -6
  81. package/dist/core/modules/file/core-file.resolver.js.map +1 -1
  82. package/dist/core/modules/file/core-file.service.d.ts +6 -6
  83. package/dist/core/modules/health-check/core-health-check-result.model.js +9 -9
  84. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -1
  85. package/dist/core/modules/health-check/core-health-check.controller.js +2 -2
  86. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -1
  87. package/dist/core/modules/health-check/core-health-check.resolver.js +2 -2
  88. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -1
  89. package/dist/core/modules/user/core-user.model.js +11 -11
  90. package/dist/core/modules/user/core-user.model.js.map +1 -1
  91. package/dist/core/modules/user/core-user.service.d.ts +2 -2
  92. package/dist/core/modules/user/inputs/core-user-create.input.js +3 -3
  93. package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
  94. package/dist/core/modules/user/inputs/core-user.input.js +10 -10
  95. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  96. package/dist/index.d.ts +8 -8
  97. package/dist/index.js +8 -8
  98. package/dist/index.js.map +1 -1
  99. package/dist/server/common/models/persistence.model.d.ts +2 -2
  100. package/dist/server/common/models/persistence.model.js +6 -6
  101. package/dist/server/common/models/persistence.model.js.map +1 -1
  102. package/dist/server/modules/auth/auth.controller.js +1 -1
  103. package/dist/server/modules/auth/auth.controller.js.map +1 -1
  104. package/dist/server/modules/auth/auth.model.js +3 -3
  105. package/dist/server/modules/auth/auth.model.js.map +1 -1
  106. package/dist/server/modules/auth/auth.resolver.js +3 -3
  107. package/dist/server/modules/auth/auth.resolver.js.map +1 -1
  108. package/dist/server/modules/auth/inputs/auth-sign-in.input.js +2 -2
  109. package/dist/server/modules/auth/inputs/auth-sign-in.input.js.map +1 -1
  110. package/dist/server/modules/auth/inputs/auth-sign-up.input.js +4 -4
  111. package/dist/server/modules/auth/inputs/auth-sign-up.input.js.map +1 -1
  112. package/dist/server/modules/file/file-info.model.js +2 -2
  113. package/dist/server/modules/file/file-info.model.js.map +1 -1
  114. package/dist/server/modules/file/file.controller.js +5 -5
  115. package/dist/server/modules/file/file.controller.js.map +1 -1
  116. package/dist/server/modules/file/file.resolver.js +5 -5
  117. package/dist/server/modules/file/file.resolver.js.map +1 -1
  118. package/dist/server/modules/user/avatar.controller.js +2 -2
  119. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  120. package/dist/server/modules/user/inputs/user-create.input.js +2 -2
  121. package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
  122. package/dist/server/modules/user/inputs/user.input.js +2 -2
  123. package/dist/server/modules/user/inputs/user.input.js.map +1 -1
  124. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js +4 -4
  125. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js.map +1 -1
  126. package/dist/server/modules/user/user.model.js +8 -8
  127. package/dist/server/modules/user/user.model.js.map +1 -1
  128. package/dist/server/modules/user/user.resolver.d.ts +1 -1
  129. package/dist/server/modules/user/user.resolver.js +11 -11
  130. package/dist/server/modules/user/user.resolver.js.map +1 -1
  131. package/dist/server/modules/user/user.service.d.ts +1 -1
  132. package/dist/server/server.controller.js +2 -2
  133. package/dist/server/server.controller.js.map +1 -1
  134. package/dist/test/test.helper.d.ts +14 -14
  135. package/dist/test/test.helper.js +13 -3
  136. package/dist/test/test.helper.js.map +1 -1
  137. package/dist/tsconfig.build.tsbuildinfo +1 -1
  138. package/package.json +22 -19
  139. package/src/core/common/args/filter.args.ts +2 -2
  140. package/src/core/common/args/pagination.args.ts +5 -5
  141. package/src/core/common/decorators/graphql-service-options.decorator.ts +1 -1
  142. package/src/core/common/decorators/graphql-user.decorator.ts +1 -1
  143. package/src/core/common/decorators/rest-user.decorator.ts +1 -1
  144. package/src/core/common/helpers/config.helper.ts +22 -21
  145. package/src/core/common/helpers/db.helper.ts +164 -164
  146. package/src/core/common/helpers/file.helper.ts +18 -18
  147. package/src/core/common/helpers/filter.helper.ts +35 -35
  148. package/src/core/common/helpers/graphql.helper.ts +100 -100
  149. package/src/core/common/helpers/input.helper.ts +89 -89
  150. package/src/core/common/helpers/model.helper.ts +70 -70
  151. package/src/core/common/helpers/service.helper.ts +3 -3
  152. package/src/core/common/helpers/table.helper.ts +1 -1
  153. package/src/core/common/inputs/combined-filter.input.ts +5 -5
  154. package/src/core/common/inputs/filter.input.ts +5 -5
  155. package/src/core/common/inputs/single-filter.input.ts +9 -9
  156. package/src/core/common/inputs/sort.input.ts +3 -3
  157. package/src/core/common/interfaces/server-options.interface.ts +9 -9
  158. package/src/core/common/models/core-persistence.model.ts +8 -8
  159. package/src/core/common/plugins/mongoose-id.plugin.js +2 -2
  160. package/src/core/common/scalars/any.scalar.ts +8 -8
  161. package/src/core/common/scalars/date-timestamp.scalar.ts +1 -1
  162. package/src/core/common/scalars/date.scalar.ts +1 -1
  163. package/src/core/common/scalars/json.scalar.ts +8 -8
  164. package/src/core/common/services/config.service.ts +7 -7
  165. package/src/core/common/services/crud.service.ts +19 -19
  166. package/src/core/common/services/mailjet.service.ts +1 -1
  167. package/src/core/common/services/module.service.ts +4 -4
  168. package/src/core/common/types/falsy.type.ts +1 -1
  169. package/src/core/common/types/id.type.ts +1 -1
  170. package/src/core/common/types/require-only-one.type.ts +3 -3
  171. package/src/core/common/types/required-at-least-one.type.ts +3 -3
  172. package/src/core/common/types/string-or-object-id.type.ts +1 -1
  173. package/src/core/modules/auth/core-auth.controller.ts +6 -6
  174. package/src/core/modules/auth/core-auth.model.ts +1 -1
  175. package/src/core/modules/auth/core-auth.module.ts +4 -4
  176. package/src/core/modules/auth/core-auth.resolver.ts +6 -6
  177. package/src/core/modules/auth/guards/auth.guard.ts +3 -3
  178. package/src/core/modules/auth/inputs/core-auth-sign-in.input.ts +1 -1
  179. package/src/core/modules/auth/inputs/core-auth-sign-up.input.ts +1 -1
  180. package/src/core/modules/auth/services/core-auth.service.ts +1 -1
  181. package/src/core/modules/auth/tokens.decorator.ts +2 -2
  182. package/src/core/modules/file/core-file-info.model.ts +7 -7
  183. package/src/core/modules/file/core-file.controller.ts +2 -2
  184. package/src/core/modules/file/core-file.resolver.ts +6 -6
  185. package/src/core/modules/file/core-file.service.ts +6 -6
  186. package/src/core/modules/health-check/core-health-check-result.model.ts +8 -8
  187. package/src/core/modules/health-check/core-health-check.controller.ts +2 -2
  188. package/src/core/modules/health-check/core-health-check.resolver.ts +2 -2
  189. package/src/core/modules/user/core-user.model.ts +11 -11
  190. package/src/core/modules/user/core-user.service.ts +2 -2
  191. package/src/core/modules/user/inputs/core-user-create.input.ts +2 -2
  192. package/src/core/modules/user/inputs/core-user.input.ts +9 -9
  193. package/src/index.ts +9 -9
  194. package/src/server/common/models/persistence.model.ts +8 -8
  195. package/src/server/modules/auth/auth.controller.ts +1 -1
  196. package/src/server/modules/auth/auth.model.ts +2 -2
  197. package/src/server/modules/auth/auth.resolver.ts +3 -3
  198. package/src/server/modules/auth/inputs/auth-sign-in.input.ts +1 -1
  199. package/src/server/modules/auth/inputs/auth-sign-up.input.ts +3 -3
  200. package/src/server/modules/file/file-info.model.ts +2 -2
  201. package/src/server/modules/file/file.controller.ts +5 -5
  202. package/src/server/modules/file/file.module.ts +1 -1
  203. package/src/server/modules/file/file.resolver.ts +5 -5
  204. package/src/server/modules/user/avatar.controller.ts +2 -2
  205. package/src/server/modules/user/inputs/user-create.input.ts +1 -1
  206. package/src/server/modules/user/inputs/user.input.ts +1 -1
  207. package/src/server/modules/user/outputs/find-and-count-users-result.output.ts +3 -3
  208. package/src/server/modules/user/user.model.ts +8 -8
  209. package/src/server/modules/user/user.resolver.ts +11 -11
  210. package/src/server/modules/user/user.service.ts +1 -1
  211. package/src/server/server.controller.ts +2 -2
  212. package/src/test/test.helper.ts +31 -17
@@ -4,14 +4,14 @@ import { Restricted } from '../../../../core/common/decorators/restricted.decora
4
4
  import { RoleEnum } from '../../../../core/common/enums/role.enum';
5
5
  import { User } from '../user.model';
6
6
 
7
- @Restricted(RoleEnum.ADMIN)
8
7
  @ObjectType({ description: 'Result of find and count' })
8
+ @Restricted(RoleEnum.ADMIN)
9
9
  export class FindAndCountUsersResult {
10
- @Restricted(RoleEnum.S_EVERYONE)
11
10
  @Field(() => [User], { description: 'Found users' })
11
+ @Restricted(RoleEnum.S_EVERYONE)
12
12
  items: User[];
13
13
 
14
- @Restricted(RoleEnum.S_EVERYONE)
15
14
  @Field({ description: 'Total count (skip/offset and limit/take are ignored in the count)' })
15
+ @Restricted(RoleEnum.S_EVERYONE)
16
16
  totalCount: number;
17
17
  }
@@ -13,9 +13,9 @@ export type UserDocument = Document & User;
13
13
  /**
14
14
  * User model
15
15
  */
16
- @Restricted(RoleEnum.ADMIN)
17
- @ObjectType({ description: 'User' })
18
16
  @MongooseSchema({ timestamps: true })
17
+ @ObjectType({ description: 'User' })
18
+ @Restricted(RoleEnum.ADMIN)
19
19
  export class User extends CoreUserModel implements PersistenceModel {
20
20
  // ===================================================================================================================
21
21
  // Properties
@@ -24,9 +24,9 @@ export class User extends CoreUserModel implements PersistenceModel {
24
24
  /**
25
25
  * URL to avatar file of the user
26
26
  */
27
- @Restricted(RoleEnum.S_EVERYONE)
28
27
  @Field({ description: 'URL to avatar file of the user', nullable: true })
29
28
  @Prop()
29
+ @Restricted(RoleEnum.S_EVERYONE)
30
30
  avatar: string = undefined;
31
31
 
32
32
  /**
@@ -34,30 +34,30 @@ export class User extends CoreUserModel implements PersistenceModel {
34
34
  *
35
35
  * Not set when created by system
36
36
  */
37
- @Restricted(RoleEnum.S_EVERYONE)
38
37
  @Field(() => String, {
39
38
  description: 'ID of the user who created the object',
40
39
  nullable: true,
41
40
  })
42
41
  @Prop({ ref: 'User', type: Schema.Types.ObjectId })
42
+ @Restricted(RoleEnum.S_EVERYONE)
43
43
  createdBy: string = undefined;
44
44
 
45
45
  /**
46
46
  * E-Mail address of the user
47
47
  */
48
- @Restricted(RoleEnum.S_EVERYONE)
49
48
  @Field({ description: 'Email of the user', nullable: true })
50
49
  @IsEmail()
51
50
  @Prop({ lowercase: true, trim: true, unique: true })
51
+ @Restricted(RoleEnum.S_EVERYONE)
52
52
  override email: string = undefined;
53
53
 
54
54
  /**
55
55
  * Roles of the user
56
56
  */
57
- @Restricted(RoleEnum.S_EVERYONE)
58
- @Field(type => [String], { description: 'Roles of the user', nullable: true })
57
+ @Field(() => [String], { description: 'Roles of the user', nullable: true })
59
58
  @IsOptional()
60
59
  @Prop([String])
60
+ @Restricted(RoleEnum.S_EVERYONE)
61
61
  override roles: string[] = undefined;
62
62
 
63
63
  /**
@@ -65,12 +65,12 @@ export class User extends CoreUserModel implements PersistenceModel {
65
65
  *
66
66
  * Not set when updated by system
67
67
  */
68
- @Restricted(RoleEnum.S_USER)
69
68
  @Field(() => String, {
70
69
  description: 'ID of the user who last updated the object',
71
70
  nullable: true,
72
71
  })
73
72
  @Prop({ ref: 'User', type: Schema.Types.ObjectId })
73
+ @Restricted(RoleEnum.S_USER)
74
74
  updatedBy: string = undefined;
75
75
 
76
76
  // ===================================================================================================================
@@ -7,8 +7,8 @@ import { GraphQLServiceOptions } from '../../../core/common/decorators/graphql-s
7
7
  import { Roles } from '../../../core/common/decorators/roles.decorator';
8
8
  import { RoleEnum } from '../../../core/common/enums/role.enum';
9
9
  import { ServiceOptions } from '../../../core/common/interfaces/service-options.interface';
10
- import { UserInput } from './inputs/user.input';
11
10
  import { UserCreateInput } from './inputs/user-create.input';
11
+ import { UserInput } from './inputs/user.input';
12
12
  import { FindAndCountUsersResult } from './outputs/find-and-count-users-result.output';
13
13
  import { User } from './user.model';
14
14
  import { UserService } from './user.service';
@@ -34,8 +34,8 @@ export class UserResolver {
34
34
  /**
35
35
  * Get users (via filter)
36
36
  */
37
- @Roles(RoleEnum.ADMIN)
38
37
  @Query(() => [User], { description: 'Find users (via filter)' })
38
+ @Roles(RoleEnum.ADMIN)
39
39
  async findUsers(@GraphQLServiceOptions() serviceOptions: ServiceOptions, @Args() args?: FilterArgs) {
40
40
  return await this.userService.find(args, {
41
41
  ...serviceOptions,
@@ -46,8 +46,8 @@ export class UserResolver {
46
46
  /**
47
47
  * Get users and total count (via filter)
48
48
  */
49
- @Roles(RoleEnum.ADMIN)
50
49
  @Query(() => FindAndCountUsersResult, { description: 'Find users (via filter)' })
50
+ @Roles(RoleEnum.ADMIN)
51
51
  async findAndCountUsers(
52
52
  @GraphQLServiceOptions({ gqlPath: 'findAndCountUsers.items' }) serviceOptions: ServiceOptions,
53
53
  @Args() args?: FilterArgs,
@@ -61,8 +61,8 @@ export class UserResolver {
61
61
  /**
62
62
  * Get user via ID
63
63
  */
64
- @Roles(RoleEnum.S_USER)
65
64
  @Query(() => User, { description: 'Get user with specified ID' })
65
+ @Roles(RoleEnum.S_USER)
66
66
  async getUser(@GraphQLServiceOptions() serviceOptions: ServiceOptions, @Args('id') id: string): Promise<User> {
67
67
  return await this.userService.get(id, {
68
68
  ...serviceOptions,
@@ -73,8 +73,8 @@ export class UserResolver {
73
73
  /**
74
74
  * Get verified state of user with token
75
75
  */
76
- @Roles(RoleEnum.S_EVERYONE)
77
76
  @Query(() => Boolean, { description: 'Get verified state of user with token' })
77
+ @Roles(RoleEnum.S_EVERYONE)
78
78
  async getVerifiedState(@Args('token') token: string) {
79
79
  return await this.userService.getVerifiedState(token);
80
80
  }
@@ -86,8 +86,8 @@ export class UserResolver {
86
86
  /**
87
87
  * Create new user
88
88
  */
89
- @Roles(RoleEnum.ADMIN)
90
89
  @Mutation(() => User, { description: 'Create a new user' })
90
+ @Roles(RoleEnum.ADMIN)
91
91
  async createUser(
92
92
  @GraphQLServiceOptions() serviceOptions: ServiceOptions,
93
93
  @Args('input') input: UserCreateInput,
@@ -101,8 +101,8 @@ export class UserResolver {
101
101
  /**
102
102
  * Delete existing user
103
103
  */
104
- @Roles(RoleEnum.S_USER)
105
104
  @Mutation(() => User, { description: 'Delete existing user' })
105
+ @Roles(RoleEnum.S_USER)
106
106
  async deleteUser(@GraphQLServiceOptions() serviceOptions: ServiceOptions, @Args('id') id: string): Promise<User> {
107
107
  return await this.userService.delete(id, {
108
108
  ...serviceOptions,
@@ -113,8 +113,8 @@ export class UserResolver {
113
113
  /**
114
114
  * Set new password for user with token
115
115
  */
116
- @Roles(RoleEnum.S_EVERYONE)
117
116
  @Mutation(() => Boolean, { description: 'Set new password for user with token' })
117
+ @Roles(RoleEnum.S_EVERYONE)
118
118
  async resetPassword(@Args('token') token: string, @Args('password') password: string): Promise<boolean> {
119
119
  return !!(await this.userService.resetPassword(token, password));
120
120
  }
@@ -122,8 +122,8 @@ export class UserResolver {
122
122
  /**
123
123
  * Request new password for user with email
124
124
  */
125
- @Roles(RoleEnum.S_EVERYONE)
126
125
  @Mutation(() => Boolean, { description: 'Request new password for user with email' })
126
+ @Roles(RoleEnum.S_EVERYONE)
127
127
  async requestPasswordResetMail(@Args('email') email: string): Promise<boolean> {
128
128
  return !!(await this.userService.sendPasswordResetMail(email));
129
129
  }
@@ -131,8 +131,8 @@ export class UserResolver {
131
131
  /**
132
132
  * Update existing user
133
133
  */
134
- @Roles(RoleEnum.S_USER)
135
134
  @Mutation(() => User, { description: 'Update existing user' })
135
+ @Roles(RoleEnum.S_USER)
136
136
  async updateUser(
137
137
  @GraphQLServiceOptions() serviceOptions: ServiceOptions,
138
138
  @Args('input') input: UserInput,
@@ -149,8 +149,8 @@ export class UserResolver {
149
149
  /**
150
150
  * Verify user with email
151
151
  */
152
- @Roles(RoleEnum.S_EVERYONE)
153
152
  @Mutation(() => Boolean, { description: 'Verify user with email' })
153
+ @Roles(RoleEnum.S_EVERYONE)
154
154
  async verifyUser(@Args('token') token: string): Promise<boolean> {
155
155
  return !!(await this.userService.verify(token));
156
156
  }
@@ -8,8 +8,8 @@ import { ConfigService } from '../../../core/common/services/config.service';
8
8
  import { EmailService } from '../../../core/common/services/email.service';
9
9
  import { CoreModelConstructor } from '../../../core/common/types/core-model-constructor.type';
10
10
  import { CoreUserService } from '../../../core/modules/user/core-user.service';
11
- import { UserInput } from './inputs/user.input';
12
11
  import { UserCreateInput } from './inputs/user-create.input';
12
+ import { UserInput } from './inputs/user.input';
13
13
  import { User, UserDocument } from './user.model';
14
14
 
15
15
  import fs = require('fs');
@@ -2,14 +2,14 @@ import { Controller, Get, Render } from '@nestjs/common';
2
2
 
3
3
  import { ConfigService, RoleEnum, Roles } from '..';
4
4
 
5
- @Roles(RoleEnum.ADMIN)
6
5
  @Controller()
6
+ @Roles(RoleEnum.ADMIN)
7
7
  export class ServerController {
8
8
  constructor(protected configService: ConfigService) {}
9
9
 
10
- @Roles(RoleEnum.S_EVERYONE)
11
10
  @Get()
12
11
  @Render('index')
12
+ @Roles(RoleEnum.S_EVERYONE)
13
13
  root() {
14
14
  return {
15
15
  env: this.configService.getFastButReadOnly('env'),
@@ -23,13 +23,18 @@ export enum TestGraphQLType {
23
23
  * GraphQL fields
24
24
  */
25
25
  export interface TestFieldObject {
26
- [key: string]: (TestFieldObject | string)[] | TestFieldObject | boolean;
26
+ [key: string]: (string | TestFieldObject)[] | boolean | TestFieldObject;
27
27
  }
28
28
 
29
29
  /**
30
30
  * GraphQL fields
31
31
  */
32
- export type TestFields = TestFieldObject | string | string[];
32
+ export type TestFields = string | string[] | TestFieldObject;
33
+
34
+ export interface TestGraphQLAttachment {
35
+ file: Blob | boolean | Buffer | number | ReadableStream | string;
36
+ options?: string | { contentType?: string | undefined; filename?: string | undefined };
37
+ }
33
38
 
34
39
  /**
35
40
  * GraphQL request config
@@ -64,16 +69,6 @@ export interface TestGraphQLConfig {
64
69
  variables?: Record<string, string>;
65
70
  }
66
71
 
67
- export interface TestGraphQLAttachment {
68
- file: Blob | Buffer | ReadableStream | boolean | number | string;
69
- options?: { contentType?: string | undefined; filename?: string | undefined } | string;
70
- }
71
-
72
- export interface TestGraphQLVariable {
73
- type: 'attachment' | 'field';
74
- value: TestGraphQLAttachment | TestGraphQLAttachment[] | any | string | string[];
75
- }
76
-
77
72
  /**
78
73
  * Options for graphql requests
79
74
  */
@@ -120,6 +115,11 @@ export interface TestGraphQLOptions {
120
115
  variables?: Record<string, TestGraphQLVariable>;
121
116
  }
122
117
 
118
+ export interface TestGraphQLVariable {
119
+ type: 'attachment' | 'field';
120
+ value: any | string | string[] | TestGraphQLAttachment | TestGraphQLAttachment[];
121
+ }
122
+
123
123
  /**
124
124
  * Options for rest requests
125
125
  */
@@ -178,7 +178,7 @@ export class TestHelper {
178
178
  });
179
179
  })
180
180
  .end((err, res: any) => {
181
- (res as { data: string } & any).data = Buffer.from(data, 'binary').toString();
181
+ (res as any & { data: string }).data = Buffer.from(data, 'binary').toString();
182
182
  err ? reject(err) : resolve(res as any);
183
183
  });
184
184
  });
@@ -221,7 +221,7 @@ export class TestHelper {
221
221
  /**
222
222
  * GraphQL request
223
223
  */
224
- async graphQl(graphql: TestGraphQLConfig | string, options: TestGraphQLOptions = {}): Promise<any> {
224
+ async graphQl(graphql: string | TestGraphQLConfig, options: TestGraphQLOptions = {}): Promise<any> {
225
225
  // Default options
226
226
  const config = {
227
227
  convertEnums: true,
@@ -303,12 +303,26 @@ export class TestHelper {
303
303
  if (config.convertEnums) {
304
304
  if (Array.isArray(config.convertEnums)) {
305
305
  for (const key of Object.values(config.convertEnums)) {
306
- const regExpStr = `(${key}: )\\"([_A-Z][_0-9A-Z]*)\\"`;
306
+ const regExpStr = `(?<=${key}:\\s*)"([A-Z0-9_]+)"(?=\\s*[,\\]}])`;
307
307
  const regExp = new RegExp(regExpStr, 'g');
308
- query = query.replace(regExp, '$1$2');
308
+ query = query.replace(regExp, (match, group1) => {
309
+ // If group1 consists exclusively of digits, return original string
310
+ if (/^\d+$/.test(group1)) {
311
+ return match;
312
+ }
313
+ // Otherwise remove quotation marks
314
+ return group1;
315
+ });
309
316
  }
310
317
  } else {
311
- query = query.replace(/([_A-Za-z][_0-9A-Za-z]*:\s)\"([_A-Z][_0-9A-Z]*)\"/g, '$1$2');
318
+ query = query.replace(/(?<=[:\[,]\s*)"([A-Z0-9_]+)"(?=\s*[,\]\}])/g, (match, group1) => {
319
+ // If group1 only contains digits, the original string is returned
320
+ if (/^\d+$/.test(group1)) {
321
+ return match;
322
+ }
323
+ // Otherwise the quotation marks are removed
324
+ return group1;
325
+ });
312
326
  }
313
327
  }
314
328