@lenne.tech/nest-server 10.8.10 → 11.0.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.
Files changed (217) 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/guards/auth.guard.js.map +1 -1
  72. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js +2 -2
  73. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js.map +1 -1
  74. package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js +2 -2
  75. package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js.map +1 -1
  76. package/dist/core/modules/auth/services/core-auth.service.d.ts +2 -2
  77. package/dist/core/modules/auth/services/core-auth.service.js +3 -0
  78. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  79. package/dist/core/modules/auth/strategies/jwt-refresh.strategy.d.ts +1 -1
  80. package/dist/core/modules/auth/strategies/jwt.strategy.d.ts +1 -1
  81. package/dist/core/modules/file/core-file-info.model.js +8 -8
  82. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  83. package/dist/core/modules/file/core-file.controller.js +2 -2
  84. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  85. package/dist/core/modules/file/core-file.resolver.js +6 -6
  86. package/dist/core/modules/file/core-file.resolver.js.map +1 -1
  87. package/dist/core/modules/file/core-file.service.d.ts +6 -6
  88. package/dist/core/modules/health-check/core-health-check-result.model.js +9 -9
  89. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -1
  90. package/dist/core/modules/health-check/core-health-check.controller.js +2 -2
  91. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -1
  92. package/dist/core/modules/health-check/core-health-check.resolver.js +2 -2
  93. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -1
  94. package/dist/core/modules/user/core-user.model.js +11 -11
  95. package/dist/core/modules/user/core-user.model.js.map +1 -1
  96. package/dist/core/modules/user/core-user.service.d.ts +2 -2
  97. package/dist/core/modules/user/inputs/core-user-create.input.js +3 -3
  98. package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
  99. package/dist/core/modules/user/inputs/core-user.input.js +10 -10
  100. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  101. package/dist/index.d.ts +8 -8
  102. package/dist/index.js +8 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/server/common/models/persistence.model.d.ts +2 -2
  105. package/dist/server/common/models/persistence.model.js +6 -6
  106. package/dist/server/common/models/persistence.model.js.map +1 -1
  107. package/dist/server/modules/auth/auth.controller.js +1 -1
  108. package/dist/server/modules/auth/auth.controller.js.map +1 -1
  109. package/dist/server/modules/auth/auth.model.js +3 -3
  110. package/dist/server/modules/auth/auth.model.js.map +1 -1
  111. package/dist/server/modules/auth/auth.resolver.js +3 -3
  112. package/dist/server/modules/auth/auth.resolver.js.map +1 -1
  113. package/dist/server/modules/auth/inputs/auth-sign-in.input.js +2 -2
  114. package/dist/server/modules/auth/inputs/auth-sign-in.input.js.map +1 -1
  115. package/dist/server/modules/auth/inputs/auth-sign-up.input.js +4 -4
  116. package/dist/server/modules/auth/inputs/auth-sign-up.input.js.map +1 -1
  117. package/dist/server/modules/file/file-info.model.js +2 -2
  118. package/dist/server/modules/file/file-info.model.js.map +1 -1
  119. package/dist/server/modules/file/file.controller.js +5 -5
  120. package/dist/server/modules/file/file.controller.js.map +1 -1
  121. package/dist/server/modules/file/file.resolver.js +5 -5
  122. package/dist/server/modules/file/file.resolver.js.map +1 -1
  123. package/dist/server/modules/user/avatar.controller.js +2 -2
  124. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  125. package/dist/server/modules/user/inputs/user-create.input.js +2 -2
  126. package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
  127. package/dist/server/modules/user/inputs/user.input.js +2 -2
  128. package/dist/server/modules/user/inputs/user.input.js.map +1 -1
  129. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js +4 -4
  130. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js.map +1 -1
  131. package/dist/server/modules/user/user.model.js +8 -8
  132. package/dist/server/modules/user/user.model.js.map +1 -1
  133. package/dist/server/modules/user/user.resolver.d.ts +1 -1
  134. package/dist/server/modules/user/user.resolver.js +11 -11
  135. package/dist/server/modules/user/user.resolver.js.map +1 -1
  136. package/dist/server/modules/user/user.service.d.ts +1 -1
  137. package/dist/server/server.controller.js +2 -2
  138. package/dist/server/server.controller.js.map +1 -1
  139. package/dist/test/test.helper.d.ts +14 -14
  140. package/dist/test/test.helper.js +0 -1
  141. package/dist/test/test.helper.js.map +1 -1
  142. package/dist/tsconfig.build.tsbuildinfo +1 -1
  143. package/package.json +44 -41
  144. package/src/core/common/args/filter.args.ts +2 -2
  145. package/src/core/common/args/pagination.args.ts +5 -5
  146. package/src/core/common/decorators/graphql-service-options.decorator.ts +1 -1
  147. package/src/core/common/decorators/graphql-user.decorator.ts +1 -1
  148. package/src/core/common/decorators/rest-user.decorator.ts +1 -1
  149. package/src/core/common/helpers/config.helper.ts +22 -21
  150. package/src/core/common/helpers/db.helper.ts +164 -164
  151. package/src/core/common/helpers/file.helper.ts +18 -18
  152. package/src/core/common/helpers/filter.helper.ts +35 -35
  153. package/src/core/common/helpers/graphql.helper.ts +100 -100
  154. package/src/core/common/helpers/input.helper.ts +89 -89
  155. package/src/core/common/helpers/model.helper.ts +70 -70
  156. package/src/core/common/helpers/service.helper.ts +3 -3
  157. package/src/core/common/helpers/table.helper.ts +1 -1
  158. package/src/core/common/inputs/combined-filter.input.ts +5 -5
  159. package/src/core/common/inputs/filter.input.ts +5 -5
  160. package/src/core/common/inputs/single-filter.input.ts +9 -9
  161. package/src/core/common/inputs/sort.input.ts +3 -3
  162. package/src/core/common/interfaces/server-options.interface.ts +9 -9
  163. package/src/core/common/models/core-persistence.model.ts +8 -8
  164. package/src/core/common/plugins/mongoose-id.plugin.js +2 -2
  165. package/src/core/common/scalars/any.scalar.ts +8 -8
  166. package/src/core/common/scalars/date-timestamp.scalar.ts +1 -1
  167. package/src/core/common/scalars/date.scalar.ts +1 -1
  168. package/src/core/common/scalars/json.scalar.ts +8 -8
  169. package/src/core/common/services/config.service.ts +7 -7
  170. package/src/core/common/services/crud.service.ts +19 -19
  171. package/src/core/common/services/mailjet.service.ts +1 -1
  172. package/src/core/common/services/module.service.ts +4 -4
  173. package/src/core/common/types/falsy.type.ts +1 -1
  174. package/src/core/common/types/id.type.ts +1 -1
  175. package/src/core/common/types/require-only-one.type.ts +3 -3
  176. package/src/core/common/types/required-at-least-one.type.ts +3 -3
  177. package/src/core/common/types/string-or-object-id.type.ts +1 -1
  178. package/src/core/modules/auth/core-auth.controller.ts +6 -6
  179. package/src/core/modules/auth/core-auth.model.ts +1 -1
  180. package/src/core/modules/auth/core-auth.module.ts +4 -4
  181. package/src/core/modules/auth/core-auth.resolver.ts +6 -6
  182. package/src/core/modules/auth/guards/auth.guard.ts +5 -5
  183. package/src/core/modules/auth/inputs/core-auth-sign-in.input.ts +1 -1
  184. package/src/core/modules/auth/inputs/core-auth-sign-up.input.ts +1 -1
  185. package/src/core/modules/auth/services/core-auth.service.ts +6 -1
  186. package/src/core/modules/auth/tokens.decorator.ts +2 -2
  187. package/src/core/modules/file/core-file-info.model.ts +7 -7
  188. package/src/core/modules/file/core-file.controller.ts +2 -2
  189. package/src/core/modules/file/core-file.resolver.ts +6 -6
  190. package/src/core/modules/file/core-file.service.ts +6 -6
  191. package/src/core/modules/health-check/core-health-check-result.model.ts +8 -8
  192. package/src/core/modules/health-check/core-health-check.controller.ts +2 -2
  193. package/src/core/modules/health-check/core-health-check.resolver.ts +2 -2
  194. package/src/core/modules/user/core-user.model.ts +11 -11
  195. package/src/core/modules/user/core-user.service.ts +2 -2
  196. package/src/core/modules/user/inputs/core-user-create.input.ts +2 -2
  197. package/src/core/modules/user/inputs/core-user.input.ts +9 -9
  198. package/src/index.ts +9 -9
  199. package/src/server/common/models/persistence.model.ts +8 -8
  200. package/src/server/modules/auth/auth.controller.ts +1 -1
  201. package/src/server/modules/auth/auth.model.ts +2 -2
  202. package/src/server/modules/auth/auth.resolver.ts +3 -3
  203. package/src/server/modules/auth/inputs/auth-sign-in.input.ts +1 -1
  204. package/src/server/modules/auth/inputs/auth-sign-up.input.ts +3 -3
  205. package/src/server/modules/file/file-info.model.ts +2 -2
  206. package/src/server/modules/file/file.controller.ts +5 -5
  207. package/src/server/modules/file/file.module.ts +1 -1
  208. package/src/server/modules/file/file.resolver.ts +5 -5
  209. package/src/server/modules/user/avatar.controller.ts +2 -2
  210. package/src/server/modules/user/inputs/user-create.input.ts +1 -1
  211. package/src/server/modules/user/inputs/user.input.ts +1 -1
  212. package/src/server/modules/user/outputs/find-and-count-users-result.output.ts +3 -3
  213. package/src/server/modules/user/user.model.ts +8 -8
  214. package/src/server/modules/user/user.resolver.ts +11 -11
  215. package/src/server/modules/user/user.service.ts +1 -1
  216. package/src/server/server.controller.ts +2 -2
  217. package/src/test/test.helper.ts +14 -15
