@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.
- package/dist/core/common/args/filter.args.js +2 -2
- package/dist/core/common/args/filter.args.js.map +1 -1
- package/dist/core/common/args/pagination.args.js +5 -5
- package/dist/core/common/args/pagination.args.js.map +1 -1
- package/dist/core/common/helpers/config.helper.d.ts +1 -1
- package/dist/core/common/helpers/config.helper.js +8 -8
- package/dist/core/common/helpers/config.helper.js.map +1 -1
- package/dist/core/common/helpers/db.helper.d.ts +11 -11
- package/dist/core/common/helpers/db.helper.js +100 -100
- package/dist/core/common/helpers/db.helper.js.map +1 -1
- package/dist/core/common/helpers/file.helper.d.ts +1 -1
- package/dist/core/common/helpers/file.helper.js +10 -10
- package/dist/core/common/helpers/file.helper.js.map +1 -1
- package/dist/core/common/helpers/filter.helper.d.ts +12 -12
- package/dist/core/common/helpers/filter.helper.js +19 -19
- package/dist/core/common/helpers/filter.helper.js.map +1 -1
- package/dist/core/common/helpers/graphql.helper.d.ts +8 -8
- package/dist/core/common/helpers/graphql.helper.js +75 -75
- package/dist/core/common/helpers/graphql.helper.js.map +1 -1
- package/dist/core/common/helpers/input.helper.d.ts +7 -7
- package/dist/core/common/helpers/input.helper.js +60 -60
- package/dist/core/common/helpers/input.helper.js.map +1 -1
- package/dist/core/common/helpers/model.helper.d.ts +8 -8
- package/dist/core/common/helpers/model.helper.js +38 -38
- package/dist/core/common/helpers/model.helper.js.map +1 -1
- package/dist/core/common/helpers/service.helper.d.ts +2 -2
- package/dist/core/common/helpers/table.helper.d.ts +1 -1
- package/dist/core/common/inputs/combined-filter.input.js +6 -6
- package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
- package/dist/core/common/inputs/filter.input.js +6 -6
- package/dist/core/common/inputs/filter.input.js.map +1 -1
- package/dist/core/common/inputs/single-filter.input.js +10 -10
- package/dist/core/common/inputs/single-filter.input.js.map +1 -1
- package/dist/core/common/inputs/sort.input.js +4 -4
- package/dist/core/common/inputs/sort.input.js.map +1 -1
- package/dist/core/common/interfaces/server-options.interface.d.ts +8 -8
- package/dist/core/common/models/core-persistence.model.js +8 -8
- package/dist/core/common/models/core-persistence.model.js.map +1 -1
- package/dist/core/common/plugins/mongoose-id.plugin.d.ts +1 -1
- package/dist/core/common/plugins/mongoose-id.plugin.js +2 -2
- package/dist/core/common/plugins/mongoose-id.plugin.js.map +1 -1
- package/dist/core/common/scalars/any.scalar.js +8 -8
- package/dist/core/common/scalars/any.scalar.js.map +1 -1
- package/dist/core/common/scalars/date-timestamp.scalar.js +1 -1
- package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
- package/dist/core/common/scalars/date.scalar.js +1 -1
- package/dist/core/common/scalars/date.scalar.js.map +1 -1
- package/dist/core/common/scalars/json.scalar.js +8 -8
- package/dist/core/common/scalars/json.scalar.js.map +1 -1
- package/dist/core/common/services/config.service.d.ts +26 -26
- package/dist/core/common/services/crud.service.d.ts +32 -32
- package/dist/core/common/services/mailjet.service.js +1 -1
- package/dist/core/common/services/mailjet.service.js.map +1 -1
- package/dist/core/common/services/module.service.d.ts +1 -1
- package/dist/core/common/services/module.service.js.map +1 -1
- package/dist/core/common/types/falsy.type.d.ts +1 -1
- package/dist/core/common/types/id.type.d.ts +4 -4
- package/dist/core/common/types/require-only-one.type.d.ts +2 -2
- package/dist/core/common/types/required-at-least-one.type.d.ts +2 -2
- package/dist/core/common/types/string-or-object-id.type.d.ts +1 -1
- package/dist/core/modules/auth/core-auth.controller.js +6 -6
- package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
- package/dist/core/modules/auth/core-auth.model.js +2 -2
- package/dist/core/modules/auth/core-auth.model.js.map +1 -1
- package/dist/core/modules/auth/core-auth.module.d.ts +4 -4
- package/dist/core/modules/auth/core-auth.module.js +2 -2
- package/dist/core/modules/auth/core-auth.module.js.map +1 -1
- package/dist/core/modules/auth/core-auth.resolver.js +6 -6
- package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
- package/dist/core/modules/auth/guards/auth.guard.d.ts +2 -2
- package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js +2 -2
- package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js.map +1 -1
- package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js +2 -2
- package/dist/core/modules/auth/inputs/core-auth-sign-up.input.js.map +1 -1
- package/dist/core/modules/auth/services/core-auth.service.d.ts +2 -2
- package/dist/core/modules/file/core-file-info.model.js +8 -8
- package/dist/core/modules/file/core-file-info.model.js.map +1 -1
- package/dist/core/modules/file/core-file.controller.js +2 -2
- package/dist/core/modules/file/core-file.controller.js.map +1 -1
- package/dist/core/modules/file/core-file.resolver.js +6 -6
- package/dist/core/modules/file/core-file.resolver.js.map +1 -1
- package/dist/core/modules/file/core-file.service.d.ts +6 -6
- package/dist/core/modules/health-check/core-health-check-result.model.js +9 -9
- package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -1
- package/dist/core/modules/health-check/core-health-check.controller.js +2 -2
- package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -1
- package/dist/core/modules/health-check/core-health-check.resolver.js +2 -2
- package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -1
- package/dist/core/modules/user/core-user.model.js +11 -11
- package/dist/core/modules/user/core-user.model.js.map +1 -1
- package/dist/core/modules/user/core-user.service.d.ts +2 -2
- package/dist/core/modules/user/inputs/core-user-create.input.js +3 -3
- package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
- package/dist/core/modules/user/inputs/core-user.input.js +10 -10
- package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/server/common/models/persistence.model.d.ts +2 -2
- package/dist/server/common/models/persistence.model.js +6 -6
- package/dist/server/common/models/persistence.model.js.map +1 -1
- package/dist/server/modules/auth/auth.controller.js +1 -1
- package/dist/server/modules/auth/auth.controller.js.map +1 -1
- package/dist/server/modules/auth/auth.model.js +3 -3
- package/dist/server/modules/auth/auth.model.js.map +1 -1
- package/dist/server/modules/auth/auth.resolver.js +3 -3
- package/dist/server/modules/auth/auth.resolver.js.map +1 -1
- package/dist/server/modules/auth/inputs/auth-sign-in.input.js +2 -2
- package/dist/server/modules/auth/inputs/auth-sign-in.input.js.map +1 -1
- package/dist/server/modules/auth/inputs/auth-sign-up.input.js +4 -4
- package/dist/server/modules/auth/inputs/auth-sign-up.input.js.map +1 -1
- package/dist/server/modules/file/file-info.model.js +2 -2
- package/dist/server/modules/file/file-info.model.js.map +1 -1
- package/dist/server/modules/file/file.controller.js +5 -5
- package/dist/server/modules/file/file.controller.js.map +1 -1
- package/dist/server/modules/file/file.resolver.js +5 -5
- package/dist/server/modules/file/file.resolver.js.map +1 -1
- package/dist/server/modules/user/avatar.controller.js +2 -2
- package/dist/server/modules/user/avatar.controller.js.map +1 -1
- package/dist/server/modules/user/inputs/user-create.input.js +2 -2
- package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
- package/dist/server/modules/user/inputs/user.input.js +2 -2
- package/dist/server/modules/user/inputs/user.input.js.map +1 -1
- package/dist/server/modules/user/outputs/find-and-count-users-result.output.js +4 -4
- package/dist/server/modules/user/outputs/find-and-count-users-result.output.js.map +1 -1
- package/dist/server/modules/user/user.model.js +8 -8
- package/dist/server/modules/user/user.model.js.map +1 -1
- package/dist/server/modules/user/user.resolver.d.ts +1 -1
- package/dist/server/modules/user/user.resolver.js +11 -11
- package/dist/server/modules/user/user.resolver.js.map +1 -1
- package/dist/server/modules/user/user.service.d.ts +1 -1
- package/dist/server/server.controller.js +2 -2
- package/dist/server/server.controller.js.map +1 -1
- package/dist/test/test.helper.d.ts +14 -14
- package/dist/test/test.helper.js +13 -3
- package/dist/test/test.helper.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +22 -19
- package/src/core/common/args/filter.args.ts +2 -2
- package/src/core/common/args/pagination.args.ts +5 -5
- package/src/core/common/decorators/graphql-service-options.decorator.ts +1 -1
- package/src/core/common/decorators/graphql-user.decorator.ts +1 -1
- package/src/core/common/decorators/rest-user.decorator.ts +1 -1
- package/src/core/common/helpers/config.helper.ts +22 -21
- package/src/core/common/helpers/db.helper.ts +164 -164
- package/src/core/common/helpers/file.helper.ts +18 -18
- package/src/core/common/helpers/filter.helper.ts +35 -35
- package/src/core/common/helpers/graphql.helper.ts +100 -100
- package/src/core/common/helpers/input.helper.ts +89 -89
- package/src/core/common/helpers/model.helper.ts +70 -70
- package/src/core/common/helpers/service.helper.ts +3 -3
- package/src/core/common/helpers/table.helper.ts +1 -1
- package/src/core/common/inputs/combined-filter.input.ts +5 -5
- package/src/core/common/inputs/filter.input.ts +5 -5
- package/src/core/common/inputs/single-filter.input.ts +9 -9
- package/src/core/common/inputs/sort.input.ts +3 -3
- package/src/core/common/interfaces/server-options.interface.ts +9 -9
- package/src/core/common/models/core-persistence.model.ts +8 -8
- package/src/core/common/plugins/mongoose-id.plugin.js +2 -2
- package/src/core/common/scalars/any.scalar.ts +8 -8
- package/src/core/common/scalars/date-timestamp.scalar.ts +1 -1
- package/src/core/common/scalars/date.scalar.ts +1 -1
- package/src/core/common/scalars/json.scalar.ts +8 -8
- package/src/core/common/services/config.service.ts +7 -7
- package/src/core/common/services/crud.service.ts +19 -19
- package/src/core/common/services/mailjet.service.ts +1 -1
- package/src/core/common/services/module.service.ts +4 -4
- package/src/core/common/types/falsy.type.ts +1 -1
- package/src/core/common/types/id.type.ts +1 -1
- package/src/core/common/types/require-only-one.type.ts +3 -3
- package/src/core/common/types/required-at-least-one.type.ts +3 -3
- package/src/core/common/types/string-or-object-id.type.ts +1 -1
- package/src/core/modules/auth/core-auth.controller.ts +6 -6
- package/src/core/modules/auth/core-auth.model.ts +1 -1
- package/src/core/modules/auth/core-auth.module.ts +4 -4
- package/src/core/modules/auth/core-auth.resolver.ts +6 -6
- package/src/core/modules/auth/guards/auth.guard.ts +3 -3
- package/src/core/modules/auth/inputs/core-auth-sign-in.input.ts +1 -1
- package/src/core/modules/auth/inputs/core-auth-sign-up.input.ts +1 -1
- package/src/core/modules/auth/services/core-auth.service.ts +1 -1
- package/src/core/modules/auth/tokens.decorator.ts +2 -2
- package/src/core/modules/file/core-file-info.model.ts +7 -7
- package/src/core/modules/file/core-file.controller.ts +2 -2
- package/src/core/modules/file/core-file.resolver.ts +6 -6
- package/src/core/modules/file/core-file.service.ts +6 -6
- package/src/core/modules/health-check/core-health-check-result.model.ts +8 -8
- package/src/core/modules/health-check/core-health-check.controller.ts +2 -2
- package/src/core/modules/health-check/core-health-check.resolver.ts +2 -2
- package/src/core/modules/user/core-user.model.ts +11 -11
- package/src/core/modules/user/core-user.service.ts +2 -2
- package/src/core/modules/user/inputs/core-user-create.input.ts +2 -2
- package/src/core/modules/user/inputs/core-user.input.ts +9 -9
- package/src/index.ts +9 -9
- package/src/server/common/models/persistence.model.ts +8 -8
- package/src/server/modules/auth/auth.controller.ts +1 -1
- package/src/server/modules/auth/auth.model.ts +2 -2
- package/src/server/modules/auth/auth.resolver.ts +3 -3
- package/src/server/modules/auth/inputs/auth-sign-in.input.ts +1 -1
- package/src/server/modules/auth/inputs/auth-sign-up.input.ts +3 -3
- package/src/server/modules/file/file-info.model.ts +2 -2
- package/src/server/modules/file/file.controller.ts +5 -5
- package/src/server/modules/file/file.module.ts +1 -1
- package/src/server/modules/file/file.resolver.ts +5 -5
- package/src/server/modules/user/avatar.controller.ts +2 -2
- package/src/server/modules/user/inputs/user-create.input.ts +1 -1
- package/src/server/modules/user/inputs/user.input.ts +1 -1
- package/src/server/modules/user/outputs/find-and-count-users-result.output.ts +3 -3
- package/src/server/modules/user/user.model.ts +8 -8
- package/src/server/modules/user/user.resolver.ts +11 -11
- package/src/server/modules/user/user.service.ts +1 -1
- package/src/server/server.controller.ts +2 -2
- 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
|
-
@
|
|
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'),
|
package/src/test/test.helper.ts
CHANGED
|
@@ -23,13 +23,18 @@ export enum TestGraphQLType {
|
|
|
23
23
|
* GraphQL fields
|
|
24
24
|
*/
|
|
25
25
|
export interface TestFieldObject {
|
|
26
|
-
[key: string]: (
|
|
26
|
+
[key: string]: (string | TestFieldObject)[] | boolean | TestFieldObject;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* GraphQL fields
|
|
31
31
|
*/
|
|
32
|
-
export type TestFields =
|
|
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 }
|
|
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:
|
|
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 = `(
|
|
306
|
+
const regExpStr = `(?<=${key}:\\s*)"([A-Z0-9_]+)"(?=\\s*[,\\]}])`;
|
|
307
307
|
const regExp = new RegExp(regExpStr, 'g');
|
|
308
|
-
query = query.replace(regExp,
|
|
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(/([
|
|
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
|
|