@lenne.tech/nest-server 10.2.6 → 10.2.8
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/config.env.js +75 -75
- package/dist/config.env.js.map +1 -1
- package/dist/core/common/args/filter.args.js +1 -1
- package/dist/core/common/args/filter.args.js.map +1 -1
- package/dist/core/common/args/pagination.args.js.map +1 -1
- package/dist/core/common/decorators/current-user.decorator.js.map +1 -1
- package/dist/core/common/decorators/graphql-populate.decorator.js.map +1 -1
- package/dist/core/common/decorators/graphql-service-options.decorator.js.map +1 -1
- package/dist/core/common/decorators/restricted.decorator.d.ts +4 -4
- package/dist/core/common/decorators/restricted.decorator.js +2 -2
- package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
- package/dist/core/common/enums/comparison-operator.enum.js +1 -1
- package/dist/core/common/enums/comparison-operator.enum.js.map +1 -1
- package/dist/core/common/enums/logical-operator.enum.js +1 -1
- package/dist/core/common/enums/logical-operator.enum.js.map +1 -1
- package/dist/core/common/enums/role.enum.d.ts +3 -3
- 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/enums/sort-order.emum.js +1 -1
- package/dist/core/common/enums/sort-order.emum.js.map +1 -1
- package/dist/core/common/filters/http-exception-log.filter.js.map +1 -1
- package/dist/core/common/helpers/config.helper.js.map +1 -1
- package/dist/core/common/helpers/context.helper.js +1 -1
- package/dist/core/common/helpers/context.helper.js.map +1 -1
- package/dist/core/common/helpers/db.helper.d.ts +28 -4
- package/dist/core/common/helpers/db.helper.js +4 -4
- package/dist/core/common/helpers/db.helper.js.map +1 -1
- package/dist/core/common/helpers/decorator.helper.d.ts +24 -0
- package/dist/core/common/helpers/decorator.helper.js.map +1 -1
- package/dist/core/common/helpers/file.helper.js +1 -1
- package/dist/core/common/helpers/file.helper.js.map +1 -1
- package/dist/core/common/helpers/filter.helper.d.ts +26 -2
- package/dist/core/common/helpers/filter.helper.js +3 -3
- package/dist/core/common/helpers/filter.helper.js.map +1 -1
- package/dist/core/common/helpers/graphql.helper.d.ts +2 -2
- package/dist/core/common/helpers/graphql.helper.js +1 -1
- package/dist/core/common/helpers/graphql.helper.js.map +1 -1
- package/dist/core/common/helpers/input.helper.d.ts +3 -3
- package/dist/core/common/helpers/input.helper.js +5 -5
- package/dist/core/common/helpers/input.helper.js.map +1 -1
- package/dist/core/common/helpers/model.helper.d.ts +2 -2
- package/dist/core/common/helpers/model.helper.js +3 -3
- package/dist/core/common/helpers/model.helper.js.map +1 -1
- package/dist/core/common/helpers/service.helper.d.ts +6 -6
- package/dist/core/common/helpers/service.helper.js +5 -5
- package/dist/core/common/helpers/service.helper.js.map +1 -1
- package/dist/core/common/helpers/table.helper.d.ts +9 -0
- package/dist/core/common/helpers/table.helper.js +28 -0
- package/dist/core/common/helpers/table.helper.js.map +1 -0
- package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
- package/dist/core/common/inputs/filter.input.js.map +1 -1
- package/dist/core/common/inputs/single-filter.input.js.map +1 -1
- package/dist/core/common/inputs/sort.input.js.map +1 -1
- package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
- package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
- package/dist/core/common/interfaces/core-persistence-model.interface.d.ts +3 -3
- package/dist/core/common/interfaces/mailjet-options.interface.d.ts +1 -1
- package/dist/core/common/interfaces/prepare-input-options.interface.d.ts +1 -1
- package/dist/core/common/interfaces/server-options.interface.d.ts +15 -7
- package/dist/core/common/interfaces/service-options.interface.d.ts +31 -5
- package/dist/core/common/models/core-model.model.js.map +1 -1
- package/dist/core/common/models/core-persistence.model.d.ts +24 -0
- package/dist/core/common/models/core-persistence.model.js.map +1 -1
- package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
- package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
- package/dist/core/common/plugins/complexity.plugin.js +4 -4
- package/dist/core/common/plugins/complexity.plugin.js.map +1 -1
- package/dist/core/common/plugins/mongoose-id.plugin.js.map +1 -1
- package/dist/core/common/scalars/any.scalar.js.map +1 -1
- package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
- package/dist/core/common/scalars/date.scalar.js.map +1 -1
- package/dist/core/common/scalars/json.scalar.js.map +1 -1
- package/dist/core/common/services/brevo.service.d.ts +10 -0
- package/dist/core/common/services/brevo.service.js +75 -0
- package/dist/core/common/services/brevo.service.js.map +1 -0
- package/dist/core/common/services/config.service.js +1 -1
- package/dist/core/common/services/config.service.js.map +1 -1
- package/dist/core/common/services/core-cron-jobs.service.d.ts +2 -2
- package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
- package/dist/core/common/services/crud.service.d.ts +63 -32
- package/dist/core/common/services/crud.service.js +59 -21
- package/dist/core/common/services/crud.service.js.map +1 -1
- package/dist/core/common/services/email.service.js +5 -5
- package/dist/core/common/services/email.service.js.map +1 -1
- package/dist/core/common/services/mailjet.service.d.ts +4 -4
- package/dist/core/common/services/mailjet.service.js +8 -8
- package/dist/core/common/services/mailjet.service.js.map +1 -1
- package/dist/core/common/services/model-doc.service.d.ts +24 -0
- package/dist/core/common/services/model-doc.service.js +1 -1
- package/dist/core/common/services/model-doc.service.js.map +1 -1
- package/dist/core/common/services/module.service.d.ts +28 -4
- package/dist/core/common/services/module.service.js +23 -7
- package/dist/core/common/services/module.service.js.map +1 -1
- package/dist/core/common/services/template.service.js +3 -3
- package/dist/core/common/services/template.service.js.map +1 -1
- package/dist/core/common/types/core-model-constructor.type.d.ts +1 -1
- package/dist/core/common/types/falsy.type.d.ts +1 -1
- package/dist/core/common/types/field-selection.type.d.ts +25 -1
- package/dist/core/common/types/ids.type.d.ts +31 -7
- package/dist/core/common/types/maybe-promise.type.d.ts +1 -1
- package/dist/core/common/types/plain-input.type.d.ts +1 -1
- package/dist/core/common/types/populate-config.type.d.ts +25 -1
- package/dist/core/common/types/string-or-object-id.type.d.ts +25 -1
- package/dist/core/modules/auth/core-auth.controller.js +1 -1
- package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
- package/dist/core/modules/auth/core-auth.model.js.map +1 -1
- package/dist/core/modules/auth/core-auth.module.d.ts +5 -5
- package/dist/core/modules/auth/core-auth.module.js +5 -5
- package/dist/core/modules/auth/core-auth.module.js.map +1 -1
- package/dist/core/modules/auth/core-auth.resolver.js +1 -1
- package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
- package/dist/core/modules/auth/guards/auth.guard.d.ts +1 -1
- package/dist/core/modules/auth/guards/auth.guard.js +1 -1
- package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
- package/dist/core/modules/auth/guards/refresh-token.guard.js.map +1 -1
- package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
- 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.map +1 -1
- package/dist/core/modules/auth/interfaces/core-auth-user.interface.d.ts +1 -1
- package/dist/core/modules/auth/interfaces/core-token-data.interface.d.ts +1 -1
- package/dist/core/modules/auth/interfaces/jwt-payload.interface.d.ts +1 -1
- package/dist/core/modules/auth/services/core-auth.service.d.ts +1 -1
- package/dist/core/modules/auth/services/core-auth.service.js +10 -10
- package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
- package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js +1 -1
- package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js.map +1 -1
- package/dist/core/modules/auth/strategies/jwt.strategy.js.map +1 -1
- package/dist/core/modules/auth/tokens.decorator.js +1 -1
- package/dist/core/modules/auth/tokens.decorator.js.map +1 -1
- package/dist/core/modules/file/core-file-info.model.d.ts +24 -0
- package/dist/core/modules/file/core-file-info.model.js +5 -5
- package/dist/core/modules/file/core-file-info.model.js.map +1 -1
- package/dist/core/modules/file/core-file.controller.js.map +1 -1
- package/dist/core/modules/file/core-file.resolver.js +1 -1
- package/dist/core/modules/file/core-file.resolver.js.map +1 -1
- package/dist/core/modules/file/core-file.service.d.ts +30 -6
- package/dist/core/modules/file/core-file.service.js +3 -3
- package/dist/core/modules/file/core-file.service.js.map +1 -1
- package/dist/core/modules/file/interfaces/file-service-options.interface.d.ts +1 -1
- package/dist/core/modules/file/interfaces/file-upload.interface.d.ts +2 -2
- 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.map +1 -1
- package/dist/core/modules/health-check/core-health-check.module.js +1 -1
- package/dist/core/modules/health-check/core-health-check.module.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/health-check/core-health-check.service.js +1 -1
- package/dist/core/modules/health-check/core-health-check.service.js.map +1 -1
- package/dist/core/modules/user/core-user.model.d.ts +24 -0
- package/dist/core/modules/user/core-user.model.js +1 -1
- package/dist/core/modules/user/core-user.model.js.map +1 -1
- package/dist/core/modules/user/core-user.service.d.ts +25 -1
- package/dist/core/modules/user/core-user.service.js +3 -3
- package/dist/core/modules/user/core-user.service.js.map +1 -1
- package/dist/core/modules/user/inputs/core-user-create.input.js +1 -1
- package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
- package/dist/core/modules/user/inputs/core-user.input.js +1 -1
- package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
- package/dist/core.module.js +20 -20
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.js +3 -3
- package/dist/main.js.map +1 -1
- package/dist/server/common/models/persistence.model.d.ts +24 -0
- package/dist/server/common/models/persistence.model.js +4 -4
- package/dist/server/common/models/persistence.model.js.map +1 -1
- package/dist/server/common/services/cron-jobs.service.js.map +1 -1
- package/dist/server/modules/auth/auth.controller.js.map +1 -1
- package/dist/server/modules/auth/auth.model.js.map +1 -1
- package/dist/server/modules/auth/auth.module.js +2 -2
- package/dist/server/modules/auth/auth.module.js.map +1 -1
- package/dist/server/modules/auth/auth.resolver.js.map +1 -1
- package/dist/server/modules/auth/auth.service.js +1 -1
- package/dist/server/modules/auth/auth.service.js.map +1 -1
- 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.map +1 -1
- package/dist/server/modules/file/file-info.model.js.map +1 -1
- package/dist/server/modules/file/file.controller.js.map +1 -1
- package/dist/server/modules/file/file.module.js +2 -2
- package/dist/server/modules/file/file.module.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/file/file.service.d.ts +24 -0
- package/dist/server/modules/file/file.service.js.map +1 -1
- package/dist/server/modules/file/multer-config.service.js +2 -2
- package/dist/server/modules/file/multer-config.service.js.map +1 -1
- package/dist/server/modules/user/avatar.controller.js.map +1 -1
- package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
- 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.map +1 -1
- package/dist/server/modules/user/user.model.js +2 -2
- package/dist/server/modules/user/user.model.js.map +1 -1
- package/dist/server/modules/user/user.module.js +2 -2
- package/dist/server/modules/user/user.module.js.map +1 -1
- package/dist/server/modules/user/user.resolver.d.ts +1 -1
- package/dist/server/modules/user/user.resolver.js +1 -1
- package/dist/server/modules/user/user.resolver.js.map +1 -1
- package/dist/server/modules/user/user.service.d.ts +25 -1
- package/dist/server/modules/user/user.service.js +2 -2
- package/dist/server/modules/user/user.service.js.map +1 -1
- package/dist/server/server.controller.js.map +1 -1
- package/dist/server/server.module.js +2 -2
- package/dist/server/server.module.js.map +1 -1
- package/dist/test/test.helper.d.ts +13 -13
- package/dist/test/test.helper.js +15 -15
- package/dist/test/test.helper.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +35 -34
- package/src/config.env.ts +79 -78
- package/src/core/common/args/filter.args.ts +2 -1
- package/src/core/common/args/pagination.args.ts +1 -0
- package/src/core/common/decorators/current-user.decorator.ts +1 -0
- package/src/core/common/decorators/graphql-populate.decorator.ts +1 -0
- package/src/core/common/decorators/graphql-service-options.decorator.ts +1 -0
- package/src/core/common/decorators/restricted.decorator.ts +7 -5
- package/src/core/common/enums/comparison-operator.enum.ts +1 -1
- package/src/core/common/enums/logical-operator.enum.ts +1 -1
- package/src/core/common/enums/role.enum.ts +6 -6
- package/src/core/common/enums/sort-order.emum.ts +1 -1
- package/src/core/common/helpers/context.helper.ts +1 -1
- package/src/core/common/helpers/db.helper.ts +14 -12
- package/src/core/common/helpers/decorator.helper.ts +1 -0
- package/src/core/common/helpers/file.helper.ts +1 -1
- package/src/core/common/helpers/filter.helper.ts +6 -5
- package/src/core/common/helpers/graphql.helper.ts +7 -6
- package/src/core/common/helpers/input.helper.ts +10 -8
- package/src/core/common/helpers/model.helper.ts +6 -5
- package/src/core/common/helpers/service.helper.ts +13 -11
- package/src/core/common/helpers/table.helper.ts +37 -0
- package/src/core/common/inputs/combined-filter.input.ts +1 -0
- package/src/core/common/inputs/filter.input.ts +1 -0
- package/src/core/common/inputs/single-filter.input.ts +1 -0
- package/src/core/common/inputs/sort.input.ts +1 -0
- package/src/core/common/interceptors/check-response.interceptor.ts +1 -0
- package/src/core/common/interceptors/check-security.interceptor.ts +1 -0
- package/src/core/common/interfaces/core-persistence-model.interface.ts +3 -3
- package/src/core/common/interfaces/cron-job-config-with-time-zone.interface.ts +1 -0
- package/src/core/common/interfaces/cron-job-config-with-utc-offset.interface.ts +1 -0
- package/src/core/common/interfaces/mailjet-options.interface.ts +1 -1
- package/src/core/common/interfaces/prepare-input-options.interface.ts +1 -1
- package/src/core/common/interfaces/server-options.interface.ts +49 -23
- package/src/core/common/interfaces/service-options.interface.ts +31 -16
- package/src/core/common/models/core-persistence.model.ts +1 -0
- package/src/core/common/pipes/check-input.pipe.ts +1 -0
- package/src/core/common/pipes/map-and-validate.pipe.ts +1 -0
- package/src/core/common/plugins/complexity.plugin.ts +5 -4
- package/src/core/common/scalars/date-timestamp.scalar.ts +1 -0
- package/src/core/common/scalars/date.scalar.ts +1 -0
- package/src/core/common/services/brevo.service.ts +93 -0
- package/src/core/common/services/config.service.ts +3 -1
- package/src/core/common/services/core-cron-jobs.service.ts +3 -2
- package/src/core/common/services/crud.service.ts +113 -41
- package/src/core/common/services/email.service.ts +7 -5
- package/src/core/common/services/mailjet.service.ts +14 -13
- package/src/core/common/services/model-doc.service.ts +2 -1
- package/src/core/common/services/module.service.ts +33 -13
- package/src/core/common/services/template.service.ts +5 -3
- package/src/core/common/types/core-model-constructor.type.ts +1 -1
- package/src/core/common/types/falsy.type.ts +1 -1
- package/src/core/common/types/field-selection.type.ts +4 -3
- package/src/core/common/types/ids.type.ts +3 -3
- package/src/core/common/types/maybe-promise.type.ts +1 -1
- package/src/core/common/types/plain-input.type.ts +1 -1
- package/src/core/common/types/populate-config.type.ts +1 -1
- package/src/core/common/types/string-or-object-id.type.ts +1 -1
- package/src/core/modules/auth/core-auth.controller.ts +2 -1
- package/src/core/modules/auth/core-auth.model.ts +1 -0
- package/src/core/modules/auth/core-auth.module.ts +8 -7
- package/src/core/modules/auth/core-auth.resolver.ts +2 -1
- package/src/core/modules/auth/guards/auth.guard.ts +4 -2
- package/src/core/modules/auth/guards/refresh-token.guard.ts +1 -0
- package/src/core/modules/auth/guards/roles.guard.ts +1 -0
- package/src/core/modules/auth/inputs/core-auth-sign-in.input.ts +1 -0
- package/src/core/modules/auth/inputs/core-auth-sign-up.input.ts +1 -0
- package/src/core/modules/auth/interfaces/core-auth-user.interface.ts +4 -4
- package/src/core/modules/auth/interfaces/core-token-data.interface.ts +4 -4
- package/src/core/modules/auth/interfaces/jwt-payload.interface.ts +1 -1
- package/src/core/modules/auth/services/core-auth.service.ts +13 -11
- package/src/core/modules/auth/strategies/jwt-refresh.strategy.ts +3 -2
- package/src/core/modules/auth/strategies/jwt.strategy.ts +3 -2
- package/src/core/modules/auth/tokens.decorator.ts +4 -3
- package/src/core/modules/file/core-file-info.model.ts +6 -5
- package/src/core/modules/file/core-file.controller.ts +1 -0
- package/src/core/modules/file/core-file.resolver.ts +2 -1
- package/src/core/modules/file/core-file.service.ts +9 -8
- package/src/core/modules/file/interfaces/file-service-options.interface.ts +1 -1
- package/src/core/modules/file/interfaces/file-upload.interface.ts +2 -2
- package/src/core/modules/health-check/core-health-check-result.model.ts +1 -0
- package/src/core/modules/health-check/core-health-check.controller.ts +1 -0
- package/src/core/modules/health-check/core-health-check.module.ts +2 -1
- package/src/core/modules/health-check/core-health-check.resolver.ts +3 -2
- package/src/core/modules/health-check/core-health-check.service.ts +2 -1
- package/src/core/modules/user/core-user.model.ts +2 -1
- package/src/core/modules/user/core-user.service.ts +6 -4
- package/src/core/modules/user/inputs/core-user-create.input.ts +2 -1
- package/src/core/modules/user/inputs/core-user.input.ts +2 -1
- package/src/core.module.ts +24 -22
- package/src/index.ts +2 -0
- package/src/main.ts +5 -3
- package/src/server/common/models/persistence.model.ts +7 -5
- package/src/server/common/services/cron-jobs.service.ts +1 -0
- package/src/server/modules/auth/auth.controller.ts +1 -0
- package/src/server/modules/auth/auth.model.ts +1 -0
- package/src/server/modules/auth/auth.module.ts +3 -2
- package/src/server/modules/auth/auth.resolver.ts +1 -0
- package/src/server/modules/auth/auth.service.ts +2 -1
- package/src/server/modules/auth/inputs/auth-sign-in.input.ts +1 -0
- package/src/server/modules/auth/inputs/auth-sign-up.input.ts +1 -0
- package/src/server/modules/file/file-info.model.ts +1 -0
- package/src/server/modules/file/file.controller.ts +1 -0
- package/src/server/modules/file/file.module.ts +3 -2
- package/src/server/modules/file/file.resolver.ts +7 -5
- package/src/server/modules/file/file.service.ts +1 -0
- package/src/server/modules/file/multer-config.service.ts +3 -2
- package/src/server/modules/user/avatar.controller.ts +1 -0
- package/src/server/modules/user/inputs/user-create.input.ts +1 -0
- package/src/server/modules/user/inputs/user.input.ts +1 -0
- package/src/server/modules/user/outputs/find-and-count-users-result.output.ts +1 -0
- package/src/server/modules/user/user.model.ts +3 -2
- package/src/server/modules/user/user.module.ts +3 -2
- package/src/server/modules/user/user.resolver.ts +2 -1
- package/src/server/modules/user/user.service.ts +5 -3
- package/src/server/server.controller.ts +1 -0
- package/src/server/server.module.ts +7 -6
- package/src/test/test.helper.ts +28 -26
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import crypto = require('crypto');
|
|
2
1
|
import { BadRequestException, NotFoundException, UnprocessableEntityException } from '@nestjs/common';
|
|
3
|
-
import bcrypt = require('bcrypt');
|
|
4
2
|
import { sha256 } from 'js-sha256';
|
|
5
3
|
import { Document, Model } from 'mongoose';
|
|
4
|
+
|
|
6
5
|
import { assignPlain, prepareServiceOptionsForCreate } from '../../common/helpers/input.helper';
|
|
7
6
|
import { ServiceOptions } from '../../common/interfaces/service-options.interface';
|
|
8
7
|
import { ConfigService } from '../../common/services/config.service';
|
|
@@ -10,8 +9,11 @@ import { CrudService } from '../../common/services/crud.service';
|
|
|
10
9
|
import { EmailService } from '../../common/services/email.service';
|
|
11
10
|
import { CoreModelConstructor } from '../../common/types/core-model-constructor.type';
|
|
12
11
|
import { CoreUserModel } from './core-user.model';
|
|
13
|
-
import { CoreUserCreateInput } from './inputs/core-user-create.input';
|
|
14
12
|
import { CoreUserInput } from './inputs/core-user.input';
|
|
13
|
+
import { CoreUserCreateInput } from './inputs/core-user-create.input';
|
|
14
|
+
|
|
15
|
+
import bcrypt = require('bcrypt');
|
|
16
|
+
import crypto = require('crypto');
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* User service
|
|
@@ -45,9 +47,9 @@ export abstract class CoreUserService<
|
|
|
45
47
|
const currentUserId = serviceOptions?.currentUser?._id;
|
|
46
48
|
const createdUser = new this.mainDbModel({
|
|
47
49
|
...data.input,
|
|
48
|
-
verificationToken: crypto.randomBytes(32).toString('hex'),
|
|
49
50
|
createdBy: currentUserId,
|
|
50
51
|
updatedBy: currentUserId,
|
|
52
|
+
verificationToken: crypto.randomBytes(32).toString('hex'),
|
|
51
53
|
});
|
|
52
54
|
|
|
53
55
|
// Distinguish between different error messages when saving
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Field, InputType } from '@nestjs/graphql';
|
|
2
2
|
import { IsEmail, IsOptional } from 'class-validator';
|
|
3
|
+
|
|
3
4
|
import { Restricted } from '../../../common/decorators/restricted.decorator';
|
|
4
5
|
import { ProcessType } from '../../../common/enums/process-type.enum';
|
|
5
6
|
import { RoleEnum } from '../../../common/enums/role.enum';
|
|
@@ -39,7 +40,7 @@ export abstract class CoreUserInput extends CoreInput {
|
|
|
39
40
|
/**
|
|
40
41
|
* Roles of the user
|
|
41
42
|
*/
|
|
42
|
-
@Restricted({
|
|
43
|
+
@Restricted({ processType: ProcessType.INPUT, roles: RoleEnum.ADMIN })
|
|
43
44
|
@Field(type => [String], { description: 'Roles of the user', nullable: true })
|
|
44
45
|
@IsOptional()
|
|
45
46
|
roles?: string[] = undefined;
|
package/src/core.module.ts
CHANGED
|
@@ -4,8 +4,8 @@ import { APP_PIPE } from '@nestjs/core';
|
|
|
4
4
|
import { GraphQLModule } from '@nestjs/graphql';
|
|
5
5
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
6
6
|
import { Context } from 'apollo-server-core';
|
|
7
|
-
import graphqlUploadExpress = require('graphql-upload/graphqlUploadExpress.js');
|
|
8
7
|
import mongoose from 'mongoose';
|
|
8
|
+
|
|
9
9
|
import { merge } from './core/common/helpers/config.helper';
|
|
10
10
|
import { IServerOptions } from './core/common/interfaces/server-options.interface';
|
|
11
11
|
import { MapAndValidatePipe } from './core/common/pipes/map-and-validate.pipe';
|
|
@@ -13,9 +13,11 @@ import { ComplexityPlugin } from './core/common/plugins/complexity.plugin';
|
|
|
13
13
|
import { ConfigService } from './core/common/services/config.service';
|
|
14
14
|
import { EmailService } from './core/common/services/email.service';
|
|
15
15
|
import { MailjetService } from './core/common/services/mailjet.service';
|
|
16
|
+
import { ModelDocService } from './core/common/services/model-doc.service';
|
|
16
17
|
import { TemplateService } from './core/common/services/template.service';
|
|
17
18
|
import { CoreHealthCheckModule } from './core/modules/health-check/core-health-check.module';
|
|
18
|
-
|
|
19
|
+
|
|
20
|
+
import graphqlUploadExpress = require('graphql-upload/graphqlUploadExpress.js');
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* Core module (dynamic)
|
|
@@ -88,12 +90,16 @@ export class CoreModule implements NestModule {
|
|
|
88
90
|
cors,
|
|
89
91
|
installSubscriptionHandlers: true,
|
|
90
92
|
subscriptions: {
|
|
91
|
-
'
|
|
92
|
-
|
|
93
|
+
'graphql-ws': {
|
|
94
|
+
context: ({ extra }) => extra,
|
|
95
|
+
onConnect: async (context: Context<any>) => {
|
|
96
|
+
const { connectionParams, extra } = context;
|
|
93
97
|
if (config.graphQl.enableSubscriptionAuth) {
|
|
94
98
|
// get authToken from authorization header
|
|
95
|
-
const
|
|
96
|
-
|
|
99
|
+
const headers = this.getHeaderFromArray(extra.request?.rawHeaders);
|
|
100
|
+
const authToken: string
|
|
101
|
+
= connectionParams?.Authorization?.split(' ')[1]
|
|
102
|
+
?? headers.Authorization?.split(' ')[1];
|
|
97
103
|
if (authToken) {
|
|
98
104
|
// verify authToken/getJwtPayLoad
|
|
99
105
|
const payload = authService.decodeJwt(authToken);
|
|
@@ -102,22 +108,21 @@ export class CoreModule implements NestModule {
|
|
|
102
108
|
throw new UnauthorizedException('No user found for token');
|
|
103
109
|
}
|
|
104
110
|
// the user/jwtPayload object found will be available as context.currentUser/jwtPayload in your GraphQL resolvers
|
|
105
|
-
|
|
111
|
+
extra.user = user;
|
|
112
|
+
extra.headers = connectionParams ?? headers;
|
|
113
|
+
return extra;
|
|
106
114
|
}
|
|
107
115
|
|
|
108
116
|
throw new UnauthorizedException('Missing authentication token');
|
|
109
117
|
}
|
|
110
118
|
},
|
|
111
119
|
},
|
|
112
|
-
'
|
|
113
|
-
onConnect: async (
|
|
114
|
-
const { connectionParams, extra } = context;
|
|
120
|
+
'subscriptions-transport-ws': {
|
|
121
|
+
onConnect: async (connectionParams) => {
|
|
115
122
|
if (config.graphQl.enableSubscriptionAuth) {
|
|
116
123
|
// get authToken from authorization header
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
= connectionParams?.Authorization?.split(' ')[1]
|
|
120
|
-
?? headers.Authorization?.split(' ')[1];
|
|
124
|
+
const authToken: string = connectionParams?.Authorization?.split(' ')[1];
|
|
125
|
+
|
|
121
126
|
if (authToken) {
|
|
122
127
|
// verify authToken/getJwtPayLoad
|
|
123
128
|
const payload = authService.decodeJwt(authToken);
|
|
@@ -126,15 +131,12 @@ export class CoreModule implements NestModule {
|
|
|
126
131
|
throw new UnauthorizedException('No user found for token');
|
|
127
132
|
}
|
|
128
133
|
// the user/jwtPayload object found will be available as context.currentUser/jwtPayload in your GraphQL resolvers
|
|
129
|
-
|
|
130
|
-
extra.headers = connectionParams ?? headers;
|
|
131
|
-
return extra;
|
|
134
|
+
return { headers: connectionParams, user };
|
|
132
135
|
}
|
|
133
136
|
|
|
134
137
|
throw new UnauthorizedException('Missing authentication token');
|
|
135
138
|
}
|
|
136
139
|
},
|
|
137
|
-
context: ({ extra }) => extra,
|
|
138
140
|
},
|
|
139
141
|
},
|
|
140
142
|
},
|
|
@@ -143,16 +145,16 @@ export class CoreModule implements NestModule {
|
|
|
143
145
|
},
|
|
144
146
|
enableSubscriptionAuth: true,
|
|
145
147
|
},
|
|
146
|
-
port: 3000,
|
|
147
148
|
mongoose: {
|
|
148
|
-
uri: 'mongodb://localhost/nest-server-default',
|
|
149
149
|
options: {
|
|
150
150
|
connectionFactory: (connection) => {
|
|
151
151
|
connection.plugin(require('./core/common/plugins/mongoose-id.plugin'));
|
|
152
152
|
return connection;
|
|
153
153
|
},
|
|
154
154
|
},
|
|
155
|
+
uri: 'mongodb://localhost/nest-server-default',
|
|
155
156
|
},
|
|
157
|
+
port: 3000,
|
|
156
158
|
} as IServerOptions,
|
|
157
159
|
options,
|
|
158
160
|
);
|
|
@@ -207,10 +209,10 @@ export class CoreModule implements NestModule {
|
|
|
207
209
|
|
|
208
210
|
// Return dynamic module
|
|
209
211
|
return {
|
|
210
|
-
|
|
212
|
+
exports: [ConfigService, EmailService, TemplateService, MailjetService, ComplexityPlugin],
|
|
211
213
|
imports,
|
|
214
|
+
module: CoreModule,
|
|
212
215
|
providers,
|
|
213
|
-
exports: [ConfigService, EmailService, TemplateService, MailjetService, ComplexityPlugin],
|
|
214
216
|
};
|
|
215
217
|
}
|
|
216
218
|
}
|
package/src/index.ts
CHANGED
|
@@ -33,6 +33,7 @@ export * from './core/common/helpers/graphql.helper';
|
|
|
33
33
|
export * from './core/common/helpers/input.helper';
|
|
34
34
|
export * from './core/common/helpers/model.helper';
|
|
35
35
|
export * from './core/common/helpers/service.helper';
|
|
36
|
+
export * from './core/common/helpers/table.helper';
|
|
36
37
|
export * from './core/common/inputs/combined-filter.input';
|
|
37
38
|
export * from './core/common/inputs/core-input.input';
|
|
38
39
|
export * from './core/common/inputs/filter.input';
|
|
@@ -61,6 +62,7 @@ export * from './core/common/scalars/any.scalar';
|
|
|
61
62
|
export * from './core/common/scalars/date.scalar';
|
|
62
63
|
export * from './core/common/scalars/date-timestamp.scalar';
|
|
63
64
|
export * from './core/common/scalars/json.scalar';
|
|
65
|
+
export * from './core/common/services/brevo.service';
|
|
64
66
|
export * from './core/common/services/config.service';
|
|
65
67
|
export * from './core/common/services/core-cron-jobs.service';
|
|
66
68
|
export * from './core/common/services/crud.service';
|
package/src/main.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { exec } from 'child_process';
|
|
2
1
|
import { NestFactory } from '@nestjs/core';
|
|
3
2
|
import { NestExpressApplication } from '@nestjs/platform-express';
|
|
4
|
-
import
|
|
5
|
-
|
|
3
|
+
import { exec } from 'child_process';
|
|
4
|
+
|
|
6
5
|
import envConfig from './config.env';
|
|
7
6
|
import { HttpExceptionLogFilter } from './core/common/filters/http-exception-log.filter';
|
|
8
7
|
import { ServerModule } from './server/server.module';
|
|
9
8
|
|
|
9
|
+
import compression = require('compression');
|
|
10
|
+
import cookieParser = require('cookie-parser');
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* Preparations for server start
|
|
12
14
|
*/
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { Types } from 'mongoose';
|
|
2
|
-
import mongoose = require('mongoose');
|
|
3
|
-
import { Prop } from '@nestjs/mongoose';
|
|
4
1
|
import { Field, ObjectType } from '@nestjs/graphql';
|
|
2
|
+
import { Prop } from '@nestjs/mongoose';
|
|
3
|
+
import { Types } from 'mongoose';
|
|
4
|
+
|
|
5
5
|
import { CorePersistenceModel } from '../../../core/common/models/core-persistence.model';
|
|
6
6
|
import { User } from '../../modules/user/user.model';
|
|
7
7
|
|
|
8
|
+
import mongoose = require('mongoose');
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* Metadata for persistent objects
|
|
10
12
|
*
|
|
@@ -28,7 +30,7 @@ export abstract class PersistenceModel extends CorePersistenceModel {
|
|
|
28
30
|
description: 'ID of the user who created the object',
|
|
29
31
|
nullable: true,
|
|
30
32
|
})
|
|
31
|
-
@Prop({ type: mongoose.Schema.Types.ObjectId
|
|
33
|
+
@Prop({ ref: 'User', type: mongoose.Schema.Types.ObjectId })
|
|
32
34
|
createdBy?: Types.ObjectId | string = undefined;
|
|
33
35
|
|
|
34
36
|
/**
|
|
@@ -40,7 +42,7 @@ export abstract class PersistenceModel extends CorePersistenceModel {
|
|
|
40
42
|
description: 'ID of the user who updated the object',
|
|
41
43
|
nullable: true,
|
|
42
44
|
})
|
|
43
|
-
@Prop({ type: mongoose.Schema.Types.ObjectId
|
|
45
|
+
@Prop({ ref: 'User', type: mongoose.Schema.Types.ObjectId })
|
|
44
46
|
updatedBy?: Types.ObjectId | string = undefined;
|
|
45
47
|
|
|
46
48
|
// ===================================================================================================================
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
3
|
+
|
|
3
4
|
import { ConfigService } from '../../../core/common/services/config.service';
|
|
4
5
|
import { CoreCronJobs } from '../../../core/common/services/core-cron-jobs.service';
|
|
5
6
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DynamicModule, Module } from '@nestjs/common';
|
|
2
2
|
import { JwtModuleOptions } from '@nestjs/jwt';
|
|
3
|
+
|
|
3
4
|
import { EmailService } from '../../../core/common/services/email.service';
|
|
4
5
|
import { CoreAuthModule } from '../../../core/modules/auth/core-auth.module';
|
|
5
6
|
import { UserModule } from '../user/user.module';
|
|
@@ -19,7 +20,7 @@ export class AuthModule {
|
|
|
19
20
|
*/
|
|
20
21
|
static forRoot(options: JwtModuleOptions): DynamicModule {
|
|
21
22
|
return {
|
|
22
|
-
|
|
23
|
+
exports: [AuthController, AuthResolver, CoreAuthModule],
|
|
23
24
|
imports: [
|
|
24
25
|
CoreAuthModule.forRoot(UserModule, UserService, {
|
|
25
26
|
...options,
|
|
@@ -29,8 +30,8 @@ export class AuthModule {
|
|
|
29
30
|
},
|
|
30
31
|
}),
|
|
31
32
|
],
|
|
33
|
+
module: AuthModule,
|
|
32
34
|
providers: [AuthController, AuthResolver, AuthService, EmailService],
|
|
33
|
-
exports: [AuthController, AuthResolver, CoreAuthModule],
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Args, Context, Mutation, Resolver } from '@nestjs/graphql';
|
|
2
2
|
import { Response as ResponseType } from 'express';
|
|
3
|
+
|
|
3
4
|
import { GraphQLServiceOptions } from '../../../core/common/decorators/graphql-service-options.decorator';
|
|
4
5
|
import { ServiceOptions } from '../../../core/common/interfaces/service-options.interface';
|
|
5
6
|
import { ConfigService } from '../../../core/common/services/config.service';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
import { JwtService } from '@nestjs/jwt';
|
|
3
|
+
|
|
3
4
|
import { ServiceOptions } from '../../../core/common/interfaces/service-options.interface';
|
|
4
5
|
import { ConfigService } from '../../../core/common/services/config.service';
|
|
5
6
|
import { EmailService } from '../../../core/common/services/email.service';
|
|
@@ -42,8 +43,8 @@ export class AuthService extends CoreAuthService {
|
|
|
42
43
|
await this.emailService.sendMail(user.email, 'Welcome', {
|
|
43
44
|
htmlTemplate: 'welcome',
|
|
44
45
|
templateData: {
|
|
45
|
-
name: user.username,
|
|
46
46
|
link: `${this.configService.configFastButReadOnly.email.verificationLink}/${user.verificationToken}`,
|
|
47
|
+
name: user.username,
|
|
47
48
|
},
|
|
48
49
|
});
|
|
49
50
|
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
UseInterceptors,
|
|
12
12
|
} from '@nestjs/common';
|
|
13
13
|
import { FileInterceptor } from '@nestjs/platform-express';
|
|
14
|
+
|
|
14
15
|
import { Roles } from '../../../core/common/decorators/roles.decorator';
|
|
15
16
|
import { RoleEnum } from '../../../core/common/enums/role.enum';
|
|
16
17
|
import { FileService } from './file.service';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Module, forwardRef } from '@nestjs/common';
|
|
2
2
|
import { MulterModule } from '@nestjs/platform-express';
|
|
3
|
+
|
|
3
4
|
import { UserModule } from '../user/user.module';
|
|
4
5
|
import { FileController } from './file.controller';
|
|
5
6
|
import { FileResolver } from './file.resolver';
|
|
@@ -10,14 +11,14 @@ import { GridFsMulterConfigService } from './multer-config.service';
|
|
|
10
11
|
* File module
|
|
11
12
|
*/
|
|
12
13
|
@Module({
|
|
14
|
+
controllers: [FileController],
|
|
15
|
+
exports: [FileService],
|
|
13
16
|
imports: [
|
|
14
17
|
MulterModule.registerAsync({
|
|
15
18
|
useClass: GridFsMulterConfigService,
|
|
16
19
|
} as any),
|
|
17
20
|
forwardRef(() => UserModule),
|
|
18
21
|
],
|
|
19
|
-
controllers: [FileController],
|
|
20
22
|
providers: [GridFsMulterConfigService, FileService, FileResolver],
|
|
21
|
-
exports: [FileService],
|
|
22
23
|
})
|
|
23
24
|
export class FileModule {}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import fs = require('fs');
|
|
2
|
-
import { createWriteStream } from 'fs';
|
|
3
1
|
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
|
|
4
|
-
import
|
|
2
|
+
import { createWriteStream } from 'fs';
|
|
3
|
+
|
|
5
4
|
import { Roles } from '../../../core/common/decorators/roles.decorator';
|
|
6
5
|
import { RoleEnum } from '../../../core/common/enums/role.enum';
|
|
7
6
|
import { FileUpload } from '../../../core/modules/file/interfaces/file-upload.interface';
|
|
8
|
-
import { FileInfo } from './file-info.model';
|
|
9
7
|
import { FileService } from './file.service';
|
|
8
|
+
import { FileInfo } from './file-info.model';
|
|
9
|
+
|
|
10
|
+
import fs = require('fs');
|
|
11
|
+
import GraphQLUpload = require('graphql-upload/GraphQLUpload.js');
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* File resolver
|
|
@@ -64,7 +66,7 @@ export class FileResolver {
|
|
|
64
66
|
const promises: Promise<any>[] = [];
|
|
65
67
|
for (const file of files) {
|
|
66
68
|
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
67
|
-
const {
|
|
69
|
+
const { createReadStream, encoding, filename, mimetype } = await file;
|
|
68
70
|
await fs.promises.mkdir('./uploads', { recursive: true });
|
|
69
71
|
promises.push(
|
|
70
72
|
new Promise((resolve, reject) =>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { GridFsStorage } from '@lenne.tech/multer-gridfs-storage';
|
|
1
2
|
import { Injectable } from '@nestjs/common';
|
|
2
3
|
import { MulterModuleOptions, MulterOptionsFactory } from '@nestjs/platform-express';
|
|
3
|
-
|
|
4
|
+
|
|
4
5
|
import envConfig from '../../../config.env';
|
|
5
6
|
|
|
6
7
|
@Injectable()
|
|
@@ -9,7 +10,6 @@ export class GridFsMulterConfigService implements MulterOptionsFactory {
|
|
|
9
10
|
|
|
10
11
|
constructor() {
|
|
11
12
|
this.gridFsStorage = new GridFsStorage({
|
|
12
|
-
url: envConfig.mongoose.uri,
|
|
13
13
|
file: (req, file) => {
|
|
14
14
|
return new Promise((resolve) => {
|
|
15
15
|
const filename = file.originalname.trim();
|
|
@@ -19,6 +19,7 @@ export class GridFsMulterConfigService implements MulterOptionsFactory {
|
|
|
19
19
|
resolve(fileInfo);
|
|
20
20
|
});
|
|
21
21
|
},
|
|
22
|
+
url: envConfig.mongoose.uri,
|
|
22
23
|
});
|
|
23
24
|
}
|
|
24
25
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Post, UploadedFile, UseInterceptors } from '@nestjs/common';
|
|
2
2
|
import { Controller } from '@nestjs/common/decorators/core/controller.decorator';
|
|
3
3
|
import { FileInterceptor } from '@nestjs/platform-express';
|
|
4
|
+
|
|
4
5
|
import envConfig from '../../../config.env';
|
|
5
6
|
import { CurrentUser } from '../../../core/common/decorators/current-user.decorator';
|
|
6
7
|
import { Roles } from '../../../core/common/decorators/roles.decorator';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Field, ObjectType } from '@nestjs/graphql';
|
|
2
2
|
import { Schema as MongooseSchema, Prop, SchemaFactory } from '@nestjs/mongoose';
|
|
3
3
|
import { Document, Schema } from 'mongoose';
|
|
4
|
+
|
|
4
5
|
import { RoleEnum } from '../../../core/common/enums/role.enum';
|
|
5
6
|
import { CoreUserModel } from '../../../core/modules/user/core-user.model';
|
|
6
7
|
import { PersistenceModel } from '../../common/models/persistence.model';
|
|
@@ -33,7 +34,7 @@ export class User extends CoreUserModel implements PersistenceModel {
|
|
|
33
34
|
description: 'ID of the user who created the object',
|
|
34
35
|
nullable: true,
|
|
35
36
|
})
|
|
36
|
-
@Prop({ type: Schema.Types.ObjectId
|
|
37
|
+
@Prop({ ref: 'User', type: Schema.Types.ObjectId })
|
|
37
38
|
createdBy: string = undefined;
|
|
38
39
|
|
|
39
40
|
/**
|
|
@@ -45,7 +46,7 @@ export class User extends CoreUserModel implements PersistenceModel {
|
|
|
45
46
|
description: 'ID of the user who last updated the object',
|
|
46
47
|
nullable: true,
|
|
47
48
|
})
|
|
48
|
-
@Prop({ type: Schema.Types.ObjectId
|
|
49
|
+
@Prop({ ref: 'User', type: Schema.Types.ObjectId })
|
|
49
50
|
updatedBy: string = undefined;
|
|
50
51
|
|
|
51
52
|
// ===================================================================================================================
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Module } from '@nestjs/common';
|
|
2
2
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
3
3
|
import { PubSub } from 'graphql-subscriptions';
|
|
4
|
+
|
|
4
5
|
import { ConfigService } from '../../../core/common/services/config.service';
|
|
5
6
|
import { AvatarController } from './avatar.controller';
|
|
6
7
|
import { User, UserSchema } from './user.model';
|
|
@@ -11,8 +12,9 @@ import { UserService } from './user.service';
|
|
|
11
12
|
* User module
|
|
12
13
|
*/
|
|
13
14
|
@Module({
|
|
14
|
-
imports: [MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])],
|
|
15
15
|
controllers: [AvatarController],
|
|
16
|
+
exports: [MongooseModule, UserResolver, UserService, 'USER_CLASS'],
|
|
17
|
+
imports: [MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])],
|
|
16
18
|
providers: [
|
|
17
19
|
UserResolver,
|
|
18
20
|
ConfigService,
|
|
@@ -26,6 +28,5 @@ import { UserService } from './user.service';
|
|
|
26
28
|
useValue: new PubSub(),
|
|
27
29
|
},
|
|
28
30
|
],
|
|
29
|
-
exports: [MongooseModule, UserResolver, UserService, 'USER_CLASS'],
|
|
30
31
|
})
|
|
31
32
|
export class UserModule {}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Inject } from '@nestjs/common';
|
|
2
2
|
import { Args, Mutation, Query, Resolver, Subscription } from '@nestjs/graphql';
|
|
3
3
|
import { PubSub } from 'graphql-subscriptions';
|
|
4
|
+
|
|
4
5
|
import { FilterArgs } from '../../../core/common/args/filter.args';
|
|
5
6
|
import { GraphQLServiceOptions } from '../../../core/common/decorators/graphql-service-options.decorator';
|
|
6
7
|
import { Roles } from '../../../core/common/decorators/roles.decorator';
|
|
7
8
|
import { RoleEnum } from '../../../core/common/enums/role.enum';
|
|
8
9
|
import { ServiceOptions } from '../../../core/common/interfaces/service-options.interface';
|
|
9
|
-
import { UserCreateInput } from './inputs/user-create.input';
|
|
10
10
|
import { UserInput } from './inputs/user.input';
|
|
11
|
+
import { UserCreateInput } from './inputs/user-create.input';
|
|
11
12
|
import { FindAndCountUsersResult } from './outputs/find-and-count-users-result.output';
|
|
12
13
|
import { User } from './user.model';
|
|
13
14
|
import { UserService } from './user.service';
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import fs = require('fs');
|
|
2
1
|
import { Inject, Injectable, UnauthorizedException, UnprocessableEntityException } from '@nestjs/common';
|
|
3
2
|
import { InjectModel } from '@nestjs/mongoose';
|
|
4
3
|
import { PubSub } from 'graphql-subscriptions';
|
|
5
4
|
import { Model } from 'mongoose';
|
|
5
|
+
|
|
6
6
|
import { ServiceOptions } from '../../../core/common/interfaces/service-options.interface';
|
|
7
7
|
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 { UserCreateInput } from './inputs/user-create.input';
|
|
12
11
|
import { UserInput } from './inputs/user.input';
|
|
12
|
+
import { UserCreateInput } from './inputs/user-create.input';
|
|
13
13
|
import { User, UserDocument } from './user.model';
|
|
14
14
|
|
|
15
|
+
import fs = require('fs');
|
|
16
|
+
|
|
15
17
|
/**
|
|
16
18
|
* User service
|
|
17
19
|
*/
|
|
@@ -72,8 +74,8 @@ export class UserService extends CoreUserService<User, UserInput, UserCreateInpu
|
|
|
72
74
|
await this.emailService.sendMail(user.email, 'Password reset', {
|
|
73
75
|
htmlTemplate: 'password-reset',
|
|
74
76
|
templateData: {
|
|
75
|
-
name: user.username,
|
|
76
77
|
link: `${this.configService.configFastButReadOnly.email.passwordResetLink}/${user.passwordResetToken}`,
|
|
78
|
+
name: user.username,
|
|
77
79
|
},
|
|
78
80
|
});
|
|
79
81
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Module } from '@nestjs/common';
|
|
2
2
|
import { APP_INTERCEPTOR } from '@nestjs/core';
|
|
3
3
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
4
|
+
|
|
4
5
|
import envConfig from '../config.env';
|
|
5
6
|
import { CoreModule } from '../core.module';
|
|
6
7
|
import { CheckSecurityInterceptor } from '../core/common/interceptors/check-security.interceptor';
|
|
@@ -20,6 +21,12 @@ import { ServerController } from './server.controller';
|
|
|
20
21
|
* for the project API
|
|
21
22
|
*/
|
|
22
23
|
@Module({
|
|
24
|
+
// Include REST controllers
|
|
25
|
+
controllers: [ServerController],
|
|
26
|
+
|
|
27
|
+
// Export modules for reuse in other modules
|
|
28
|
+
exports: [CoreModule, AuthModule, FileModule],
|
|
29
|
+
|
|
23
30
|
// Include modules
|
|
24
31
|
imports: [
|
|
25
32
|
// Include CoreModule for standard processes
|
|
@@ -46,11 +53,5 @@ import { ServerController } from './server.controller';
|
|
|
46
53
|
useClass: CheckSecurityInterceptor,
|
|
47
54
|
},
|
|
48
55
|
],
|
|
49
|
-
|
|
50
|
-
// Include REST controllers
|
|
51
|
-
controllers: [ServerController],
|
|
52
|
-
|
|
53
|
-
// Export modules for reuse in other modules
|
|
54
|
-
exports: [CoreModule, AuthModule, FileModule],
|
|
55
56
|
})
|
|
56
57
|
export class ServerModule {}
|