@@ -1,4 +1,4 @@
1
- import { MongoGridFSOptions, MongooseGridFS, createBucket } from '@lenne.tech/mongoose-gridfs';
1
+ import { createBucket, MongoGridFSOptions, MongooseGridFS } from '@lenne.tech/mongoose-gridfs';
2
2
  import { NotFoundException } from '@nestjs/common';
3
3
  import { GridFSBucket, GridFSBucketReadStream, GridFSBucketReadStreamOptions } from 'mongodb';
4
4
  import mongoose, { Connection, Types } from 'mongoose';
@@ -127,7 +127,7 @@ export abstract class CoreFileService {
127
127
  /**
128
128
  * Get info about file via file ID
129
129
  */
130
- async getFileInfo(id: Types.ObjectId | string, serviceOptions?: FileServiceOptions): Promise<CoreFileInfo> {
130
+ async getFileInfo(id: string | Types.ObjectId, serviceOptions?: FileServiceOptions): Promise<CoreFileInfo> {
131
131
  if (!(await this.checkRights(id, { ...serviceOptions, checkInputType: 'id' }))) {
132
132
  return null;
133
133
  }
@@ -155,7 +155,7 @@ export abstract class CoreFileService {
155
155
  /**
156
156
  * Get file stream (for big files) via file ID
157
157
  */
158
- async getFileStream(id: Types.ObjectId | string, serviceOptions?: FileServiceOptions) {
158
+ async getFileStream(id: string | Types.ObjectId, serviceOptions?: FileServiceOptions) {
159
159
  if (!(await this.checkRights(id, { ...serviceOptions, checkInputType: 'id' }))) {
160
160
  return null;
161
161
  }
@@ -178,7 +178,7 @@ export abstract class CoreFileService {
178
178
  /**
179
179
  * Get file buffer (for small files) via file ID
180
180
  */
181
- async getBuffer(id: Types.ObjectId | string, serviceOptions?: FileServiceOptions): Promise<Buffer> {
181
+ async getBuffer(id: string | Types.ObjectId, serviceOptions?: FileServiceOptions): Promise<Buffer> {
182
182
  if (!(await this.checkRights(id, { ...serviceOptions, checkInputType: 'id' }))) {
183
183
  return null;
184
184
  }
@@ -206,7 +206,7 @@ export abstract class CoreFileService {
206
206
  /**
207
207
  * Delete file reference of avatar
208
208
  */
209
- async deleteFile(id: Types.ObjectId | string, serviceOptions?: FileServiceOptions): Promise<CoreFileInfo> {
209
+ async deleteFile(id: string | Types.ObjectId, serviceOptions?: FileServiceOptions): Promise<CoreFileInfo> {
210
210
  if (!(await this.checkRights(id, { ...serviceOptions, checkInputType: 'id' }))) {
211
211
  return null;
212
212
  }
@@ -241,7 +241,7 @@ export abstract class CoreFileService {
241
241
  */
242
242
  protected checkRights(
243
243
  input: any, // eslint-disable-line unused-imports/no-unused-vars
244
- options?: { checkInputType: FileInputCheckType } & FileServiceOptions, // eslint-disable-line unused-imports/no-unused-vars
244
+ options?: FileServiceOptions & { checkInputType: FileInputCheckType }, // eslint-disable-line unused-imports/no-unused-vars
245
245
  ): MaybePromise<boolean> {
246
246
  return true;
247
247
  }
@@ -8,8 +8,8 @@ import { JSON } from '../../common/scalars/json.scalar';
8
8
  /**
9
9
  * User model
10
10
  */
11
- @Restricted(RoleEnum.S_EVERYONE)
12
11
  @ObjectType({ description: 'Health check result' })
12
+ @Restricted(RoleEnum.S_EVERYONE)
13
13
  export abstract class CoreHealthCheckResult extends CoreModel {
14
14
  // ===================================================================================================================
15
15
  // Properties
@@ -18,37 +18,37 @@ export abstract class CoreHealthCheckResult extends CoreModel {
18
18
  /**
19
19
  * The overall status of the Health Check
20
20
  */
21
- @Restricted(RoleEnum.S_EVERYONE)
22
21
  @Field({ description: 'The overall status of the Health Check', nullable: false })
22
+ @Restricted(RoleEnum.S_EVERYONE)
23
23
  status: 'error' | 'ok' | 'shutting_down' = undefined;
24
24
 
25
25
  /**
26
26
  * The info object contains information of each health indicator which is of status “up”
27
27
  */
28
- @Restricted(RoleEnum.S_EVERYONE)
29
- @Field(type => JSON, {
28
+ @Field(() => JSON, {
30
29
  description: 'The info object contains information of each health indicator which is of status “up”',
31
30
  nullable: true,
32
31
  })
32
+ @Restricted(RoleEnum.S_EVERYONE)
33
33
  info: JSON = undefined;
34
34
 
35
35
  /**
36
36
  * The error object contains information of each health indicator which is of status “down”
37
37
  */
38
- @Restricted(RoleEnum.S_EVERYONE)
39
- @Field(type => JSON, {
38
+ @Field(() => JSON, {
40
39
  description: 'The error object contains information of each health indicator which is of status “down”',
41
40
  nullable: true,
42
41
  })
42
+ @Restricted(RoleEnum.S_EVERYONE)
43
43
  error: JSON = undefined;
44
44
 
45
45
  /**
46
46
  * The details object contains information of every health indicator
47
47
  */
48
- @Restricted(RoleEnum.S_EVERYONE)
49
- @Field(type => JSON, {
48
+ @Field(() => JSON, {
50
49
  description: 'The details object contains information of every health indicator',
51
50
  nullable: false,
52
51
  })
52
+ @Restricted(RoleEnum.S_EVERYONE)
53
53
  details: JSON = undefined;
54
54
  }
@@ -8,8 +8,8 @@ import { CoreHealthCheckService } from './core-health-check.service';
8
8
  * The HealthController class checks the health of various components including the database, memory, and disk.
9
9
  * Inspired by https://mobileappcircular.com/marketplace-backend-creating-a-health-check-endpoint-in-nestjs-app-using-terminus-25727e96c7d2
10
10
  */
11
- @Roles(RoleEnum.ADMIN)
12
11
  @Controller()
12
+ @Roles(RoleEnum.ADMIN)
13
13
  export class CoreHealthCheckController {
14
14
  constructor(protected readonly healthCheckService: CoreHealthCheckService) {}
15
15
 
@@ -21,8 +21,8 @@ export class CoreHealthCheckController {
21
21
  * storage. The `healthCheck()` method will return a Promise that resolves with an array of objects
22
22
  * representing the results of each check
23
23
  */
24
- @Roles(RoleEnum.S_EVERYONE)
25
24
  @Get('health-check')
25
+ @Roles(RoleEnum.S_EVERYONE)
26
26
  async healthCheck() {
27
27
  return this.healthCheckService.healthCheck();
28
28
  }
@@ -2,8 +2,8 @@ import { Query, Resolver } from '@nestjs/graphql';
2
2
 
3
3
  import { Roles } from '../../common/decorators/roles.decorator';
4
4
  import { RoleEnum } from '../../common/enums/role.enum';
5
- import { CoreHealthCheckService } from './core-health-check.service';
6
5
  import { CoreHealthCheckResult } from './core-health-check-result.model';
6
+ import { CoreHealthCheckService } from './core-health-check.service';
7
7
 
8
8
  /**
9
9
  * Resolver to process with user data
@@ -23,8 +23,8 @@ export class CoreHealthCheckResolver {
23
23
  /**
24
24
  * Get heath check result
25
25
  */
26
- @Roles(RoleEnum.S_EVERYONE)
27
26
  @Query(() => CoreHealthCheckResult, { description: 'Get health check result' })
27
+ @Roles(RoleEnum.S_EVERYONE)
28
28
  async healthCheck() {
29
29
  return this.healthCheckService.healthCheck();
30
30
  }
@@ -14,10 +14,10 @@ export type CoreUserModelDocument = CoreUserModel & Document;
14
14
  /**
15
15
  * User model
16
16
  */
17
- @Restricted(RoleEnum.S_EVERYONE)
18
- @ObjectType({ description: 'User', isAbstract: true })
19
- @MongooseSchema({ timestamps: true })
20
17
  @ApiExtraModels(CorePersistenceModel)
18
+ @MongooseSchema({ timestamps: true })
19
+ @ObjectType({ description: 'User', isAbstract: true })
20
+ @Restricted(RoleEnum.S_EVERYONE)
21
21
  export abstract class CoreUserModel extends CorePersistenceModel {
22
22
  // ===================================================================================================================
23
23
  // Properties
@@ -64,7 +64,7 @@ export abstract class CoreUserModel extends CorePersistenceModel {
64
64
  * Roles of the user
65
65
  */
66
66
  @ApiProperty()
67
- @Field(type => [String], { description: 'Roles of the user', nullable: true })
67
+ @Field(() => [String], { description: 'Roles of the user', nullable: true })
68
68
  @IsOptional()
69
69
  @Prop([String])
70
70
  @Restricted(RoleEnum.S_EVERYONE)
@@ -95,9 +95,6 @@ export abstract class CoreUserModel extends CorePersistenceModel {
95
95
  * value: TokenData
96
96
  */
97
97
  @ApiProperty({ isArray: true })
98
- @IsOptional()
99
- @Prop(raw({}))
100
- @Restricted(RoleEnum.S_NO_ONE)
101
98
  @ApiProperty({
102
99
  additionalProperties: {
103
100
  properties: {
@@ -122,6 +119,9 @@ export abstract class CoreUserModel extends CorePersistenceModel {
122
119
  },
123
120
  type: 'object',
124
121
  })
122
+ @IsOptional()
123
+ @Prop(raw({}))
124
+ @Restricted(RoleEnum.S_NO_ONE)
125
125
  refreshTokens: Record<string, CoreTokenData> = undefined;
126
126
 
127
127
  /**
@@ -129,9 +129,6 @@ export abstract class CoreUserModel extends CorePersistenceModel {
129
129
  * See sameTokenIdPeriod in configuration
130
130
  */
131
131
  @ApiProperty()
132
- @IsOptional()
133
- @Prop(raw({}))
134
- @Restricted(RoleEnum.S_NO_ONE)
135
132
  @ApiProperty({
136
133
  additionalProperties: {
137
134
  properties: {
@@ -156,6 +153,9 @@ export abstract class CoreUserModel extends CorePersistenceModel {
156
153
  },
157
154
  type: 'object',
158
155
  })
156
+ @IsOptional()
157
+ @Prop(raw({}))
158
+ @Restricted(RoleEnum.S_NO_ONE)
159
159
  tempTokens: Record<string, { createdAt: number; deviceId: string; tokenId: string }> = undefined;
160
160
 
161
161
  /**
@@ -171,7 +171,7 @@ export abstract class CoreUserModel extends CorePersistenceModel {
171
171
  * Verification of the user
172
172
  */
173
173
  @ApiProperty()
174
- @Field(type => Boolean, { description: 'Verification state of the user', nullable: true })
174
+ @Field(() => Boolean, { description: 'Verification state of the user', nullable: true })
175
175
  @Prop({ type: Boolean })
176
176
  @Restricted(RoleEnum.S_EVERYONE)
177
177
  verified: boolean = undefined;
@@ -9,8 +9,8 @@ import { CrudService } from '../../common/services/crud.service';
9
9
  import { EmailService } from '../../common/services/email.service';
10
10
  import { CoreModelConstructor } from '../../common/types/core-model-constructor.type';
11
11
  import { CoreUserModel } from './core-user.model';
12
- import { CoreUserInput } from './inputs/core-user.input';
13
12
  import { CoreUserCreateInput } from './inputs/core-user-create.input';
13
+ import { CoreUserInput } from './inputs/core-user.input';
14
14
 
15
15
  import bcrypt = require('bcrypt');
16
16
  import crypto = require('crypto');
@@ -98,7 +98,7 @@ export abstract class CoreUserService<
98
98
  /**
99
99
  * Verify user with token
100
100
  */
101
- async verify(token: string, serviceOptions?: ServiceOptions): Promise<TUser | string> {
101
+ async verify(token: string, serviceOptions?: ServiceOptions): Promise<string | TUser> {
102
102
  // Get user
103
103
  const dbObject = await this.mainDbModel.findOne({ verificationToken: token }).exec();
104
104
  if (!dbObject) {
@@ -12,11 +12,11 @@ import { CoreUserInput } from './core-user.input';
12
12
  * otherwise the property will not be recognized via Object.keys (this is necessary for mapping) or will be initialized
13
13
  * with a default value that may overwrite an existing value in the DB.
14
14
  */
15
- @Restricted(RoleEnum.S_EVERYONE)
16
15
  @InputType({ description: 'User input to create a new user', isAbstract: true })
16
+ @Restricted(RoleEnum.S_EVERYONE)
17
17
  export abstract class CoreUserCreateInput extends CoreUserInput {
18
- @Restricted(RoleEnum.S_EVERYONE)
19
18
  @Field({ description: 'Email of the user', nullable: false })
20
19
  @IsEmail()
20
+ @Restricted(RoleEnum.S_EVERYONE)
21
21
  override email: string = undefined;
22
22
  }
@@ -13,55 +13,55 @@ import { CoreInput } from '../../../common/inputs/core-input.input';
13
13
  * otherwise the property will not be recognized via Object.keys (this is necessary for mapping) or will be initialized
14
14
  * with a default value that may overwrite an existing value in the DB.
15
15
  */
16
- @Restricted(RoleEnum.S_EVERYONE)
17
16
  @InputType({ description: 'User input', isAbstract: true })
17
+ @Restricted(RoleEnum.S_EVERYONE)
18
18
  export abstract class CoreUserInput extends CoreInput {
19
19
  /**
20
20
  * Email of the user
21
21
  */
22
- @Restricted(RoleEnum.S_EVERYONE)
23
22
  @Field({ description: 'Email of the user', nullable: true })
24
- @IsOptional()
25
23
  @IsEmail()
24
+ @IsOptional()
25
+ @Restricted(RoleEnum.S_EVERYONE)
26
26
  email?: string = undefined;
27
27
 
28
28
  /**
29
29
  * First name of the user
30
30
  */
31
- @Restricted(RoleEnum.S_EVERYONE)
32
31
  @Field({ description: 'First name of the user', nullable: true })
33
32
  @IsOptional()
33
+ @Restricted(RoleEnum.S_EVERYONE)
34
34
  firstName?: string = undefined;
35
35
 
36
36
  /**
37
37
  * Last name of the user
38
38
  */
39
- @Restricted(RoleEnum.S_EVERYONE)
40
39
  @Field({ description: 'Last name of the user', nullable: true })
41
40
  @IsOptional()
41
+ @Restricted(RoleEnum.S_EVERYONE)
42
42
  lastName?: string = undefined;
43
43
 
44
44
  /**
45
45
  * Roles of the user
46
46
  */
47
- @Restricted({ processType: ProcessType.INPUT, roles: RoleEnum.ADMIN })
48
- @Field(type => [String], { description: 'Roles of the user', nullable: true })
47
+ @Field(() => [String], { description: 'Roles of the user', nullable: true })
49
48
  @IsOptional()
49
+ @Restricted({ processType: ProcessType.INPUT, roles: RoleEnum.ADMIN })
50
50
  roles?: string[] = undefined;
51
51
 
52
52
  /**
53
53
  * Username / alias of the user
54
54
  */
55
- @Restricted(RoleEnum.S_EVERYONE)
56
55
  @Field({ description: 'Username / alias of the user', nullable: true })
57
56
  @IsOptional()
57
+ @Restricted(RoleEnum.S_EVERYONE)
58
58
  username?: string = undefined;
59
59
 
60
60
  /**
61
61
  * Password of the user
62
62
  */
63
- @Restricted(RoleEnum.S_EVERYONE)
64
63
  @Field({ description: 'Password of the user', nullable: true })
65
64
  @IsOptional()
65
+ @Restricted(RoleEnum.S_EVERYONE)
66
66
  password?: string = undefined;
67
67
  }
package/src/index.ts CHANGED
@@ -43,9 +43,9 @@ export * from './core/common/inputs/sort.input';
43
43
  export * from './core/common/interceptors/check-response.interceptor';
44
44
  export * from './core/common/interceptors/check-security.interceptor';
45
45
  export * from './core/common/interfaces/core-persistence-model.interface';
46
- export * from './core/common/interfaces/cron-job-config.interface';
47
46
  export * from './core/common/interfaces/cron-job-config-with-time-zone.interface';
48
47
  export * from './core/common/interfaces/cron-job-config-with-utc-offset.interface';
48
+ export * from './core/common/interfaces/cron-job-config.interface';
49
49
  export * from './core/common/interfaces/mailjet-options.interface';
50
50
  export * from './core/common/interfaces/prepare-input-options.interface';
51
51
  export * from './core/common/interfaces/prepare-output-options.interface';
@@ -60,8 +60,8 @@ export * from './core/common/pipes/map-and-validate.pipe';
60
60
  export * from './core/common/plugins/complexity.plugin';
61
61
  export * from './core/common/plugins/mongoose-id.plugin';
62
62
  export * from './core/common/scalars/any.scalar';
63
- export * from './core/common/scalars/date.scalar';
64
63
  export * from './core/common/scalars/date-timestamp.scalar';
64
+ export * from './core/common/scalars/date.scalar';
65
65
  export * from './core/common/scalars/json.scalar';
66
66
  export * from './core/common/services/brevo.service';
67
67
  export * from './core/common/services/config.service';
@@ -81,8 +81,8 @@ export * from './core/common/types/ids.type';
81
81
  export * from './core/common/types/is-one-of.type';
82
82
  export * from './core/common/types/maybe-promise.type';
83
83
  export * from './core/common/types/plain-input.type';
84
- export * from './core/common/types/plain-object.type';
85
84
  export * from './core/common/types/plain-object-deep.type';
85
+ export * from './core/common/types/plain-object.type';
86
86
  export * from './core/common/types/populate-config.type';
87
87
  export * from './core/common/types/remove-methods.type';
88
88
  export * from './core/common/types/require-only-one.type';
@@ -109,20 +109,20 @@ export * from './core/modules/auth/inputs/core-auth-sign-up.input';
109
109
  export * from './core/modules/auth/interfaces/core-auth-user.interface';
110
110
  export * from './core/modules/auth/interfaces/core-token-data.interface';
111
111
  export * from './core/modules/auth/interfaces/jwt-payload.interface';
112
- export * from './core/modules/auth/services/core-auth.service';
113
112
  export * from './core/modules/auth/services/core-auth-user.service';
114
- export * from './core/modules/auth/strategies/jwt.strategy';
113
+ export * from './core/modules/auth/services/core-auth.service';
115
114
  export * from './core/modules/auth/strategies/jwt-refresh.strategy';
115
+ export * from './core/modules/auth/strategies/jwt.strategy';
116
116
  export * from './core/modules/auth/tokens.decorator';
117
117
 
118
118
  // =====================================================================================================================
119
119
  // Core - Modules - File
120
120
  // =====================================================================================================================
121
121
 
122
+ export * from './core/modules/file/core-file-info.model';
122
123
  export * from './core/modules/file/core-file.controller';
123
124
  export * from './core/modules/file/core-file.resolver';
124
125
  export * from './core/modules/file/core-file.service';
125
- export * from './core/modules/file/core-file-info.model';
126
126
  export * from './core/modules/file/interfaces/file-service-options.interface';
127
127
  export * from './core/modules/file/interfaces/file-upload.interface';
128
128
 
@@ -130,20 +130,20 @@ export * from './core/modules/file/interfaces/file-upload.interface';
130
130
  // Core - Modules - User
131
131
  // =====================================================================================================================
132
132
 
133
+ export * from './core/modules/health-check/core-health-check-result.model';
133
134
  export * from './core/modules/health-check/core-health-check.controller';
134
135
  export * from './core/modules/health-check/core-health-check.module';
135
136
  export * from './core/modules/health-check/core-health-check.resolver';
136
- export * from './core/modules/health-check/core-health-check.service';
137
137
 
138
138
  // =====================================================================================================================
139
139
  // Core - Modules - HealthCheck
140
140
  // =====================================================================================================================
141
141
 
142
- export * from './core/modules/health-check/core-health-check-result.model';
142
+ export * from './core/modules/health-check/core-health-check.service';
143
143
  export * from './core/modules/user/core-user.model';
144
144
  export * from './core/modules/user/core-user.service';
145
- export * from './core/modules/user/inputs/core-user.input';
146
145
  export * from './core/modules/user/inputs/core-user-create.input';
146
+ export * from './core/modules/user/inputs/core-user.input';
147
147
 
148
148
  // =====================================================================================================================
149
149
  // Tests
@@ -15,12 +15,12 @@ import mongoose = require('mongoose');
15
15
  *
16
16
  * The models are a combination of MikroORM Entities and TypeGraphQL Types
17
17
  */
18
- @Restricted(RoleEnum.ADMIN)
18
+ @ApiExtraModels(CorePersistenceModel)
19
19
  @ObjectType({
20
20
  description: 'Persistence model which will be saved in DB',
21
21
  isAbstract: true,
22
22
  })
23
- @ApiExtraModels(CorePersistenceModel)
23
+ @Restricted(RoleEnum.ADMIN)
24
24
  export abstract class PersistenceModel extends CorePersistenceModel {
25
25
  // ===================================================================================================================
26
26
  // Properties
@@ -31,28 +31,28 @@ export abstract class PersistenceModel extends CorePersistenceModel {
31
31
  *
32
32
  * Not set when created by system
33
33
  */
34
- @Restricted(RoleEnum.ADMIN)
34
+ @ApiProperty({ type: String })
35
35
  @Field(() => User, {
36
36
  description: 'ID of the user who created the object',
37
37
  nullable: true,
38
38
  })
39
39
  @Prop({ ref: 'User', type: mongoose.Schema.Types.ObjectId })
40
- @ApiProperty({ type: String })
41
- createdBy?: Types.ObjectId | string = undefined;
40
+ @Restricted(RoleEnum.ADMIN)
41
+ createdBy?: string | Types.ObjectId = undefined;
42
42
 
43
43
  /**
44
44
  * ID of the user who updated the object
45
45
  *
46
46
  * Not set when updated by system
47
47
  */
48
- @Restricted(RoleEnum.ADMIN)
48
+ @ApiProperty({ type: User })
49
49
  @Field(() => User, {
50
50
  description: 'ID of the user who updated the object',
51
51
  nullable: true,
52
52
  })
53
53
  @Prop({ ref: 'User', type: mongoose.Schema.Types.ObjectId })
54
- @ApiProperty({ type: User })
55
- updatedBy?: Types.ObjectId | string = undefined;
54
+ @Restricted(RoleEnum.ADMIN)
55
+ updatedBy?: string | Types.ObjectId = undefined;
56
56
 
57
57
  // ===================================================================================================================
58
58
  // Methods
@@ -6,8 +6,8 @@ import { ConfigService } from '../../../core/common/services/config.service';
6
6
  import { CoreAuthController } from '../../../core/modules/auth/core-auth.controller';
7
7
  import { AuthService } from './auth.service';
8
8
 
9
- @Roles(RoleEnum.ADMIN)
10
9
  @Controller('auth')
10
+ @Roles(RoleEnum.ADMIN)
11
11
  export class AuthController extends CoreAuthController {
12
12
  /**
13
13
  * Import project services
@@ -9,8 +9,8 @@ import { User } from '../user/user.model';
9
9
  /**
10
10
  * Authentication data
11
11
  */
12
- @Restricted(RoleEnum.ADMIN)
13
12
  @ObjectType({ description: 'Authentication data' })
13
+ @Restricted(RoleEnum.ADMIN)
14
14
  export class Auth extends CoreAuthModel {
15
15
  // ===================================================================================================================
16
16
  // Properties
@@ -19,8 +19,8 @@ export class Auth extends CoreAuthModel {
19
19
  /**
20
20
  * Signed-in user
21
21
  */
22
- @Restricted(RoleEnum.S_EVERYONE)
23
22
  @Field(() => User, { description: 'User who signed in' })
23
+ @Restricted(RoleEnum.S_EVERYONE)
24
24
  override user: User = undefined;
25
25
 
26
26
  // ===================================================================================================================
@@ -15,8 +15,8 @@ import { AuthSignUpInput } from './inputs/auth-sign-up.input';
15
15
  /**
16
16
  * Authentication resolver for the sign in
17
17
  */
18
- @Roles(RoleEnum.ADMIN)
19
18
  @Resolver(() => Auth)
19
+ @Roles(RoleEnum.ADMIN)
20
20
  export class AuthResolver extends CoreAuthResolver {
21
21
  /**
22
22
  * Integrate services
@@ -31,8 +31,8 @@ export class AuthResolver extends CoreAuthResolver {
31
31
  /**
32
32
  * SignIn for User
33
33
  */
34
- @Roles(RoleEnum.S_EVERYONE)
35
34
  @Mutation(() => Auth, { description: 'Sign in and get JWT token' })
35
+ @Roles(RoleEnum.S_EVERYONE)
36
36
  override async signIn(
37
37
  @GraphQLServiceOptions({ gqlPath: 'signIn.user' }) serviceOptions: ServiceOptions,
38
38
  @Context() ctx: { res: ResponseType },
@@ -48,10 +48,10 @@ export class AuthResolver extends CoreAuthResolver {
48
48
  /**
49
49
  * Sign up for user
50
50
  */
51
- @Roles(RoleEnum.S_EVERYONE)
52
51
  @Mutation(() => Auth, {
53
52
  description: 'Sign up user and get JWT token',
54
53
  })
54
+ @Roles(RoleEnum.S_EVERYONE)
55
55
  override async signUp(
56
56
  @GraphQLServiceOptions({ gqlPath: 'signUp.user' }) serviceOptions: ServiceOptions,
57
57
  @Context() ctx: { res: ResponseType },
@@ -7,8 +7,8 @@ import { CoreAuthSignInInput } from '../../../../core/modules/auth/inputs/core-a
7
7
  /**
8
8
  * SignIn input
9
9
  */
10
- @Restricted(RoleEnum.ADMIN)
11
10
  @InputType({ description: 'Sign-in input' })
11
+ @Restricted(RoleEnum.ADMIN)
12
12
  export class AuthSignInInput extends CoreAuthSignInInput {
13
13
  // Extend UserInput here
14
14
  }
@@ -7,18 +7,18 @@ import { CoreAuthSignUpInput } from '../../../../core/modules/auth/inputs/core-a
7
7
  /**
8
8
  * SignUp input
9
9
  */
10
- @Restricted(RoleEnum.ADMIN)
11
10
  @InputType({ description: 'Sign-up input' })
11
+ @Restricted(RoleEnum.ADMIN)
12
12
  export class AuthSignUpInput extends CoreAuthSignUpInput {
13
13
  // ===================================================================================================================
14
14
  // Properties
15
15
  // ===================================================================================================================
16
16
 
17
- @Restricted(RoleEnum.S_EVERYONE)
18
17
  @Field({ description: 'firstName', nullable: true })
18
+ @Restricted(RoleEnum.S_EVERYONE)
19
19
  firstName: string = undefined;
20
20
 
21
- @Restricted(RoleEnum.S_EVERYONE)
22
21
  @Field({ description: 'lastName', nullable: true })
22
+ @Restricted(RoleEnum.S_EVERYONE)
23
23
  lastName: string = undefined;
24
24
  }
@@ -8,9 +8,9 @@ import { CoreFileInfo } from '../../../core/modules/file/core-file-info.model';
8
8
  /**
9
9
  * File info model
10
10
  */
11
- @Restricted(RoleEnum.ADMIN)
12
- @ObjectType({ description: 'Information about file' })
13
11
  @MongooseSchema({ collection: 'fs.files' })
12
+ @ObjectType({ description: 'Information about file' })
13
+ @Restricted(RoleEnum.ADMIN)
14
14
  export class FileInfo extends CoreFileInfo {}
15
15
 
16
16
  /**
@@ -19,8 +19,8 @@ import { FileService } from './file.service';
19
19
  /**
20
20
  * File controller for
21
21
  */
22
- @Roles(RoleEnum.ADMIN)
23
22
  @Controller('files')
23
+ @Roles(RoleEnum.ADMIN)
24
24
  export class FileController {
25
25
  /**
26
26
  * Import services
@@ -30,8 +30,8 @@ export class FileController {
30
30
  /**
31
31
  * Upload file
32
32
  */
33
- @Roles(RoleEnum.ADMIN)
34
33
  @Post('upload')
34
+ @Roles(RoleEnum.ADMIN)
35
35
  @UseInterceptors(FileInterceptor('file'))
36
36
  uploadFile(@UploadedFile() file: Express.Multer.File): any {
37
37
  return file;
@@ -40,8 +40,8 @@ export class FileController {
40
40
  /**
41
41
  * Download file
42
42
  */
43
- @Roles(RoleEnum.ADMIN)
44
43
  @Get(':id')
44
+ @Roles(RoleEnum.ADMIN)
45
45
  async getFile(@Param('id') id: string, @Res() res) {
46
46
  if (!id) {
47
47
  throw new BadRequestException('Missing ID');
@@ -67,8 +67,8 @@ export class FileController {
67
67
  /**
68
68
  * Get file information
69
69
  */
70
- @Roles(RoleEnum.ADMIN)
71
70
  @Get('info/:id')
71
+ @Roles(RoleEnum.ADMIN)
72
72
  async getFileInfo(@Param('id') id: string) {
73
73
  return await this.fileService.getFileInfo(id);
74
74
  }
@@ -76,8 +76,8 @@ export class FileController {
76
76
  /**
77
77
  * Delete file
78
78
  */
79
- @Roles(RoleEnum.ADMIN)
80
79
  @Delete(':id')
80
+ @Roles(RoleEnum.ADMIN)
81
81
  async deleteFile(@Param('id') id: string) {
82
82
  if (!id) {
83
83
  throw new BadRequestException('Missing ID');
@@ -1,4 +1,4 @@
1
- import { Module, forwardRef } from '@nestjs/common';
1
+ import { forwardRef, Module } from '@nestjs/common';
2
2
  import { MulterModule } from '@nestjs/platform-express';
3
3
 
4
4
  import { UserModule } from '../user/user.module';
@@ -4,8 +4,8 @@ import { createWriteStream } from 'fs';
4
4
  import { Roles } from '../../../core/common/decorators/roles.decorator';
5
5
  import { RoleEnum } from '../../../core/common/enums/role.enum';
6
6
  import { FileUpload } from '../../../core/modules/file/interfaces/file-upload.interface';
7
- import { FileService } from './file.service';
8
7
  import { FileInfo } from './file-info.model';
8
+ import { FileService } from './file.service';
9
9
 
10
10
  import fs = require('fs');
11
11
  import GraphQLUpload = require('graphql-upload/GraphQLUpload.js');
@@ -28,8 +28,8 @@ export class FileResolver {
28
28
  /**
29
29
  * Get file info
30
30
  */
31
- @Roles(RoleEnum.ADMIN)
32
31
  @Query(() => FileInfo, { nullable: true })
32
+ @Roles(RoleEnum.ADMIN)
33
33
  async getFileInfo(@Args({ name: 'filename', type: () => String }) filename: string) {
34
34
  return await this.fileService.getFileInfoByName(filename);
35
35
  }
@@ -41,8 +41,8 @@ export class FileResolver {
41
41
  /**
42
42
  * Delete file
43
43
  */
44
- @Roles(RoleEnum.ADMIN)
45
44
  @Mutation(() => FileInfo)
45
+ @Roles(RoleEnum.ADMIN)
46
46
  async deleteFile(@Args({ name: 'filename', type: () => String }) filename: string) {
47
47
  return await this.fileService.deleteFileByName(filename);
48
48
  }
@@ -50,8 +50,8 @@ export class FileResolver {
50
50
  /**
51
51
  * Upload file
52
52
  */
53
- @Roles(RoleEnum.ADMIN)
54
53
  @Mutation(() => FileInfo)
54
+ @Roles(RoleEnum.ADMIN)
55
55
  async uploadFile(@Args({ name: 'file', type: () => GraphQLUpload }) file: FileUpload) {
56
56
  return await this.fileService.createFile(file);
57
57
  }
@@ -59,8 +59,8 @@ export class FileResolver {
59
59
  /**
60
60
  * Upload files
61
61
  */
62
- @Roles(RoleEnum.ADMIN)
63
62
  @Mutation(() => Boolean)
63
+ @Roles(RoleEnum.ADMIN)
64
64
  async uploadFiles(@Args({ name: 'files', type: () => [GraphQLUpload] }) files: FileUpload[]) {
65
65
  // Save files in filesystem
66
66
  const promises: Promise<any>[] = [];