@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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/common/backgroud-services/cron-service/cron-job.d.ts +15 -0
  4. package/common/backgroud-services/cron-service/cron-job.js +47 -0
  5. package/common/backgroud-services/event-service/event-class.d.ts +5 -0
  6. package/common/backgroud-services/event-service/event-class.js +11 -0
  7. package/common/backgroud-services/event-service/event-handler.d.ts +5 -0
  8. package/common/backgroud-services/event-service/event-handler.js +10 -0
  9. package/common/backgroud-services/event-service/event-is-trigger.d.ts +3 -0
  10. package/common/backgroud-services/event-service/event-is-trigger.js +7 -0
  11. package/common/backgroud-services/event-service/event-job.d.ts +10 -0
  12. package/common/backgroud-services/event-service/event-job.js +19 -0
  13. package/common/backgroud-services/event-service/event-queue.d.ts +17 -0
  14. package/common/backgroud-services/event-service/event-queue.js +55 -0
  15. package/common/controllers/base.controller.d.ts +4 -0
  16. package/common/controllers/base.controller.js +6 -0
  17. package/common/controllers/created-registre-response.base.d.ts +3 -0
  18. package/common/controllers/created-registre-response.base.js +17 -0
  19. package/common/controllers/list-response.base.d.ts +4 -0
  20. package/common/controllers/list-response.base.js +17 -0
  21. package/common/controllers/router-config.base.d.ts +7 -0
  22. package/common/controllers/router-config.base.js +18 -0
  23. package/common/controllers/schemas/document-number.schema.d.ts +1 -0
  24. package/common/controllers/schemas/document-number.schema.js +27 -0
  25. package/common/controllers/schemas/email.schema.d.ts +1 -0
  26. package/common/controllers/schemas/email.schema.js +14 -0
  27. package/common/controllers/schemas/list-query.schema.d.ts +17 -0
  28. package/common/controllers/schemas/list-query.schema.js +19 -0
  29. package/common/controllers/schemas/native-enum.schema.d.ts +7 -0
  30. package/common/controllers/schemas/native-enum.schema.js +29 -0
  31. package/common/errors/bad-request.error.d.ts +4 -0
  32. package/common/errors/bad-request.error.js +9 -0
  33. package/common/errors/conflict.error.d.ts +3 -0
  34. package/common/errors/conflict.error.js +9 -0
  35. package/common/errors/no-content.error.d.ts +4 -0
  36. package/common/errors/no-content.error.js +9 -0
  37. package/common/errors/not-allowed.error.d.ts +4 -0
  38. package/common/errors/not-allowed.error.js +9 -0
  39. package/common/errors/resource-not-found.error.d.ts +4 -0
  40. package/common/errors/resource-not-found.error.js +9 -0
  41. package/common/errors/use-case-error.d.ts +3 -0
  42. package/common/errors/use-case-error.js +2 -0
  43. package/common/errors/user-already-exist.error.d.ts +3 -0
  44. package/common/errors/user-already-exist.error.js +9 -0
  45. package/common/errors/wrong-credentials.error.d.ts +3 -0
  46. package/common/errors/wrong-credentials.error.js +9 -0
  47. package/common/mediator/request-handler.base.d.ts +4 -0
  48. package/common/mediator/request-handler.base.js +6 -0
  49. package/common/mediator/request-result.d.ts +15 -0
  50. package/common/mediator/request-result.js +37 -0
  51. package/common/mediator/request-validator.base.d.ts +7 -0
  52. package/common/mediator/request-validator.base.js +17 -0
  53. package/common/models/pagination-params.d.ts +14 -0
  54. package/common/models/pagination-params.js +60 -0
  55. package/core/database/entity.d.ts +8 -0
  56. package/core/database/entity.js +23 -0
  57. package/core/database/repository.base.d.ts +16 -0
  58. package/core/database/repository.base.js +27 -0
  59. package/core/koala-app.d.ts +40 -0
  60. package/core/koala-app.js +94 -0
  61. package/core/koala-nest-database.module.d.ts +13 -0
  62. package/core/koala-nest-database.module.js +37 -0
  63. package/core/koala-nest-http.module.d.ts +12 -0
  64. package/core/koala-nest-http.module.js +38 -0
  65. package/core/koala-nest.module.d.ts +13 -0
  66. package/core/koala-nest.module.js +52 -0
  67. package/core/utils/env.config.d.ts +6 -0
  68. package/core/utils/env.config.js +18 -0
  69. package/core/utils/filter-request-params.d.ts +13 -0
  70. package/core/utils/filter-request-params.js +22 -0
  71. package/core/utils/interfaces/icomparable.d.ts +5 -0
  72. package/core/utils/interfaces/icomparable.js +6 -0
  73. package/core/utils/list.d.ts +24 -0
  74. package/core/utils/list.js +94 -0
  75. package/core/utils/promise-all.d.ts +7 -0
  76. package/core/utils/promise-all.js +19 -0
  77. package/core/utils/set-mask-document-number.d.ts +1 -0
  78. package/core/utils/set-mask-document-number.js +14 -0
  79. package/decorators/api-exclude-endpoint-diff-develop.decorator.d.ts +1 -0
  80. package/decorators/api-exclude-endpoint-diff-develop.decorator.js +9 -0
  81. package/decorators/api-property-only-develop.decorator.d.ts +2 -0
  82. package/decorators/api-property-only-develop.decorator.js +9 -0
  83. package/decorators/cookies.decorator.d.ts +1 -0
  84. package/decorators/cookies.decorator.js +8 -0
  85. package/decorators/is-cnpj.decorator.d.ts +2 -0
  86. package/decorators/is-cnpj.decorator.js +71 -0
  87. package/decorators/is-public.decorator.d.ts +2 -0
  88. package/decorators/is-public.decorator.js +7 -0
  89. package/filters/domain-errors.filter.d.ts +16 -0
  90. package/filters/domain-errors.filter.js +62 -0
  91. package/filters/global-exception.filter.d.ts +7 -0
  92. package/filters/global-exception.filter.js +39 -0
  93. package/filters/prisma-validation-exception.filter.d.ts +8 -0
  94. package/filters/prisma-validation-exception.filter.js +53 -0
  95. package/filters/zod-errors.filter.d.ts +7 -0
  96. package/filters/zod-errors.filter.js +30 -0
  97. package/package.json +91 -0
  98. package/services/env/env.d.ts +25 -0
  99. package/services/env/env.js +13 -0
  100. package/services/env/env.module.d.ts +2 -0
  101. package/services/env/env.module.js +19 -0
  102. package/services/env/env.service.d.ts +14 -0
  103. package/services/env/env.service.js +22 -0
  104. package/services/logging/ilogging.service.d.ts +16 -0
  105. package/services/logging/ilogging.service.js +6 -0
  106. package/services/logging/logging.service.d.ts +4 -0
  107. package/services/logging/logging.service.js +19 -0
  108. package/services/prisma/prisma-client-with-custom-transaction.interface.d.ts +8 -0
  109. package/services/prisma/prisma-client-with-custom-transaction.interface.js +2 -0
  110. package/services/prisma/prisma-transactional-client.d.ts +11 -0
  111. package/services/prisma/prisma-transactional-client.js +25 -0
  112. package/services/prisma/prisma.service.d.ts +13 -0
  113. package/services/prisma/prisma.service.js +38 -0
  114. package/services/prisma/prisma.types.d.ts +36 -0
  115. package/services/prisma/prisma.types.js +15 -0
  116. package/services/redis/iredis.service.d.ts +5 -0
  117. package/services/redis/iredis.service.js +6 -0
  118. package/services/redis/redis.service.d.ts +13 -0
  119. package/services/redis/redis.service.js +53 -0
  120. package/services/redlock/ired-lock.service.d.ts +4 -0
  121. package/services/redlock/ired-lock.service.js +6 -0
  122. package/services/redlock/red-lock.service.d.ts +9 -0
  123. package/services/redlock/red-lock.service.js +40 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Igor D. Rangel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ <p align="center">
