@lenne.tech/nest-server 8.2.0 → 8.4.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.
- package/dist/core/common/decorators/restricted.decorator.d.ts +11 -4
- package/dist/core/common/decorators/restricted.decorator.js +65 -21
- package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
- package/dist/core/common/enums/process-type.enum.d.ts +4 -0
- package/dist/core/common/enums/process-type.enum.js +9 -0
- package/dist/core/common/enums/process-type.enum.js.map +1 -0
- package/dist/core/common/enums/role.enum.d.ts +2 -2
- package/dist/core/common/enums/role.enum.js +2 -2
- package/dist/core/common/enums/role.enum.js.map +1 -1
- package/dist/core/common/helpers/db.helper.d.ts +5 -3
- package/dist/core/common/helpers/db.helper.js +36 -25
- package/dist/core/common/helpers/db.helper.js.map +1 -1
- package/dist/core/common/helpers/input.helper.d.ts +6 -3
- package/dist/core/common/helpers/input.helper.js +4 -12
- package/dist/core/common/helpers/input.helper.js.map +1 -1
- package/dist/core/common/interfaces/service-options.interface.d.ts +0 -2
- package/dist/core/common/models/core-persistence.model.d.ts +0 -1
- package/dist/core/common/models/core-persistence.model.js +0 -10
- package/dist/core/common/models/core-persistence.model.js.map +1 -1
- package/dist/core/common/services/module.service.d.ts +3 -2
- package/dist/core/common/services/module.service.js +13 -14
- package/dist/core/common/services/module.service.js.map +1 -1
- package/dist/core/common/types/require-only-one.type.d.ts +3 -0
- package/dist/core/common/types/require-only-one.type.js +3 -0
- package/dist/core/common/types/require-only-one.type.js.map +1 -0
- package/dist/core/common/types/required-at-least-one.type.d.ts +3 -0
- package/dist/core/common/types/required-at-least-one.type.js +3 -0
- package/dist/core/common/types/required-at-least-one.type.js.map +1 -0
- package/dist/core/modules/auth/guards/roles.guard.js +1 -2
- package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
- package/dist/core/modules/user/core-user.service.js +1 -6
- package/dist/core/modules/user/core-user.service.js.map +1 -1
- package/dist/core.module.js +0 -5
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/server/modules/user/avatar.controller.js +1 -1
- package/dist/server/modules/user/avatar.controller.js.map +1 -1
- package/dist/server/modules/user/user.model.d.ts +1 -1
- package/dist/server/modules/user/user.model.js +1 -1
- package/dist/server/modules/user/user.model.js.map +1 -1
- package/dist/server/modules/user/user.resolver.js +6 -6
- package/dist/server/modules/user/user.resolver.js.map +1 -1
- package/dist/server/modules/user/user.service.js +5 -1
- package/dist/server/modules/user/user.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/core/common/decorators/restricted.decorator.ts +109 -42
- package/src/core/common/enums/process-type.enum.ts +7 -0
- package/src/core/common/enums/role.enum.ts +21 -6
- package/src/core/common/helpers/db.helper.ts +58 -51
- package/src/core/common/helpers/input.helper.ts +24 -13
- package/src/core/common/interfaces/service-options.interface.ts +2 -6
- package/src/core/common/models/core-persistence.model.ts +0 -11
- package/src/core/common/services/module.service.ts +16 -15
- package/src/core/common/types/require-only-one.type.ts +6 -0
- package/src/core/common/types/required-at-least-one.type.ts +6 -0
- package/src/core/modules/auth/guards/roles.guard.ts +4 -6
- package/src/core/modules/user/core-user.service.ts +1 -6
- package/src/core.module.ts +1 -19
- package/src/index.ts +3 -0
- package/src/server/modules/user/avatar.controller.ts +1 -1
- package/src/server/modules/user/user.model.ts +2 -2
- package/src/server/modules/user/user.resolver.ts +6 -6
- package/src/server/modules/user/user.service.ts +8 -1
|
@@ -35,7 +35,7 @@ export abstract class CoreUserService<
|
|
|
35
35
|
* Create user
|
|
36
36
|
*/
|
|
37
37
|
async create(input: any, serviceOptions?: ServiceOptions): Promise<TUser> {
|
|
38
|
-
merge({ prepareInput: { create: true } }, serviceOptions);
|
|
38
|
+
serviceOptions = merge({ prepareInput: { create: true } }, serviceOptions);
|
|
39
39
|
return this.process(
|
|
40
40
|
async (data) => {
|
|
41
41
|
// Create user with verification token
|
|
@@ -47,11 +47,6 @@ export abstract class CoreUserService<
|
|
|
47
47
|
// Distinguish between different error messages when saving
|
|
48
48
|
try {
|
|
49
49
|
await createdUser.save();
|
|
50
|
-
if (!createdUser.ownerIds) {
|
|
51
|
-
createdUser.ownerIds = [];
|
|
52
|
-
}
|
|
53
|
-
createdUser.ownerIds.push(createdUser.id);
|
|
54
|
-
await createdUser.save();
|
|
55
50
|
} catch (error) {
|
|
56
51
|
if (error.code === 11000) {
|
|
57
52
|
throw new UnprocessableEntityException(
|
package/src/core.module.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { DynamicModule, Global, Module, UnauthorizedException } from '@nestjs/common';
|
|
2
|
-
import {
|
|
2
|
+
import { APP_PIPE } from '@nestjs/core';
|
|
3
3
|
import { GraphQLModule } from '@nestjs/graphql';
|
|
4
4
|
import { merge } from './core/common/helpers/config.helper';
|
|
5
|
-
import { CheckResponseInterceptor } from './core/common/interceptors/check-response.interceptor';
|
|
6
5
|
import { IServerOptions } from './core/common/interfaces/server-options.interface';
|
|
7
6
|
import { MapAndValidatePipe } from './core/common/pipes/map-and-validate.pipe';
|
|
8
7
|
import { ConfigService } from './core/common/services/config.service';
|
|
@@ -19,8 +18,6 @@ import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
|
|
|
19
18
|
* - MongooseModule
|
|
20
19
|
* - GraphQL
|
|
21
20
|
* - ConfigService
|
|
22
|
-
* - CheckInput
|
|
23
|
-
* - CheckResponse
|
|
24
21
|
*
|
|
25
22
|
* and sets the following services as globals:
|
|
26
23
|
* - ConfigService
|
|
@@ -99,21 +96,6 @@ export class CoreModule {
|
|
|
99
96
|
useValue: new ConfigService(config),
|
|
100
97
|
},
|
|
101
98
|
|
|
102
|
-
// [Global] The CheckResponseInterceptor restricts the response to the properties
|
|
103
|
-
// that are permitted for the current user
|
|
104
|
-
{
|
|
105
|
-
provide: APP_INTERCEPTOR,
|
|
106
|
-
useClass: CheckResponseInterceptor,
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
// [Global] The CheckInputPipe checks the permissibility of individual properties of inputs for the resolvers
|
|
110
|
-
// in relation to the current user, replaces MapAndValidatePipe
|
|
111
|
-
// Does not work yet, because context is missing: https://github.com/nestjs/graphql/issues/325
|
|
112
|
-
// {
|
|
113
|
-
// provide: APP_PIPE,
|
|
114
|
-
// useClass: CheckInputPipe,
|
|
115
|
-
// },
|
|
116
|
-
|
|
117
99
|
// [Global] Map plain objects to metatype and validate
|
|
118
100
|
{
|
|
119
101
|
provide: APP_PIPE,
|
package/src/index.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './core/common/decorators/restricted.decorator';
|
|
|
15
15
|
export * from './core/common/decorators/roles.decorator';
|
|
16
16
|
export * from './core/common/enums/comparison-operator.enum';
|
|
17
17
|
export * from './core/common/enums/logical-operator.enum';
|
|
18
|
+
export * from './core/common/enums/process-type.enum';
|
|
18
19
|
export * from './core/common/enums/role.enum';
|
|
19
20
|
export * from './core/common/enums/sort-order.emum';
|
|
20
21
|
export * from './core/common/helpers/config.helper';
|
|
@@ -54,6 +55,8 @@ export * from './core/common/types/core-model-constructor.type';
|
|
|
54
55
|
export * from './core/common/types/field-selection.type';
|
|
55
56
|
export * from './core/common/types/ids.type';
|
|
56
57
|
export * from './core/common/types/plain-input.type';
|
|
58
|
+
export * from './core/common/types/require-only-one.type';
|
|
59
|
+
export * from './core/common/types/required-at-least-one.type';
|
|
57
60
|
export * from './core/common/types/string-or-object-id.type';
|
|
58
61
|
|
|
59
62
|
// =====================================================================================================================
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Field, ObjectType } from '@nestjs/graphql';
|
|
2
|
+
import { Prop, Schema as MongooseSchema, SchemaFactory } from '@nestjs/mongoose';
|
|
3
|
+
import { Document, Schema } from 'mongoose';
|
|
2
4
|
import { CoreUserModel } from '../../../core/modules/user/core-user.model';
|
|
3
5
|
import { PersistenceModel } from '../../common/models/persistence.model';
|
|
4
|
-
import { Prop, Schema as MongooseSchema, SchemaFactory } from '@nestjs/mongoose';
|
|
5
|
-
import { Schema, Document } from 'mongoose';
|
|
6
6
|
|
|
7
7
|
export type UserDocument = User & Document;
|
|
8
8
|
|
|
@@ -40,13 +40,13 @@ export class UserResolver {
|
|
|
40
40
|
/**
|
|
41
41
|
* Get user via ID
|
|
42
42
|
*/
|
|
43
|
-
@Roles(RoleEnum.
|
|
43
|
+
@Roles(RoleEnum.S_USER)
|
|
44
44
|
@Query((returns) => User, { description: 'Get user with specified ID' })
|
|
45
45
|
async getUser(@Args('id') id: string, @Info() info: GraphQLResolveInfo, @GraphQLUser() user: User): Promise<User> {
|
|
46
46
|
return await this.userService.get(id, {
|
|
47
47
|
currentUser: user,
|
|
48
48
|
fieldSelection: { info, select: 'getUser' },
|
|
49
|
-
roles: [RoleEnum.
|
|
49
|
+
roles: [RoleEnum.ADMIN, RoleEnum.S_CREATOR],
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -89,13 +89,13 @@ export class UserResolver {
|
|
|
89
89
|
/**
|
|
90
90
|
* Delete existing user
|
|
91
91
|
*/
|
|
92
|
-
@Roles(RoleEnum.
|
|
92
|
+
@Roles(RoleEnum.S_USER)
|
|
93
93
|
@Mutation((returns) => User, { description: 'Delete existing user' })
|
|
94
94
|
async deleteUser(@Args('id') id: string, @Info() info: GraphQLResolveInfo, @GraphQLUser() user: User): Promise<User> {
|
|
95
95
|
return await this.userService.delete(id, {
|
|
96
96
|
currentUser: user,
|
|
97
97
|
fieldSelection: { info, select: 'deleteUser' },
|
|
98
|
-
roles: [RoleEnum.ADMIN, RoleEnum.
|
|
98
|
+
roles: [RoleEnum.ADMIN, RoleEnum.S_CREATOR],
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -110,7 +110,7 @@ export class UserResolver {
|
|
|
110
110
|
/**
|
|
111
111
|
* Update existing user
|
|
112
112
|
*/
|
|
113
|
-
@Roles(RoleEnum.
|
|
113
|
+
@Roles(RoleEnum.S_USER)
|
|
114
114
|
@Mutation((returns) => User, { description: 'Update existing user' })
|
|
115
115
|
async updateUser(
|
|
116
116
|
@Args('input') input: UserInput,
|
|
@@ -123,7 +123,7 @@ export class UserResolver {
|
|
|
123
123
|
currentUser: user,
|
|
124
124
|
fieldSelection: { info, select: 'updateUser' },
|
|
125
125
|
inputType: UserInput,
|
|
126
|
-
roles: [RoleEnum.ADMIN, RoleEnum.
|
|
126
|
+
roles: [RoleEnum.ADMIN, RoleEnum.S_CREATOR],
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -44,7 +44,14 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
|
|
|
44
44
|
*/
|
|
45
45
|
async create(input: UserCreateInput, serviceOptions?: ServiceOptions): Promise<User> {
|
|
46
46
|
// Get prepared user
|
|
47
|
-
|
|
47
|
+
let user = await super.create(input, serviceOptions);
|
|
48
|
+
|
|
49
|
+
// Add the createdBy information in an extra step if it was not set by the system because the user created himself
|
|
50
|
+
// and could not exist as currentUser before
|
|
51
|
+
if (!user.createdBy) {
|
|
52
|
+
await this.mainDbModel.findByIdAndUpdate(user.id, { createdBy: user.id });
|
|
53
|
+
user = await this.get(user.id, { ...serviceOptions, currentUser: serviceOptions.currentUser || user });
|
|
54
|
+
}
|
|
48
55
|
|
|
49
56
|
// Publish action
|
|
50
57
|
if (serviceOptions?.pubSub === undefined || serviceOptions.pubSub) {
|