@koalarx/nest 0.0.3
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/LICENSE +21 -0
- package/README.md +7 -0
- package/common/backgroud-services/cron-service/cron-job.d.ts +15 -0
- package/common/backgroud-services/cron-service/cron-job.js +47 -0
- package/common/backgroud-services/event-service/event-class.d.ts +5 -0
- package/common/backgroud-services/event-service/event-class.js +11 -0
- package/common/backgroud-services/event-service/event-handler.d.ts +5 -0
- package/common/backgroud-services/event-service/event-handler.js +10 -0
- package/common/backgroud-services/event-service/event-is-trigger.d.ts +3 -0
- package/common/backgroud-services/event-service/event-is-trigger.js +7 -0
- package/common/backgroud-services/event-service/event-job.d.ts +10 -0
- package/common/backgroud-services/event-service/event-job.js +19 -0
- package/common/backgroud-services/event-service/event-queue.d.ts +17 -0
- package/common/backgroud-services/event-service/event-queue.js +55 -0
- package/common/controllers/base.controller.d.ts +4 -0
- package/common/controllers/base.controller.js +6 -0
- package/common/controllers/created-registre-response.base.d.ts +3 -0
- package/common/controllers/created-registre-response.base.js +17 -0
- package/common/controllers/list-response.base.d.ts +4 -0
- package/common/controllers/list-response.base.js +17 -0
- package/common/controllers/router-config.base.d.ts +7 -0
- package/common/controllers/router-config.base.js +18 -0
- package/common/controllers/schemas/document-number.schema.d.ts +1 -0
- package/common/controllers/schemas/document-number.schema.js +27 -0
- package/common/controllers/schemas/email.schema.d.ts +1 -0
- package/common/controllers/schemas/email.schema.js +14 -0
- package/common/controllers/schemas/list-query.schema.d.ts +17 -0
- package/common/controllers/schemas/list-query.schema.js +19 -0
- package/common/controllers/schemas/native-enum.schema.d.ts +7 -0
- package/common/controllers/schemas/native-enum.schema.js +29 -0
- package/common/errors/bad-request.error.d.ts +4 -0
- package/common/errors/bad-request.error.js +9 -0
- package/common/errors/conflict.error.d.ts +3 -0
- package/common/errors/conflict.error.js +9 -0
- package/common/errors/no-content.error.d.ts +4 -0
- package/common/errors/no-content.error.js +9 -0
- package/common/errors/not-allowed.error.d.ts +4 -0
- package/common/errors/not-allowed.error.js +9 -0
- package/common/errors/resource-not-found.error.d.ts +4 -0
- package/common/errors/resource-not-found.error.js +9 -0
- package/common/errors/use-case-error.d.ts +3 -0
- package/common/errors/use-case-error.js +2 -0
- package/common/errors/user-already-exist.error.d.ts +3 -0
- package/common/errors/user-already-exist.error.js +9 -0
- package/common/errors/wrong-credentials.error.d.ts +3 -0
- package/common/errors/wrong-credentials.error.js +9 -0
- package/common/mediator/request-handler.base.d.ts +4 -0
- package/common/mediator/request-handler.base.js +6 -0
- package/common/mediator/request-result.d.ts +15 -0
- package/common/mediator/request-result.js +37 -0
- package/common/mediator/request-validator.base.d.ts +7 -0
- package/common/mediator/request-validator.base.js +17 -0
- package/common/models/pagination-params.d.ts +14 -0
- package/common/models/pagination-params.js +60 -0
- package/core/database/entity.d.ts +8 -0
- package/core/database/entity.js +23 -0
- package/core/database/repository.base.d.ts +16 -0
- package/core/database/repository.base.js +27 -0
- package/core/koala-app.d.ts +40 -0
- package/core/koala-app.js +94 -0
- package/core/koala-nest-database.module.d.ts +13 -0
- package/core/koala-nest-database.module.js +37 -0
- package/core/koala-nest-http.module.d.ts +12 -0
- package/core/koala-nest-http.module.js +38 -0
- package/core/koala-nest.module.d.ts +13 -0
- package/core/koala-nest.module.js +52 -0
- package/core/utils/env.config.d.ts +6 -0
- package/core/utils/env.config.js +18 -0
- package/core/utils/filter-request-params.d.ts +13 -0
- package/core/utils/filter-request-params.js +22 -0
- package/core/utils/interfaces/icomparable.d.ts +5 -0
- package/core/utils/interfaces/icomparable.js +6 -0
- package/core/utils/list.d.ts +24 -0
- package/core/utils/list.js +94 -0
- package/core/utils/promise-all.d.ts +7 -0
- package/core/utils/promise-all.js +19 -0
- package/core/utils/set-mask-document-number.d.ts +1 -0
- package/core/utils/set-mask-document-number.js +14 -0
- package/decorators/api-exclude-endpoint-diff-develop.decorator.d.ts +1 -0
- package/decorators/api-exclude-endpoint-diff-develop.decorator.js +9 -0
- package/decorators/api-property-only-develop.decorator.d.ts +2 -0
- package/decorators/api-property-only-develop.decorator.js +9 -0
- package/decorators/cookies.decorator.d.ts +1 -0
- package/decorators/cookies.decorator.js +8 -0
- package/decorators/is-cnpj.decorator.d.ts +2 -0
- package/decorators/is-cnpj.decorator.js +71 -0
- package/decorators/is-public.decorator.d.ts +2 -0
- package/decorators/is-public.decorator.js +7 -0
- package/filters/domain-errors.filter.d.ts +16 -0
- package/filters/domain-errors.filter.js +62 -0
- package/filters/global-exception.filter.d.ts +7 -0
- package/filters/global-exception.filter.js +39 -0
- package/filters/prisma-validation-exception.filter.d.ts +8 -0
- package/filters/prisma-validation-exception.filter.js +53 -0
- package/filters/zod-errors.filter.d.ts +7 -0
- package/filters/zod-errors.filter.js +30 -0
- package/package.json +91 -0
- package/services/env/env.d.ts +25 -0
- package/services/env/env.js +13 -0
- package/services/env/env.module.d.ts +2 -0
- package/services/env/env.module.js +19 -0
- package/services/env/env.service.d.ts +14 -0
- package/services/env/env.service.js +22 -0
- package/services/logging/ilogging.service.d.ts +16 -0
- package/services/logging/ilogging.service.js +6 -0
- package/services/logging/logging.service.d.ts +4 -0
- package/services/logging/logging.service.js +19 -0
- package/services/prisma/prisma-client-with-custom-transaction.interface.d.ts +8 -0
- package/services/prisma/prisma-client-with-custom-transaction.interface.js +2 -0
- package/services/prisma/prisma-transactional-client.d.ts +11 -0
- package/services/prisma/prisma-transactional-client.js +25 -0
- package/services/prisma/prisma.service.d.ts +13 -0
- package/services/prisma/prisma.service.js +38 -0
- package/services/prisma/prisma.types.d.ts +36 -0
- package/services/prisma/prisma.types.js +15 -0
- package/services/redis/iredis.service.d.ts +5 -0
- package/services/redis/iredis.service.js +6 -0
- package/services/redis/redis.service.d.ts +13 -0
- package/services/redis/redis.service.js +53 -0
- package/services/redlock/ired-lock.service.d.ts +4 -0
- package/services/redlock/ired-lock.service.js +6 -0
- package/services/redlock/red-lock.service.d.ts +9 -0
- package/services/redlock/red-lock.service.js +40 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.List = void 0;
|
|
4
|
+
const entity_1 = require("../database/entity");
|
|
5
|
+
class List {
|
|
6
|
+
_list = [];
|
|
7
|
+
_addedItemsList = [];
|
|
8
|
+
_updatedItemsList = [];
|
|
9
|
+
_removedItemsList = [];
|
|
10
|
+
constructor(list = []) {
|
|
11
|
+
this._list = list;
|
|
12
|
+
}
|
|
13
|
+
get length() {
|
|
14
|
+
return this._list.length;
|
|
15
|
+
}
|
|
16
|
+
findById(id) {
|
|
17
|
+
return (this._list
|
|
18
|
+
.filter((item) => item instanceof entity_1.Entity)
|
|
19
|
+
.find((item) => item.id === id) ?? null);
|
|
20
|
+
}
|
|
21
|
+
findByValue(value) {
|
|
22
|
+
return this._list.find((item) => item === value) ?? null;
|
|
23
|
+
}
|
|
24
|
+
add(item) {
|
|
25
|
+
if (this.contains(item)) {
|
|
26
|
+
this._list[this.indexOf(item)] = item;
|
|
27
|
+
if (!this.contains(item, this._updatedItemsList)) {
|
|
28
|
+
this._updatedItemsList.push(item);
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this._list.push(item);
|
|
33
|
+
this._addedItemsList.push(item);
|
|
34
|
+
}
|
|
35
|
+
remove(item) {
|
|
36
|
+
const index = this.indexOf(item);
|
|
37
|
+
if (index > -1) {
|
|
38
|
+
this._list.splice(index, 1);
|
|
39
|
+
if (!this.contains(item, this._removedItemsList)) {
|
|
40
|
+
this._removedItemsList.push(item);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
clear() {
|
|
45
|
+
this._removedItemsList = this._list;
|
|
46
|
+
this._list = [];
|
|
47
|
+
}
|
|
48
|
+
forEach(callback) {
|
|
49
|
+
this._list.forEach(callback);
|
|
50
|
+
}
|
|
51
|
+
forEachAsync(callback) {
|
|
52
|
+
return Promise.all(this._list.map(callback));
|
|
53
|
+
}
|
|
54
|
+
map(callback) {
|
|
55
|
+
return new List(this._list.map(callback));
|
|
56
|
+
}
|
|
57
|
+
async mapAsync(callback) {
|
|
58
|
+
return Promise.all(this._list.map(callback)).then((list) => new List(list));
|
|
59
|
+
}
|
|
60
|
+
filter(callback) {
|
|
61
|
+
return new List(this._list.filter(callback));
|
|
62
|
+
}
|
|
63
|
+
async filterAsync(callback) {
|
|
64
|
+
return Promise.all(this._list.filter(callback))
|
|
65
|
+
.then((list) => list.filter((item) => item))
|
|
66
|
+
.then((list) => new List(list));
|
|
67
|
+
}
|
|
68
|
+
toArray(type) {
|
|
69
|
+
switch (type) {
|
|
70
|
+
case 'added':
|
|
71
|
+
return this._addedItemsList;
|
|
72
|
+
case 'updated':
|
|
73
|
+
return this._updatedItemsList;
|
|
74
|
+
case 'removed':
|
|
75
|
+
return this._removedItemsList;
|
|
76
|
+
default:
|
|
77
|
+
return this._list;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
indexOf(item, list = this._list) {
|
|
81
|
+
if (item instanceof entity_1.Entity) {
|
|
82
|
+
return list
|
|
83
|
+
.filter((i) => i instanceof entity_1.Entity)
|
|
84
|
+
.findIndex((i) => item.id === i.id);
|
|
85
|
+
}
|
|
86
|
+
return list
|
|
87
|
+
.filter((i) => !(i instanceof entity_1.Entity))
|
|
88
|
+
.findIndex((i) => item === i);
|
|
89
|
+
}
|
|
90
|
+
contains(item, list = this._list) {
|
|
91
|
+
return this.indexOf(item, list) > -1;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.List = List;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Promises = void 0;
|
|
4
|
+
class Promises {
|
|
5
|
+
static async result(requests) {
|
|
6
|
+
const promises = [];
|
|
7
|
+
Object.values(requests).forEach((promise) => promises.push(promise));
|
|
8
|
+
return Promise.all(promises).then((result) => {
|
|
9
|
+
let currentIndex = 0;
|
|
10
|
+
const response = {};
|
|
11
|
+
Object.keys(requests).forEach((propName) => {
|
|
12
|
+
response[propName] = result[currentIndex];
|
|
13
|
+
currentIndex++;
|
|
14
|
+
});
|
|
15
|
+
return response;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.Promises = Promises;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setMaskDocumentNumber(document?: string): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setMaskDocumentNumber = void 0;
|
|
4
|
+
const string_1 = require("@koalarx/utils/operators/string");
|
|
5
|
+
function setMaskDocumentNumber(document) {
|
|
6
|
+
if (!document) {
|
|
7
|
+
return '';
|
|
8
|
+
}
|
|
9
|
+
const documentWithoutMask = document.replace(/[^0-9]/g, '');
|
|
10
|
+
return documentWithoutMask.length === 11
|
|
11
|
+
? (0, string_1.maskCpf)(documentWithoutMask)
|
|
12
|
+
: (0, string_1.maskCnpj)(documentWithoutMask);
|
|
13
|
+
}
|
|
14
|
+
exports.setMaskDocumentNumber = setMaskDocumentNumber;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ApiExcludeEndpointDiffDevelop: () => MethodDecorator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiExcludeEndpointDiffDevelop = void 0;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
const env_config_1 = require("../core/utils/env.config");
|
|
6
|
+
const ApiExcludeEndpointDiffDevelop = () => {
|
|
7
|
+
return (0, swagger_1.ApiExcludeEndpoint)(!env_config_1.EnvConfig.isEnvDevelop);
|
|
8
|
+
};
|
|
9
|
+
exports.ApiExcludeEndpointDiffDevelop = ApiExcludeEndpointDiffDevelop;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiPropertyOnlyDevelop = void 0;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
const env_config_1 = require("../core/utils/env.config");
|
|
6
|
+
const ApiPropertyOnlyDevelop = (propertyOptions) => {
|
|
7
|
+
return env_config_1.EnvConfig.isEnvDevelop ? (0, swagger_1.ApiProperty)(propertyOptions) : () => { };
|
|
8
|
+
};
|
|
9
|
+
exports.ApiPropertyOnlyDevelop = ApiPropertyOnlyDevelop;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Cookies: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Cookies = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
exports.Cookies = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
6
|
+
const request = ctx.switchToHttp().getRequest();
|
|
7
|
+
return data ? request.cookies?.[data] : request.cookies;
|
|
8
|
+
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsCNPJ = void 0;
|
|
4
|
+
const class_validator_1 = require("class-validator");
|
|
5
|
+
function IsCNPJ(validationOptions) {
|
|
6
|
+
return function (object, propertyName) {
|
|
7
|
+
(0, class_validator_1.registerDecorator)({
|
|
8
|
+
name: 'IsCNPJ',
|
|
9
|
+
target: object.constructor,
|
|
10
|
+
propertyName,
|
|
11
|
+
options: validationOptions,
|
|
12
|
+
validator: {
|
|
13
|
+
validate(value) {
|
|
14
|
+
return isValidCNPJ(value);
|
|
15
|
+
},
|
|
16
|
+
defaultMessage(args) {
|
|
17
|
+
return `${args.property} inválido`;
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
exports.IsCNPJ = IsCNPJ;
|
|
24
|
+
function isValidCNPJ(value) {
|
|
25
|
+
value = value.replace(/[^\d]+/g, '');
|
|
26
|
+
if (value === '') {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (value.length !== 14) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (value === '00000000000000' ||
|
|
33
|
+
value === '11111111111111' ||
|
|
34
|
+
value === '22222222222222' ||
|
|
35
|
+
value === '33333333333333' ||
|
|
36
|
+
value === '44444444444444' ||
|
|
37
|
+
value === '55555555555555' ||
|
|
38
|
+
value === '66666666666666' ||
|
|
39
|
+
value === '77777777777777' ||
|
|
40
|
+
value === '88888888888888' ||
|
|
41
|
+
value === '99999999999999') {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
let tamanho = value.length - 2;
|
|
45
|
+
let numeros = value.substring(0, tamanho);
|
|
46
|
+
const digitos = value.substring(tamanho);
|
|
47
|
+
let soma = 0;
|
|
48
|
+
let pos = tamanho - 7;
|
|
49
|
+
for (let i = tamanho; i >= 1; i--) {
|
|
50
|
+
soma += parseInt(numeros.charAt(tamanho - i), 10) * pos--;
|
|
51
|
+
if (pos < 2) {
|
|
52
|
+
pos = 9;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
let resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);
|
|
56
|
+
if (resultado !== parseInt(digitos.charAt(0), 10)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
tamanho = tamanho + 1;
|
|
60
|
+
numeros = value.substring(0, tamanho);
|
|
61
|
+
soma = 0;
|
|
62
|
+
pos = tamanho - 7;
|
|
63
|
+
for (let i = tamanho; i >= 1; i--) {
|
|
64
|
+
soma += parseInt(numeros.charAt(tamanho - i), 10) * pos--;
|
|
65
|
+
if (pos < 2) {
|
|
66
|
+
pos = 9;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);
|
|
70
|
+
return !(resultado !== parseInt(digitos.charAt(1), 10));
|
|
71
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsPublic = exports.IS_PUBLIC_KEY = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
exports.IS_PUBLIC_KEY = 'isPublic';
|
|
6
|
+
const IsPublic = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_KEY, true);
|
|
7
|
+
exports.IsPublic = IsPublic;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="express" />
|
|
2
|
+
import { ArgumentsHost } from '@nestjs/common';
|
|
3
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
4
|
+
import { BadRequestError } from '../common/errors/bad-request.error';
|
|
5
|
+
import { ConflictError } from '../common/errors/conflict.error';
|
|
6
|
+
import { NoContentError } from '../common/errors/no-content.error';
|
|
7
|
+
import { NotAllowedError } from '../common/errors/not-allowed.error';
|
|
8
|
+
import { ResourceNotFoundError } from '../common/errors/resource-not-found.error';
|
|
9
|
+
import { UserAlreadyExist } from '../common/errors/user-already-exist.error';
|
|
10
|
+
import { WrongCredentialsError } from '../common/errors/wrong-credentials.error';
|
|
11
|
+
type DomainErrors = NotAllowedError | ResourceNotFoundError | UserAlreadyExist | WrongCredentialsError | ConflictError | BadRequestError | NoContentError;
|
|
12
|
+
export declare class DomainErrorsFilter extends BaseExceptionFilter {
|
|
13
|
+
catch(exception: DomainErrors, host: ArgumentsHost): import("express").Response<any, Record<string, any>>;
|
|
14
|
+
private map;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DomainErrorsFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const core_1 = require("@nestjs/core");
|
|
12
|
+
const bad_request_error_1 = require("../common/errors/bad-request.error");
|
|
13
|
+
const conflict_error_1 = require("../common/errors/conflict.error");
|
|
14
|
+
const no_content_error_1 = require("../common/errors/no-content.error");
|
|
15
|
+
const not_allowed_error_1 = require("../common/errors/not-allowed.error");
|
|
16
|
+
const resource_not_found_error_1 = require("../common/errors/resource-not-found.error");
|
|
17
|
+
const user_already_exist_error_1 = require("../common/errors/user-already-exist.error");
|
|
18
|
+
const wrong_credentials_error_1 = require("../common/errors/wrong-credentials.error");
|
|
19
|
+
const filter_request_params_1 = require("../core/utils/filter-request-params");
|
|
20
|
+
let DomainErrorsFilter = exports.DomainErrorsFilter = class DomainErrorsFilter extends core_1.BaseExceptionFilter {
|
|
21
|
+
catch(exception, host) {
|
|
22
|
+
const mappedException = this.map(exception);
|
|
23
|
+
const filterRequestParams = filter_request_params_1.FilterRequestParams.get(host);
|
|
24
|
+
if (mappedException.statusCode !== common_1.HttpStatus.UNAUTHORIZED) {
|
|
25
|
+
console.error(exception);
|
|
26
|
+
}
|
|
27
|
+
return filterRequestParams.response
|
|
28
|
+
.status(mappedException.statusCode)
|
|
29
|
+
.json(mappedException);
|
|
30
|
+
}
|
|
31
|
+
map(exception) {
|
|
32
|
+
const mappedException = {
|
|
33
|
+
statusCode: common_1.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
34
|
+
message: exception.message,
|
|
35
|
+
};
|
|
36
|
+
switch (exception.constructor) {
|
|
37
|
+
case user_already_exist_error_1.UserAlreadyExist:
|
|
38
|
+
case not_allowed_error_1.NotAllowedError:
|
|
39
|
+
case bad_request_error_1.BadRequestError:
|
|
40
|
+
mappedException.statusCode = common_1.HttpStatus.BAD_REQUEST;
|
|
41
|
+
break;
|
|
42
|
+
case resource_not_found_error_1.ResourceNotFoundError:
|
|
43
|
+
mappedException.statusCode = common_1.HttpStatus.NOT_FOUND;
|
|
44
|
+
break;
|
|
45
|
+
case wrong_credentials_error_1.WrongCredentialsError:
|
|
46
|
+
mappedException.statusCode = common_1.HttpStatus.UNAUTHORIZED;
|
|
47
|
+
break;
|
|
48
|
+
case conflict_error_1.ConflictError:
|
|
49
|
+
mappedException.statusCode = common_1.HttpStatus.CONFLICT;
|
|
50
|
+
break;
|
|
51
|
+
case no_content_error_1.NoContentError:
|
|
52
|
+
mappedException.statusCode = common_1.HttpStatus.NO_CONTENT;
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
console.error(exception);
|
|
56
|
+
}
|
|
57
|
+
return mappedException;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.DomainErrorsFilter = DomainErrorsFilter = __decorate([
|
|
61
|
+
(0, common_1.Catch)(not_allowed_error_1.NotAllowedError, resource_not_found_error_1.ResourceNotFoundError, user_already_exist_error_1.UserAlreadyExist, wrong_credentials_error_1.WrongCredentialsError, conflict_error_1.ConflictError, bad_request_error_1.BadRequestError, no_content_error_1.NoContentError)
|
|
62
|
+
], DomainErrorsFilter);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ArgumentsHost } from '@nestjs/common';
|
|
2
|
+
import { AbstractHttpAdapter, BaseExceptionFilter } from '@nestjs/core';
|
|
3
|
+
export declare class GlobalExceptionsFilter extends BaseExceptionFilter {
|
|
4
|
+
private readonly httpAdapter;
|
|
5
|
+
constructor(httpAdapter: AbstractHttpAdapter);
|
|
6
|
+
catch(exception: Error, host: ArgumentsHost): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GlobalExceptionsFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const core_1 = require("@nestjs/core");
|
|
12
|
+
const filter_request_params_1 = require("../core/utils/filter-request-params");
|
|
13
|
+
let GlobalExceptionsFilter = exports.GlobalExceptionsFilter = class GlobalExceptionsFilter extends core_1.BaseExceptionFilter {
|
|
14
|
+
httpAdapter;
|
|
15
|
+
constructor(httpAdapter) {
|
|
16
|
+
super();
|
|
17
|
+
this.httpAdapter = httpAdapter;
|
|
18
|
+
}
|
|
19
|
+
catch(exception, host) {
|
|
20
|
+
const filterRequestParams = filter_request_params_1.FilterRequestParams.get(host);
|
|
21
|
+
const statusCode = exception instanceof common_1.HttpException
|
|
22
|
+
? exception.getStatus()
|
|
23
|
+
: common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
24
|
+
const responseBody = exception instanceof common_1.HttpException
|
|
25
|
+
? exception.getResponse()
|
|
26
|
+
: {
|
|
27
|
+
statusCode,
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
path: filterRequestParams.filterParams.endpoint,
|
|
30
|
+
};
|
|
31
|
+
this.httpAdapter.reply(filterRequestParams.response, responseBody, statusCode);
|
|
32
|
+
if (statusCode !== common_1.HttpStatus.UNAUTHORIZED) {
|
|
33
|
+
console.error(exception);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.GlobalExceptionsFilter = GlobalExceptionsFilter = __decorate([
|
|
38
|
+
(0, common_1.Catch)()
|
|
39
|
+
], GlobalExceptionsFilter);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="express" />
|
|
2
|
+
import { ArgumentsHost } from '@nestjs/common';
|
|
3
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
4
|
+
import { Prisma } from '@prisma/client';
|
|
5
|
+
export declare class PrismaValidationExceptionFilter extends BaseExceptionFilter {
|
|
6
|
+
catch(exception: Prisma.PrismaClientKnownRequestError, host: ArgumentsHost): import("express").Response<any, Record<string, any>>;
|
|
7
|
+
private translate;
|
|
8
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PrismaValidationExceptionFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const core_1 = require("@nestjs/core");
|
|
12
|
+
const client_1 = require("@prisma/client");
|
|
13
|
+
const filter_request_params_1 = require("../core/utils/filter-request-params");
|
|
14
|
+
let PrismaValidationExceptionFilter = exports.PrismaValidationExceptionFilter = class PrismaValidationExceptionFilter extends core_1.BaseExceptionFilter {
|
|
15
|
+
catch(exception, host) {
|
|
16
|
+
const translatedResponse = this.translate(exception);
|
|
17
|
+
const filterRequestParams = filter_request_params_1.FilterRequestParams.get(host);
|
|
18
|
+
if (translatedResponse.statusCode !== common_1.HttpStatus.UNAUTHORIZED) {
|
|
19
|
+
console.error(exception);
|
|
20
|
+
}
|
|
21
|
+
return filterRequestParams.response
|
|
22
|
+
.status(translatedResponse.statusCode)
|
|
23
|
+
.json(translatedResponse);
|
|
24
|
+
}
|
|
25
|
+
translate(exception) {
|
|
26
|
+
switch (exception.code) {
|
|
27
|
+
case 'P2002':
|
|
28
|
+
return {
|
|
29
|
+
statusCode: common_1.HttpStatus.CONFLICT,
|
|
30
|
+
message: 'Registro já existente.',
|
|
31
|
+
};
|
|
32
|
+
case 'P2003':
|
|
33
|
+
return {
|
|
34
|
+
statusCode: common_1.HttpStatus.BAD_REQUEST,
|
|
35
|
+
message: 'Falha devido a relacionamento. Verifique se o relacionamento existe ou é valido.',
|
|
36
|
+
};
|
|
37
|
+
case 'P2025':
|
|
38
|
+
return {
|
|
39
|
+
statusCode: common_1.HttpStatus.NOT_FOUND,
|
|
40
|
+
message: 'Registro não encontrado.',
|
|
41
|
+
};
|
|
42
|
+
default:
|
|
43
|
+
console.error(exception);
|
|
44
|
+
return {
|
|
45
|
+
statusCode: common_1.HttpStatus.BAD_REQUEST,
|
|
46
|
+
message: 'Ocorreu um erro desconhecido relacionado aos dados enviados.',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.PrismaValidationExceptionFilter = PrismaValidationExceptionFilter = __decorate([
|
|
52
|
+
(0, common_1.Catch)(client_1.Prisma.PrismaClientKnownRequestError)
|
|
53
|
+
], PrismaValidationExceptionFilter);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="express" />
|
|
2
|
+
import { ArgumentsHost } from '@nestjs/common';
|
|
3
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
4
|
+
import { ZodError } from 'zod';
|
|
5
|
+
export declare class ZodErrorsFilter extends BaseExceptionFilter {
|
|
6
|
+
catch(exception: ZodError, host: ArgumentsHost): import("express").Response<any, Record<string, any>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ZodErrorsFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const core_1 = require("@nestjs/core");
|
|
12
|
+
const zod_1 = require("zod");
|
|
13
|
+
const zod_validation_error_1 = require("zod-validation-error");
|
|
14
|
+
const filter_request_params_1 = require("../core/utils/filter-request-params");
|
|
15
|
+
let ZodErrorsFilter = exports.ZodErrorsFilter = class ZodErrorsFilter extends core_1.BaseExceptionFilter {
|
|
16
|
+
catch(exception, host) {
|
|
17
|
+
const filterRequestParams = filter_request_params_1.FilterRequestParams.get(host);
|
|
18
|
+
const zodResponse = {
|
|
19
|
+
errors: (0, zod_validation_error_1.fromZodError)(exception).details.map((detail) => `${detail.path} ${detail.message.toLowerCase()}`),
|
|
20
|
+
statusCode: common_1.HttpStatus.BAD_REQUEST,
|
|
21
|
+
message: 'Dados enviados inválidos',
|
|
22
|
+
};
|
|
23
|
+
return filterRequestParams.response
|
|
24
|
+
.status(common_1.HttpStatus.BAD_REQUEST)
|
|
25
|
+
.send(zodResponse);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.ZodErrorsFilter = ZodErrorsFilter = __decorate([
|
|
29
|
+
(0, common_1.Catch)(zod_1.ZodError)
|
|
30
|
+
], ZodErrorsFilter);
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@koalarx/nest",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/igordrangel/koala-nest.git"
|
|
8
|
+
},
|
|
9
|
+
"author": "Igor D. Rangel",
|
|
10
|
+
"license": "UNLICENSED",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/igordrangel/koala-nest/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/igordrangel/koala-nest#readme",
|
|
15
|
+
"types": "./koala-nest.d.ts",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@koalarx/utils": "^3.1.3",
|
|
18
|
+
"@nestjs/common": "10.2.4",
|
|
19
|
+
"@nestjs/config": "3.0.1",
|
|
20
|
+
"@nestjs/core": "10.2.4",
|
|
21
|
+
"@nestjs/jwt": "10.1.1",
|
|
22
|
+
"@nestjs/mapped-types": "2.0.2",
|
|
23
|
+
"@nestjs/passport": "10.0.1",
|
|
24
|
+
"@nestjs/platform-express": "10.2.5",
|
|
25
|
+
"@nestjs/swagger": "7.1.10",
|
|
26
|
+
"@prisma/client": "5.3.1",
|
|
27
|
+
"automapper-classes": "8.7.12",
|
|
28
|
+
"automapper-core": "8.7.12",
|
|
29
|
+
"automapper-nestjs": "8.7.12",
|
|
30
|
+
"bcrypt": "5.1.0",
|
|
31
|
+
"class-transformer": "0.5.1",
|
|
32
|
+
"class-validator": "0.14.0",
|
|
33
|
+
"class-validator-cpf": "1.1.1",
|
|
34
|
+
"cookie-parser": "1.4.6",
|
|
35
|
+
"cpf-cnpj-validator": "1.0.3",
|
|
36
|
+
"dotenv": "16.0.3",
|
|
37
|
+
"express-basic-auth": "1.2.1",
|
|
38
|
+
"googleapis": "118.0.0",
|
|
39
|
+
"ioredis": "5.3.2",
|
|
40
|
+
"passport": "0.6.0",
|
|
41
|
+
"passport-headerapikey": "1.2.2",
|
|
42
|
+
"passport-jwt": "4.0.1",
|
|
43
|
+
"passport-local": "1.0.0",
|
|
44
|
+
"phone": "3.1.40",
|
|
45
|
+
"reflect-metadata": "0.1.13",
|
|
46
|
+
"rimraf": "3.0.2",
|
|
47
|
+
"rxjs": "7.2.0",
|
|
48
|
+
"swagger-ui-express": "4.6.3",
|
|
49
|
+
"zod": "3.22.4",
|
|
50
|
+
"zod-validation-error": "1.5.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@faker-js/faker": "8.0.2",
|
|
54
|
+
"@nestjs/cli": "10.1.17",
|
|
55
|
+
"@nestjs/schematics": "10.0.2",
|
|
56
|
+
"@nestjs/testing": "10.2.4",
|
|
57
|
+
"@rocketseat/eslint-config": "1.2.0",
|
|
58
|
+
"@swc/cli": "0.1.62",
|
|
59
|
+
"@swc/core": "1.3.81",
|
|
60
|
+
"@types/bcrypt": "5.0.0",
|
|
61
|
+
"@types/cookie-parser": "1.4.4",
|
|
62
|
+
"@types/express": "4.17.13",
|
|
63
|
+
"@types/jest": "28.1.4",
|
|
64
|
+
"@types/node": "16.0.0",
|
|
65
|
+
"@types/passport-jwt": "3.0.8",
|
|
66
|
+
"@types/passport-local": "1.0.35",
|
|
67
|
+
"@types/request-ip": "0.0.41",
|
|
68
|
+
"@types/supertest": "2.0.11",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "5.0.0",
|
|
70
|
+
"@typescript-eslint/parser": "5.0.0",
|
|
71
|
+
"@vitest/coverage-v8": "0.34.3",
|
|
72
|
+
"eslint": "8.0.1",
|
|
73
|
+
"eslint-config-prettier": "8.3.0",
|
|
74
|
+
"eslint-plugin-prettier": "4.0.0",
|
|
75
|
+
"eslint-plugin-vitest": "0.2.8",
|
|
76
|
+
"eslint-plugin-vitest-globals": "1.4.0",
|
|
77
|
+
"jest": "28.1.2",
|
|
78
|
+
"prettier": "2.3.2",
|
|
79
|
+
"prisma": "5.3.1",
|
|
80
|
+
"source-map-support": "0.5.20",
|
|
81
|
+
"supertest": "6.1.3",
|
|
82
|
+
"ts-jest": "28.0.5",
|
|
83
|
+
"ts-loader": "9.2.3",
|
|
84
|
+
"ts-node": "10.0.0",
|
|
85
|
+
"tsconfig-paths": "4.0.0",
|
|
86
|
+
"typescript": "5.1.3",
|
|
87
|
+
"unplugin-swc": "1.4.2",
|
|
88
|
+
"vite-tsconfig-paths": "4.2.0",
|
|
89
|
+
"vitest": "0.34.3"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const envSchema: z.ZodObject<{
|
|
4
|
+
PORT: z.ZodDefault<z.ZodNumber>;
|
|
5
|
+
NODE_ENV: z.ZodEnum<["test", "develop", "staging", "production"]>;
|
|
6
|
+
PRISMA_QUERY_LOG: z.ZodBoolean;
|
|
7
|
+
SWAGGER_USERNAME: z.ZodString;
|
|
8
|
+
SWAGGER_PASSWORD: z.ZodString;
|
|
9
|
+
REDIS_CONNECTION_STRING: z.ZodString;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
NODE_ENV: "test" | "develop" | "staging" | "production";
|
|
12
|
+
PORT: number;
|
|
13
|
+
PRISMA_QUERY_LOG: boolean;
|
|
14
|
+
SWAGGER_USERNAME: string;
|
|
15
|
+
SWAGGER_PASSWORD: string;
|
|
16
|
+
REDIS_CONNECTION_STRING: string;
|
|
17
|
+
}, {
|
|
18
|
+
NODE_ENV: "test" | "develop" | "staging" | "production";
|
|
19
|
+
PRISMA_QUERY_LOG: boolean;
|
|
20
|
+
SWAGGER_USERNAME: string;
|
|
21
|
+
SWAGGER_PASSWORD: string;
|
|
22
|
+
REDIS_CONNECTION_STRING: string;
|
|
23
|
+
PORT?: number | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
export type Env = z.infer<typeof envSchema>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.envSchema = void 0;
|
|
4
|
+
require("dotenv/config");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
exports.envSchema = zod_1.z.object({
|
|
7
|
+
PORT: zod_1.z.coerce.number().default(3000),
|
|
8
|
+
NODE_ENV: zod_1.z.enum(['test', 'develop', 'staging', 'production']),
|
|
9
|
+
PRISMA_QUERY_LOG: zod_1.z.coerce.boolean(),
|
|
10
|
+
SWAGGER_USERNAME: zod_1.z.string(),
|
|
11
|
+
SWAGGER_PASSWORD: zod_1.z.string(),
|
|
12
|
+
REDIS_CONNECTION_STRING: zod_1.z.string(),
|
|
13
|
+
});
|