@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,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ok = exports.failure = exports.Ok = exports.Failure = void 0;
|
|
4
|
+
class Failure {
|
|
5
|
+
value;
|
|
6
|
+
constructor(value) {
|
|
7
|
+
this.value = value;
|
|
8
|
+
}
|
|
9
|
+
isFailure() {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
isOk() {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Failure = Failure;
|
|
17
|
+
class Ok {
|
|
18
|
+
value;
|
|
19
|
+
constructor(value) {
|
|
20
|
+
this.value = value;
|
|
21
|
+
}
|
|
22
|
+
isFailure() {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
isOk() {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Ok = Ok;
|
|
30
|
+
const failure = (value) => {
|
|
31
|
+
return new Failure(value);
|
|
32
|
+
};
|
|
33
|
+
exports.failure = failure;
|
|
34
|
+
const ok = (value) => {
|
|
35
|
+
return new Ok(value);
|
|
36
|
+
};
|
|
37
|
+
exports.ok = ok;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestValidatorBase = void 0;
|
|
4
|
+
class RequestValidatorBase {
|
|
5
|
+
_request;
|
|
6
|
+
constructor(_request) {
|
|
7
|
+
this._request = _request;
|
|
8
|
+
}
|
|
9
|
+
validate() {
|
|
10
|
+
const requestParsed = this.schema.safeParse(this._request);
|
|
11
|
+
if (requestParsed.success) {
|
|
12
|
+
return requestParsed.data;
|
|
13
|
+
}
|
|
14
|
+
throw requestParsed.error;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.RequestValidatorBase = RequestValidatorBase;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type QueryDirectionType = 'asc' | 'desc';
|
|
2
|
+
export declare const QueryFilterParams: {
|
|
3
|
+
direction: QueryDirectionType;
|
|
4
|
+
page: number;
|
|
5
|
+
limit: number;
|
|
6
|
+
};
|
|
7
|
+
export declare class PaginationParams {
|
|
8
|
+
page?: number;
|
|
9
|
+
limit?: number;
|
|
10
|
+
orderBy?: string;
|
|
11
|
+
direction?: QueryDirectionType;
|
|
12
|
+
skip(): number;
|
|
13
|
+
generateOrderBy(): {} | undefined;
|
|
14
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.PaginationParams = exports.QueryFilterParams = void 0;
|
|
10
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
11
|
+
exports.QueryFilterParams = {
|
|
12
|
+
direction: 'asc',
|
|
13
|
+
page: 0,
|
|
14
|
+
limit: 30,
|
|
15
|
+
};
|
|
16
|
+
class PaginationParams {
|
|
17
|
+
page = exports.QueryFilterParams.page;
|
|
18
|
+
limit = exports.QueryFilterParams.limit;
|
|
19
|
+
orderBy;
|
|
20
|
+
direction = exports.QueryFilterParams.direction;
|
|
21
|
+
skip() {
|
|
22
|
+
return (this.limit ?? 0) * (this.page ?? exports.QueryFilterParams.page);
|
|
23
|
+
}
|
|
24
|
+
generateOrderBy() {
|
|
25
|
+
if (this.orderBy) {
|
|
26
|
+
const orderByField = this.orderBy.split('.');
|
|
27
|
+
return orderByField.reduceRight((acc, item, index) => ({
|
|
28
|
+
[item]: index === orderByField.length - 1 ? this.direction : acc,
|
|
29
|
+
}), {});
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.PaginationParams = PaginationParams;
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, swagger_1.ApiProperty)({
|
|
37
|
+
required: false,
|
|
38
|
+
format: 'int32',
|
|
39
|
+
default: exports.QueryFilterParams.page,
|
|
40
|
+
})
|
|
41
|
+
], PaginationParams.prototype, "page", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, swagger_1.ApiProperty)({
|
|
44
|
+
required: false,
|
|
45
|
+
format: 'int32',
|
|
46
|
+
default: exports.QueryFilterParams.limit,
|
|
47
|
+
})
|
|
48
|
+
], PaginationParams.prototype, "limit", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, swagger_1.ApiProperty)({
|
|
51
|
+
required: false,
|
|
52
|
+
})
|
|
53
|
+
], PaginationParams.prototype, "orderBy", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, swagger_1.ApiProperty)({
|
|
56
|
+
required: false,
|
|
57
|
+
enum: ['asc', 'desc'],
|
|
58
|
+
default: exports.QueryFilterParams.direction,
|
|
59
|
+
})
|
|
60
|
+
], PaginationParams.prototype, "direction", void 0);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Optional } from '../@types';
|
|
2
|
+
import { IComparable, IComparableId } from '../utils/interfaces/icomparable';
|
|
3
|
+
export type EntityProps<T extends IComparable<T>> = Omit<Optional<T, 'id'>, 'equals'>;
|
|
4
|
+
export declare abstract class Entity<T extends IComparable<T>> implements IComparable<T> {
|
|
5
|
+
id: IComparableId;
|
|
6
|
+
protected create(props: EntityProps<T>): void;
|
|
7
|
+
equals(obj: Entity<T>): boolean;
|
|
8
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
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.Entity = void 0;
|
|
10
|
+
const automapper_classes_1 = require("automapper-classes");
|
|
11
|
+
class Entity {
|
|
12
|
+
id;
|
|
13
|
+
create(props) {
|
|
14
|
+
Object.assign(this, props);
|
|
15
|
+
}
|
|
16
|
+
equals(obj) {
|
|
17
|
+
return obj.id === this.id;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.Entity = Entity;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, automapper_classes_1.AutoMap)()
|
|
23
|
+
], Entity.prototype, "id", void 0);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PaginationParams } from '../../common/models/pagination-params';
|
|
2
|
+
import { PrismaClientWithCustomTransaction } from '../../services/prisma/prisma-client-with-custom-transaction.interface';
|
|
3
|
+
import { PrismaTransactionalClient } from '../../services/prisma/prisma-transactional-client';
|
|
4
|
+
import { Entity } from './entity';
|
|
5
|
+
export interface FindAllProps<TPaginateAndOrdering extends PaginationParams, TWhere, TInclude = any> {
|
|
6
|
+
where: TWhere;
|
|
7
|
+
paginateAndOrderingProps?: TPaginateAndOrdering;
|
|
8
|
+
include?: TInclude;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class RepositoryBase<TEntity extends Entity<TEntity>> {
|
|
11
|
+
protected prisma: PrismaClientWithCustomTransaction;
|
|
12
|
+
private readonly _modelName;
|
|
13
|
+
constructor(prisma: PrismaClientWithCustomTransaction, _modelName: string);
|
|
14
|
+
withTransaction(fn: (prisma: PrismaTransactionalClient) => Promise<any>): Promise<any>;
|
|
15
|
+
protected repository(transactionalClient?: PrismaTransactionalClient): import(".prisma/client").Prisma.TestDelegate<import("@prisma/client/runtime/library").DefaultArgs>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RepositoryBase = void 0;
|
|
4
|
+
const prisma_transactional_client_1 = require("../../services/prisma/prisma-transactional-client");
|
|
5
|
+
const prisma_types_1 = require("../../services/prisma/prisma.types");
|
|
6
|
+
class RepositoryBase {
|
|
7
|
+
prisma;
|
|
8
|
+
_modelName;
|
|
9
|
+
constructor(prisma, _modelName) {
|
|
10
|
+
this.prisma = prisma;
|
|
11
|
+
this._modelName = _modelName;
|
|
12
|
+
}
|
|
13
|
+
withTransaction(fn) {
|
|
14
|
+
return this.prisma.withTransaction(async (client) => {
|
|
15
|
+
return fn(new prisma_transactional_client_1.PrismaTransactionalClient(client));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
repository(transactionalClient) {
|
|
19
|
+
const modelName = this._modelName;
|
|
20
|
+
const prisma = (transactionalClient ?? this.prisma);
|
|
21
|
+
const repository = (0, prisma_types_1.getPrismaDelegate)(modelName, prisma);
|
|
22
|
+
if (!repository)
|
|
23
|
+
throw new Error('Entidade não mapeada no repositório do prisma');
|
|
24
|
+
return repository;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.RepositoryBase = RepositoryBase;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { INestApplication, Type } from '@nestjs/common';
|
|
2
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
3
|
+
import { CronJob } from '../common/backgroud-services/cron-service/cron-job';
|
|
4
|
+
import { EventHandler } from '../common/backgroud-services/event-service/event-handler';
|
|
5
|
+
interface ApiDocConfig {
|
|
6
|
+
endpoint: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
externalDoc?: {
|
|
10
|
+
message: string;
|
|
11
|
+
url: string;
|
|
12
|
+
};
|
|
13
|
+
version: string;
|
|
14
|
+
accessDocWithCredentials?: {
|
|
15
|
+
username: string;
|
|
16
|
+
password: string;
|
|
17
|
+
};
|
|
18
|
+
withAuthorization?: boolean;
|
|
19
|
+
}
|
|
20
|
+
type CronJobClass = string | symbol | Function | Type<CronJob>;
|
|
21
|
+
export declare class KoalaApp {
|
|
22
|
+
private readonly app;
|
|
23
|
+
private _globalExceptionFilter;
|
|
24
|
+
private _prismaValidationExceptionFilter;
|
|
25
|
+
private _domainExceptionFilter;
|
|
26
|
+
private _zodExceptionFilter;
|
|
27
|
+
private _cronJobs;
|
|
28
|
+
private _eventJobs;
|
|
29
|
+
constructor(app: INestApplication<any>);
|
|
30
|
+
addCronJob(job: CronJobClass): this;
|
|
31
|
+
addEventJob(eventJob: EventHandler<any>): this;
|
|
32
|
+
addCustomGlobalExceptionFilter(filter: BaseExceptionFilter): this;
|
|
33
|
+
addCustomPrismaValidationExceptionFilter(filter: BaseExceptionFilter): this;
|
|
34
|
+
addCustomDomainExceptionFilter(filter: BaseExceptionFilter): this;
|
|
35
|
+
addCustomZodExceptionFilter(filter: BaseExceptionFilter): this;
|
|
36
|
+
includeSwagger(config: ApiDocConfig): this;
|
|
37
|
+
enableCors(): this;
|
|
38
|
+
build(): Promise<INestApplication<any>>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KoalaApp = void 0;
|
|
4
|
+
const core_1 = require("@nestjs/core");
|
|
5
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
6
|
+
const express_basic_auth_1 = require("express-basic-auth");
|
|
7
|
+
const domain_errors_filter_1 = require("../filters/domain-errors.filter");
|
|
8
|
+
const global_exception_filter_1 = require("../filters/global-exception.filter");
|
|
9
|
+
const prisma_validation_exception_filter_1 = require("../filters/prisma-validation-exception.filter");
|
|
10
|
+
const zod_errors_filter_1 = require("../filters/zod-errors.filter");
|
|
11
|
+
const env_config_1 = require("./utils/env.config");
|
|
12
|
+
class KoalaApp {
|
|
13
|
+
app;
|
|
14
|
+
_globalExceptionFilter;
|
|
15
|
+
_prismaValidationExceptionFilter;
|
|
16
|
+
_domainExceptionFilter;
|
|
17
|
+
_zodExceptionFilter;
|
|
18
|
+
_cronJobs = [];
|
|
19
|
+
_eventJobs = [];
|
|
20
|
+
constructor(app) {
|
|
21
|
+
this.app = app;
|
|
22
|
+
const { httpAdapter } = app.get(core_1.HttpAdapterHost);
|
|
23
|
+
this._globalExceptionFilter = new global_exception_filter_1.GlobalExceptionsFilter(httpAdapter);
|
|
24
|
+
this._prismaValidationExceptionFilter =
|
|
25
|
+
new prisma_validation_exception_filter_1.PrismaValidationExceptionFilter();
|
|
26
|
+
this._domainExceptionFilter = new domain_errors_filter_1.DomainErrorsFilter();
|
|
27
|
+
this._zodExceptionFilter = new zod_errors_filter_1.ZodErrorsFilter();
|
|
28
|
+
}
|
|
29
|
+
addCronJob(job) {
|
|
30
|
+
this._cronJobs.push(job);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
addEventJob(eventJob) {
|
|
34
|
+
this._eventJobs.push(eventJob);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
addCustomGlobalExceptionFilter(filter) {
|
|
38
|
+
this._globalExceptionFilter = filter;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
addCustomPrismaValidationExceptionFilter(filter) {
|
|
42
|
+
this._prismaValidationExceptionFilter = filter;
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
addCustomDomainExceptionFilter(filter) {
|
|
46
|
+
this._domainExceptionFilter = filter;
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
addCustomZodExceptionFilter(filter) {
|
|
50
|
+
this._zodExceptionFilter = filter;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
includeSwagger(config) {
|
|
54
|
+
if (env_config_1.EnvConfig.isEnvDevelop && config.accessDocWithCredentials) {
|
|
55
|
+
this.app.use([config.endpoint], (0, express_basic_auth_1.default)({
|
|
56
|
+
challenge: true,
|
|
57
|
+
users: {
|
|
58
|
+
[config.accessDocWithCredentials.username]: config.accessDocWithCredentials.password,
|
|
59
|
+
},
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
const documentBuilder = new swagger_1.DocumentBuilder()
|
|
63
|
+
.setTitle(config.title)
|
|
64
|
+
.setVersion(config.version);
|
|
65
|
+
if (config.description) {
|
|
66
|
+
documentBuilder.setDescription(config.description);
|
|
67
|
+
}
|
|
68
|
+
if (config.externalDoc) {
|
|
69
|
+
documentBuilder.setExternalDoc(config.externalDoc.message, config.externalDoc.url);
|
|
70
|
+
}
|
|
71
|
+
if (config.withAuthorization) {
|
|
72
|
+
documentBuilder.addBearerAuth();
|
|
73
|
+
}
|
|
74
|
+
const document = swagger_1.SwaggerModule.createDocument(this.app, documentBuilder.build());
|
|
75
|
+
const swaggerEndpoint = config.endpoint;
|
|
76
|
+
swagger_1.SwaggerModule.setup(swaggerEndpoint, this.app, document);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
enableCors() {
|
|
80
|
+
this.app.enableCors({
|
|
81
|
+
credentials: true,
|
|
82
|
+
origin: true,
|
|
83
|
+
optionsSuccessStatus: 200,
|
|
84
|
+
});
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
async build() {
|
|
88
|
+
this.app.useGlobalFilters(this._globalExceptionFilter, this._prismaValidationExceptionFilter, this._domainExceptionFilter, this._zodExceptionFilter);
|
|
89
|
+
Promise.all(this._cronJobs.map((job) => this.app.resolve(job))).then((cronJobs) => cronJobs.forEach((job) => job.run()));
|
|
90
|
+
this._eventJobs.forEach((eventJob) => eventJob.setupSubscriptions());
|
|
91
|
+
return this.app;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.KoalaApp = KoalaApp;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DynamicModule, InjectionToken, Type } from '@nestjs/common';
|
|
2
|
+
import { RepositoryBase } from '../core/database/repository.base';
|
|
3
|
+
export interface KoalaNestDatabaseRepositoryConfig {
|
|
4
|
+
interface: InjectionToken;
|
|
5
|
+
class: Type<RepositoryBase<any>>;
|
|
6
|
+
}
|
|
7
|
+
interface KoalaNestDatabaseModuleConfig {
|
|
8
|
+
repositories?: KoalaNestDatabaseRepositoryConfig[];
|
|
9
|
+
}
|
|
10
|
+
export declare class KoalaNestDatabaseModule {
|
|
11
|
+
static forRoot(config: KoalaNestDatabaseModuleConfig): DynamicModule;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
var KoalaNestDatabaseModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.KoalaNestDatabaseModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const env_service_1 = require("../services/env/env.service");
|
|
13
|
+
const prisma_service_1 = require("../services/prisma/prisma.service");
|
|
14
|
+
let KoalaNestDatabaseModule = exports.KoalaNestDatabaseModule = KoalaNestDatabaseModule_1 = class KoalaNestDatabaseModule {
|
|
15
|
+
static forRoot(config) {
|
|
16
|
+
return {
|
|
17
|
+
module: KoalaNestDatabaseModule_1,
|
|
18
|
+
providers: config.repositories?.map((repository) => ({
|
|
19
|
+
provide: repository.interface,
|
|
20
|
+
useClass: repository.class,
|
|
21
|
+
})),
|
|
22
|
+
exports: config.repositories?.map((repository) => repository.interface),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.KoalaNestDatabaseModule = KoalaNestDatabaseModule = KoalaNestDatabaseModule_1 = __decorate([
|
|
27
|
+
(0, common_1.Module)({
|
|
28
|
+
providers: [
|
|
29
|
+
{
|
|
30
|
+
provide: 'PRISMA_SERVICE_TOKEN',
|
|
31
|
+
useClass: prisma_service_1.PrismaService,
|
|
32
|
+
},
|
|
33
|
+
env_service_1.EnvService,
|
|
34
|
+
],
|
|
35
|
+
exports: ['PRISMA_SERVICE_TOKEN'],
|
|
36
|
+
})
|
|
37
|
+
], KoalaNestDatabaseModule);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DynamicModule, MiddlewareConsumer, NestMiddleware, NestModule, Provider, Type } from '@nestjs/common';
|
|
2
|
+
import { AutomapperProfile } from 'automapper-nestjs';
|
|
3
|
+
interface KoalaNestHttpModuleConfig {
|
|
4
|
+
automapperProfile: Provider<AutomapperProfile>;
|
|
5
|
+
middlewares: Type<NestMiddleware>[];
|
|
6
|
+
}
|
|
7
|
+
export declare class KoalaNestHttpModule implements NestModule {
|
|
8
|
+
private static _config;
|
|
9
|
+
static forRoot(config: KoalaNestHttpModuleConfig): DynamicModule;
|
|
10
|
+
configure(consumer: MiddlewareConsumer): void;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
var KoalaNestHttpModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.KoalaNestHttpModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const automapper_classes_1 = require("automapper-classes");
|
|
13
|
+
const automapper_nestjs_1 = require("automapper-nestjs");
|
|
14
|
+
const env_service_1 = require("../services/env/env.service");
|
|
15
|
+
let KoalaNestHttpModule = exports.KoalaNestHttpModule = class KoalaNestHttpModule {
|
|
16
|
+
static { KoalaNestHttpModule_1 = this; }
|
|
17
|
+
static _config;
|
|
18
|
+
static forRoot(config) {
|
|
19
|
+
this._config = config;
|
|
20
|
+
return {
|
|
21
|
+
module: KoalaNestHttpModule_1,
|
|
22
|
+
providers: [config.automapperProfile],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
configure(consumer) {
|
|
26
|
+
KoalaNestHttpModule_1._config.middlewares.forEach((middleware) => consumer.apply(middleware).forRoutes('*'));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.KoalaNestHttpModule = KoalaNestHttpModule = KoalaNestHttpModule_1 = __decorate([
|
|
30
|
+
(0, common_1.Module)({
|
|
31
|
+
imports: [
|
|
32
|
+
automapper_nestjs_1.AutomapperModule.forRoot({
|
|
33
|
+
strategyInitializer: (0, automapper_classes_1.classes)(),
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
36
|
+
providers: [env_service_1.EnvService],
|
|
37
|
+
})
|
|
38
|
+
], KoalaNestHttpModule);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DynamicModule, Provider } from '@nestjs/common';
|
|
2
|
+
import { ZodType } from 'zod';
|
|
3
|
+
import { ILoggingService } from '../services/logging/ilogging.service';
|
|
4
|
+
import { KoalaNestDatabaseRepositoryConfig } from './koala-nest-database.module';
|
|
5
|
+
interface KoalaNestModuleConfig {
|
|
6
|
+
logging?: Provider<ILoggingService>;
|
|
7
|
+
env?: ZodType;
|
|
8
|
+
repositories?: KoalaNestDatabaseRepositoryConfig[];
|
|
9
|
+
}
|
|
10
|
+
export declare class KoalaNestModule {
|
|
11
|
+
static forRoot({ env, logging, repositories, }: KoalaNestModuleConfig): DynamicModule;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
var KoalaNestModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.KoalaNestModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const config_1 = require("@nestjs/config");
|
|
13
|
+
const env_1 = require("../services/env/env");
|
|
14
|
+
const env_service_1 = require("../services/env/env.service");
|
|
15
|
+
const ilogging_service_1 = require("../services/logging/ilogging.service");
|
|
16
|
+
const logging_service_1 = require("../services/logging/logging.service");
|
|
17
|
+
const iredis_service_1 = require("../services/redis/iredis.service");
|
|
18
|
+
const redis_service_1 = require("../services/redis/redis.service");
|
|
19
|
+
const ired_lock_service_1 = require("../services/redlock/ired-lock.service");
|
|
20
|
+
const red_lock_service_1 = require("../services/redlock/red-lock.service");
|
|
21
|
+
const koala_nest_database_module_1 = require("./koala-nest-database.module");
|
|
22
|
+
let KoalaNestModule = exports.KoalaNestModule = KoalaNestModule_1 = class KoalaNestModule {
|
|
23
|
+
static forRoot({ env, logging, repositories, }) {
|
|
24
|
+
return {
|
|
25
|
+
module: KoalaNestModule_1,
|
|
26
|
+
imports: [
|
|
27
|
+
config_1.ConfigModule.forRoot({
|
|
28
|
+
validate: (envData) => (env ?? env_1.envSchema).parse(envData),
|
|
29
|
+
isGlobal: true,
|
|
30
|
+
}),
|
|
31
|
+
koala_nest_database_module_1.KoalaNestDatabaseModule.forRoot({
|
|
32
|
+
repositories,
|
|
33
|
+
}),
|
|
34
|
+
],
|
|
35
|
+
providers: [
|
|
36
|
+
{
|
|
37
|
+
provide: ilogging_service_1.ILoggingService,
|
|
38
|
+
useValue: logging ?? logging_service_1.LoggingService,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.KoalaNestModule = KoalaNestModule = KoalaNestModule_1 = __decorate([
|
|
45
|
+
(0, common_1.Module)({
|
|
46
|
+
providers: [
|
|
47
|
+
{ provide: iredis_service_1.IRedisService, useClass: redis_service_1.RedisService },
|
|
48
|
+
{ provide: ired_lock_service_1.IRedLockService, useClass: red_lock_service_1.RedLockService },
|
|
49
|
+
env_service_1.EnvService,
|
|
50
|
+
],
|
|
51
|
+
})
|
|
52
|
+
], KoalaNestModule);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnvConfig = void 0;
|
|
4
|
+
class EnvConfig {
|
|
5
|
+
static get isEnvTest() {
|
|
6
|
+
return process.env.NODE_ENV === 'test';
|
|
7
|
+
}
|
|
8
|
+
static get isEnvDevelop() {
|
|
9
|
+
return process.env.NODE_ENV === 'develop';
|
|
10
|
+
}
|
|
11
|
+
static get isEnvStaging() {
|
|
12
|
+
return process.env.NODE_ENV === 'staging';
|
|
13
|
+
}
|
|
14
|
+
static get isEnvProduction() {
|
|
15
|
+
return process.env.NODE_ENV === 'production';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.EnvConfig = EnvConfig;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ArgumentsHost } from '@nestjs/common/interfaces';
|
|
2
|
+
import { Response } from 'express';
|
|
3
|
+
export declare class FilterRequestParams {
|
|
4
|
+
static get(host: ArgumentsHost): {
|
|
5
|
+
response: Response<any, Record<string, any>>;
|
|
6
|
+
loggedUserName: string;
|
|
7
|
+
filterParams: {
|
|
8
|
+
method: string;
|
|
9
|
+
payload: any;
|
|
10
|
+
endpoint: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterRequestParams = void 0;
|
|
4
|
+
class FilterRequestParams {
|
|
5
|
+
static get(host) {
|
|
6
|
+
const ctx = host.switchToHttp();
|
|
7
|
+
const response = ctx.getResponse();
|
|
8
|
+
const request = ctx.getRequest();
|
|
9
|
+
const method = request.method;
|
|
10
|
+
const isGetMethod = method === 'GET';
|
|
11
|
+
return {
|
|
12
|
+
response,
|
|
13
|
+
loggedUserName: request?.user?.login ?? request.headers.origin ?? request.ip ?? '',
|
|
14
|
+
filterParams: {
|
|
15
|
+
method,
|
|
16
|
+
payload: !isGetMethod ? request.body : undefined,
|
|
17
|
+
endpoint: request.url,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.FilterRequestParams = FilterRequestParams;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IComparableId } from './interfaces/icomparable';
|
|
2
|
+
export type ListActionType = 'added' | 'updated' | 'removed';
|
|
3
|
+
export declare class List<T> {
|
|
4
|
+
private _list;
|
|
5
|
+
private _addedItemsList;
|
|
6
|
+
private _updatedItemsList;
|
|
7
|
+
private _removedItemsList;
|
|
8
|
+
constructor(list?: T[]);
|
|
9
|
+
get length(): number;
|
|
10
|
+
findById(id: IComparableId): T | null;
|
|
11
|
+
findByValue(value: any): T | null;
|
|
12
|
+
add(item: T): void;
|
|
13
|
+
remove(item: T): void;
|
|
14
|
+
clear(): void;
|
|
15
|
+
forEach(callback: (item: T, index: number) => void): void;
|
|
16
|
+
forEachAsync(callback: (item: T, index: number) => Promise<void>): Promise<void[]>;
|
|
17
|
+
map<U>(callback: (item: T, index: number) => U): List<U>;
|
|
18
|
+
mapAsync<U>(callback: (item: T, index: number) => Promise<U>): Promise<List<U>>;
|
|
19
|
+
filter(callback: (item: T, index: number) => boolean): List<T>;
|
|
20
|
+
filterAsync(callback: (item: T, index: number) => Promise<boolean>): Promise<List<T>>;
|
|
21
|
+
toArray(type?: ListActionType): T[];
|
|
22
|
+
private indexOf;
|
|
23
|
+
private contains;
|
|
24
|
+
}
|