2
+ <a href="https://nestjs.com/" target="blank"><img src="https://nestjs.com/img/logo-small.svg" width="120" alt="Nest Logo" /></a>
3
+ </p>
4
+
5
+ <h1 align="center">@koalarx/nest</h1>
6
+
7
+ <p align="center">Uma abstração <a href="https://nestjs.com" target="_blank">Nest.js</a> para APIs escaláveis.</p>
@@ -0,0 +1,15 @@
1
+ import { ILoggingService } from '../../../services/logging/ilogging.service';
2
+ import { IRedLockService } from '../../../services/redlock/ired-lock.service';
3
+ import { RequestResult } from '../../mediator/request-result';
4
+ export type CronJobResponse = RequestResult<Error, null>;
5
+ export declare abstract class CronJob {
6
+ private readonly redlockService;
7
+ private readonly loggingService;
8
+ private readonly loggedUsername;
9
+ private readonly appName;
10
+ readonly timeout: number;
11
+ protected constructor(redlockService: IRedLockService, loggingService: ILoggingService, loggedUsername: string, appName: string, timeInMinutes: number);
12
+ abstract run(): Promise<void>;
13
+ protected abstract isActive(): Promise<boolean>;
14
+ protected start(job: () => Promise<CronJobResponse>): Promise<void>;
15
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CronJob = void 0;
4
+ const delay_1 = require("@koalarx/utils/operators/delay");
5
+ class CronJob {
6
+ redlockService;
7
+ loggingService;
8
+ loggedUsername;
9
+ appName;
10
+ timeout;
11
+ constructor(redlockService, loggingService, loggedUsername, appName, timeInMinutes) {
12
+ this.redlockService = redlockService;
13
+ this.loggingService = loggingService;
14
+ this.loggedUsername = loggedUsername;
15
+ this.appName = appName;
16
+ this.timeout = timeInMinutes * 60 * 1000;
17
+ }
18
+ async start(job) {
19
+ const name = this.constructor.name;
20
+ while (true) {
21
+ if (await this.isActive()) {
22
+ const ttlSecondsLock = this.timeout / 1000;
23
+ const acquiredLock = await this.redlockService.acquiredLock(name, ttlSecondsLock);
24
+ if (acquiredLock) {
25
+ const error = await job()
26
+ .then((result) => {
27
+ if (result.isFailure()) {
28
+ return result.value;
29
+ }
30
+ return null;
31
+ })
32
+ .catch((error) => error);
33
+ if (error) {
34
+ this.loggingService.report({
35
+ error,
36
+ packageName: this.appName,
37
+ loggedUsername: this.loggedUsername,
38
+ });
39
+ }
40
+ }
41
+ }
42
+ await (0, delay_1.klDelay)(this.timeout);
43
+ await this.redlockService.releaseLock(name);
44
+ }
45
+ }
46
+ }
47
+ exports.CronJob = CronJob;
@@ -0,0 +1,5 @@
1
+ export declare abstract class EventClass<TEventJob> {
2
+ eventJob: TEventJob;
3
+ ocurredAt: Date;
4
+ constructor(eventJob: TEventJob);
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventClass = void 0;
4
+ class EventClass {
5
+ eventJob;
6
+ ocurredAt = new Date();
7
+ constructor(eventJob) {
8
+ this.eventJob = eventJob;
9
+ }
10
+ }
11
+ exports.EventClass = EventClass;
@@ -0,0 +1,5 @@
1
+ import { EventClass } from './event-class';
2
+ export declare abstract class EventHandler<TEventJob> {
3
+ setupSubscriptions(): void;
4
+ abstract handleEvent(event: EventClass<TEventJob>): Promise<void>;
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventHandler = void 0;
4
+ const event_queue_1 = require("./event-queue");
5
+ class EventHandler {
6
+ setupSubscriptions() {
7
+ event_queue_1.EventQueue.register(this.handleEvent.bind(this), this.constructor.name);
8
+ }
9
+ }
10
+ exports.EventHandler = EventHandler;
@@ -0,0 +1,3 @@
1
+ export declare class EventIsTrigger {
2
+ isTrigger(): void;
3
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventIsTrigger = void 0;
4
+ class EventIsTrigger {
5
+ isTrigger() { }
6
+ }
7
+ exports.EventIsTrigger = EventIsTrigger;
@@ -0,0 +1,10 @@
1
+ import { Entity } from '../../../core/database/entity';
2
+ import { IComparable } from '../../../core/utils/interfaces/icomparable';
3
+ import { EventClass } from './event-class';
4
+ import { EventQueue } from './event-queue';
5
+ export declare class EventJob<TEntity extends IComparable> extends Entity<TEntity> {
6
+ private _eventQueue;
7
+ get eventQueue(): EventQueue[];
8
+ clearQueue(): void;
9
+ addEvent(event: EventClass<EventJob<TEntity>>): void;
10
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventJob = void 0;
4
+ const entity_1 = require("../../../core/database/entity");
5
+ const event_queue_1 = require("./event-queue");
6
+ class EventJob extends entity_1.Entity {
7
+ _eventQueue = [];
8
+ get eventQueue() {
9
+ return this._eventQueue;
10
+ }
11
+ clearQueue() {
12
+ this._eventQueue = [];
13
+ }
14
+ addEvent(event) {
15
+ this.eventQueue.push(event);
16
+ event_queue_1.EventQueue.markAggregateForDispatch(this);
17
+ }
18
+ }
19
+ exports.EventJob = EventJob;
@@ -0,0 +1,17 @@
1
+ import { IComparableId } from '../../../core/utils/interfaces/icomparable';
2
+ import { EventJob } from './event-job';
3
+ type EventJobCallback = (event: any) => void;
4
+ export declare class EventQueue {
5
+ private static handlersMap;
6
+ private static markedAggregates;
7
+ static markAggregateForDispatch(aggregate: EventJob<any>): void;
8
+ static dispatchEventsForAggregate(id: IComparableId): void;
9
+ static register(callback: EventJobCallback, eventClassName: string): void;
10
+ static clearHandlers(): void;
11
+ static clearMarkedAggregates(): void;
12
+ private static dispatchAggregateEvents;
13
+ private static removeAggregateFromMarkedDispatchList;
14
+ private static findMarkedAggregateByID;
15
+ private static dispatch;
16
+ }
17
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventQueue = void 0;
4
+ class EventQueue {
5
+ static handlersMap = {};
6
+ static markedAggregates = [];
7
+ static markAggregateForDispatch(aggregate) {
8
+ const aggregateFound = !!this.findMarkedAggregateByID(aggregate.id);
9
+ if (!aggregateFound) {
10
+ this.markedAggregates.push(aggregate);
11
+ }
12
+ }
13
+ static dispatchEventsForAggregate(id) {
14
+ const aggregate = this.findMarkedAggregateByID(id);
15
+ if (aggregate) {
16
+ this.dispatchAggregateEvents(aggregate);
17
+ aggregate.clearQueue();
18
+ this.removeAggregateFromMarkedDispatchList(aggregate);
19
+ }
20
+ }
21
+ static register(callback, eventClassName) {
22
+ const wasEventRegisteredBefore = eventClassName in this.handlersMap;
23
+ if (!wasEventRegisteredBefore) {
24
+ this.handlersMap[eventClassName] = [];
25
+ }
26
+ this.handlersMap[eventClassName].push(callback);
27
+ }
28
+ static clearHandlers() {
29
+ this.handlersMap = {};
30
+ }
31
+ static clearMarkedAggregates() {
32
+ this.markedAggregates = [];
33
+ }
34
+ static dispatchAggregateEvents(aggregate) {
35
+ aggregate.eventQueue.forEach((event) => this.dispatch(event));
36
+ }
37
+ static removeAggregateFromMarkedDispatchList(aggregate) {
38
+ const index = this.markedAggregates.findIndex((a) => a.equals(aggregate));
39
+ this.markedAggregates.splice(index, 1);
40
+ }
41
+ static findMarkedAggregateByID(id) {
42
+ return this.markedAggregates.find((aggregate) => aggregate.id === id);
43
+ }
44
+ static dispatch(event) {
45
+ const eventClassName = event.constructor.name;
46
+ const isEventRegistered = eventClassName in this.handlersMap;
47
+ if (isEventRegistered) {
48
+ const handlers = this.handlersMap[eventClassName];
49
+ for (const handler of handlers) {
50
+ handler(event);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ exports.EventQueue = EventQueue;
@@ -0,0 +1,4 @@
1
+ import { Response as HttpResponse } from 'express';
2
+ export declare abstract class IController<Request, Response, Params = any> {
3
+ abstract handle(request: Request, params?: Params, response?: HttpResponse): Promise<Response>;
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IController = void 0;
4
+ class IController {
5
+ }
6
+ exports.IController = IController;
@@ -0,0 +1,3 @@
1
+ export declare abstract class CreatedRegistreResponseBase {
2
+ id: string;
3
+ }
@@ -0,0 +1,17 @@
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.CreatedRegistreResponseBase = void 0;
10
+ const swagger_1 = require("@nestjs/swagger");
11
+ class CreatedRegistreResponseBase {
12
+ id;
13
+ }
14
+ exports.CreatedRegistreResponseBase = CreatedRegistreResponseBase;
15
+ __decorate([
16
+ (0, swagger_1.ApiProperty)()
17
+ ], CreatedRegistreResponseBase.prototype, "id", void 0);
@@ -0,0 +1,4 @@
1
+ export declare abstract class ListResponseBase<TResponse> {
2
+ abstract items: Array<TResponse>;
3
+ count: number;
4
+ }
@@ -0,0 +1,17 @@
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.ListResponseBase = void 0;
10
+ const swagger_1 = require("@nestjs/swagger");
11
+ class ListResponseBase {
12
+ count;
13
+ }
14
+ exports.ListResponseBase = ListResponseBase;
15
+ __decorate([
16
+ (0, swagger_1.ApiProperty)()
17
+ ], ListResponseBase.prototype, "count", void 0);
@@ -0,0 +1,7 @@
1
+ export declare abstract class RouterConfigBase {
2
+ private readonly _tag;
3
+ private readonly _group;
4
+ protected constructor(_tag: string, _group: string);
5
+ get group(): string;
6
+ get tag(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouterConfigBase = void 0;
4
+ class RouterConfigBase {
5
+ _tag;
6
+ _group;
7
+ constructor(_tag, _group) {
8
+ this._tag = _tag;
9
+ this._group = _group;
10
+ }
11
+ get group() {
12
+ return this._group;
13
+ }
14
+ get tag() {
15
+ return this._tag;
16
+ }
17
+ }
18
+ exports.RouterConfigBase = RouterConfigBase;
@@ -0,0 +1 @@
1
+ export declare function documentNumberSchema(value: string): boolean;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.documentNumberSchema = void 0;
4
+ const string_1 = require("@koalarx/utils/operators/string");
5
+ function documentNumberSchema(value) {
6
+ if (value !== '' && value !== 'undefined' && value !== 'null') {
7
+ if (value.includes('.')) {
8
+ if (value.length === 14) {
9
+ return (0, string_1.validateCpf)(value);
10
+ }
11
+ else if (value.length === 18) {
12
+ return (0, string_1.validateCnpj)(value);
13
+ }
14
+ }
15
+ else {
16
+ if (value.length === 11) {
17
+ return (0, string_1.validateCpf)(value);
18
+ }
19
+ else if (value.length === 14) {
20
+ return (0, string_1.validateCnpj)(value);
21
+ }
22
+ }
23
+ return false;
24
+ }
25
+ return true;
26
+ }
27
+ exports.documentNumberSchema = documentNumberSchema;
@@ -0,0 +1 @@
1
+ export declare function emailSchema(email?: string, isRequired?: boolean): string | boolean;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emailSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ function emailSchema(email, isRequired = false) {
6
+ if (isRequired && !email) {
7
+ return false;
8
+ }
9
+ if (!email) {
10
+ return true;
11
+ }
12
+ return zod_1.z.coerce.string().max(50).email().parse(email);
13
+ }
14
+ exports.emailSchema = emailSchema;
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ export declare const LIST_QUERY_SCHEMA: z.ZodObject<{
3
+ page: z.ZodOptional<z.ZodEffects<z.ZodNumber, number, number>>;
4
+ limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
5
+ orderBy: z.ZodOptional<z.ZodString>;
6
+ direction: z.ZodOptional<z.ZodDefault<z.ZodEnum<["asc", "desc"]>>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ page?: number | undefined;
9
+ limit?: number | undefined;
10
+ orderBy?: string | undefined;
11
+ direction?: "asc" | "desc" | undefined;
12
+ }, {
13
+ page?: number | undefined;
14
+ limit?: number | undefined;
15
+ orderBy?: string | undefined;
16
+ direction?: "asc" | "desc" | undefined;
17
+ }>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LIST_QUERY_SCHEMA = void 0;
4
+ const zod_1 = require("zod");
5
+ const pagination_params_1 = require("../../models/pagination-params");
6
+ exports.LIST_QUERY_SCHEMA = zod_1.z.object({
7
+ page: zod_1.z.coerce
8
+ .number()
9
+ .transform((value) => {
10
+ if (value) {
11
+ return value - 1;
12
+ }
13
+ return pagination_params_1.QueryFilterParams.page;
14
+ })
15
+ .optional(),
16
+ limit: zod_1.z.coerce.number().default(pagination_params_1.QueryFilterParams.limit).optional(),
17
+ orderBy: zod_1.z.string().optional(),
18
+ direction: zod_1.z.enum(['asc', 'desc']).default('asc').optional(),
19
+ });
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ interface NativeEnumInterface<TEnum> {
3
+ isOptional: (value: string) => TEnum[keyof TEnum] | undefined;
4
+ isRequired: (value: string) => TEnum[keyof TEnum];
5
+ }
6
+ export declare function nativeEnumSchema<TEnum extends z.EnumLike>(nativeEnum: TEnum): NativeEnumInterface<TEnum>;
7
+ export {};
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nativeEnumSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ function nativeEnumSchema(nativeEnum) {
6
+ return {
7
+ isOptional: (value) => {
8
+ if (value === 'null' || value === '') {
9
+ return undefined;
10
+ }
11
+ return zod_1.z.coerce
12
+ .number()
13
+ .transform((value) => {
14
+ if (value !== undefined) {
15
+ return zod_1.z.nativeEnum(nativeEnum).parse(value);
16
+ }
17
+ return undefined;
18
+ })
19
+ .parse(value);
20
+ },
21
+ isRequired: (value) => {
22
+ return zod_1.z.coerce
23
+ .number()
24
+ .transform((value) => zod_1.z.nativeEnum(nativeEnum).parse(value))
25
+ .parse(value);
26
+ },
27
+ };
28
+ }
29
+ exports.nativeEnumSchema = nativeEnumSchema;
@@ -0,0 +1,4 @@
1
+ import { UseCaseError } from './use-case-error';
2
+ export declare class BadRequestError extends Error implements UseCaseError {
3
+ constructor(message?: string);
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BadRequestError = void 0;
4
+ class BadRequestError extends Error {
5
+ constructor(message) {
6
+ super(message ?? 'Bad Request');
7
+ }
8
+ }
9
+ exports.BadRequestError = BadRequestError;
@@ -0,0 +1,3 @@
1
+ export declare class ConflictError extends Error {
2
+ constructor(identifier: string);
3
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConflictError = void 0;
4
+ class ConflictError extends Error {
5
+ constructor(identifier) {
6
+ super(`O registro ${identifier} já existe.`);
7
+ }
8
+ }
9
+ exports.ConflictError = ConflictError;
@@ -0,0 +1,4 @@
1
+ import { UseCaseError } from './use-case-error';
2
+ export declare class NoContentError extends Error implements UseCaseError {
3
+ constructor(message?: string);
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoContentError = void 0;
4
+ class NoContentError extends Error {
5
+ constructor(message) {
6
+ super(message ?? 'No Content');
7
+ }
8
+ }
9
+ exports.NoContentError = NoContentError;
@@ -0,0 +1,4 @@
1
+ import { UseCaseError } from './use-case-error';
2
+ export declare class NotAllowedError extends Error implements UseCaseError {
3
+ constructor(message?: string);
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotAllowedError = void 0;
4
+ class NotAllowedError extends Error {
5
+ constructor(message) {
6
+ super(message ?? 'Você não tem permissão para utilizar esse recurso.');
7
+ }
8
+ }
9
+ exports.NotAllowedError = NotAllowedError;
@@ -0,0 +1,4 @@
1
+ import { UseCaseError } from './use-case-error';
2
+ export declare class ResourceNotFoundError extends Error implements UseCaseError {
3
+ constructor(name?: string);
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceNotFoundError = void 0;
4
+ class ResourceNotFoundError extends Error {
5
+ constructor(name = 'Recurso') {
6
+ super(`${name} não encontrado(a).`);
7
+ }
8
+ }
9
+ exports.ResourceNotFoundError = ResourceNotFoundError;
@@ -0,0 +1,3 @@
1
+ export interface UseCaseError {
2
+ message: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export declare class UserAlreadyExist extends Error {
2
+ constructor(identifier: string);
3
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserAlreadyExist = void 0;
4
+ class UserAlreadyExist extends Error {
5
+ constructor(identifier) {
6
+ super(`User ${identifier} already exists`);
7
+ }
8
+ }
9
+ exports.UserAlreadyExist = UserAlreadyExist;
@@ -0,0 +1,3 @@
1
+ export declare class WrongCredentialsError extends Error {
2
+ constructor();
3
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WrongCredentialsError = void 0;
4
+ class WrongCredentialsError extends Error {
5
+ constructor() {
6
+ super('Credentials are not valid');
7
+ }
8
+ }
9
+ exports.WrongCredentialsError = WrongCredentialsError;
@@ -0,0 +1,4 @@
1
+ import { RequestResult } from '../../common/mediator/request-result';
2
+ export declare abstract class RequestHandlerBase<TRequest, TResponse extends RequestResult<Error, any>> {
3
+ abstract handle(req: TRequest): Promise<TResponse>;
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestHandlerBase = void 0;
4
+ class RequestHandlerBase {
5
+ }
6
+ exports.RequestHandlerBase = RequestHandlerBase;
@@ -0,0 +1,15 @@
1
+ export declare class Failure<L, R> {
2
+ readonly value: L;
3
+ constructor(value: L);
4
+ isFailure(): this is Failure<L, R>;
5
+ isOk(): this is Ok<L, R>;
6
+ }
7
+ export declare class Ok<L, R> {
8
+ readonly value: R;
9
+ constructor(value: R);
10
+ isFailure(): this is Failure<L, R>;
11
+ isOk(): this is Ok<L, R>;
12
+ }
13
+ export type RequestResult<L, R> = Failure<L, R> | Ok<L, R>;
14
+ export declare const failure: <L, R>(value: L) => RequestResult<L, R>;
15
+ export declare const ok: <L, R>(value: R) => RequestResult<L, R>;