mm-share-lib 0.0.4 → 0.0.5

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 (113) hide show
  1. package/.eslintrc.js +25 -25
  2. package/.prettierrc +3 -3
  3. package/README.md +73 -73
  4. package/dist/src/exception/bad-request-error.exception.d.ts +4 -0
  5. package/dist/src/exception/bad-request-error.exception.js +12 -0
  6. package/dist/src/exception/bad-request-error.exception.js.map +1 -0
  7. package/dist/src/exception/base.exception.d.ts +21 -0
  8. package/dist/src/exception/base.exception.js +16 -0
  9. package/dist/src/exception/base.exception.js.map +1 -0
  10. package/dist/src/exception/conflict-error.exception.d.ts +4 -0
  11. package/dist/src/exception/conflict-error.exception.js +12 -0
  12. package/dist/src/exception/conflict-error.exception.js.map +1 -0
  13. package/dist/src/exception/forbidden-error.exception.d.ts +4 -0
  14. package/dist/src/exception/forbidden-error.exception.js +12 -0
  15. package/dist/src/exception/forbidden-error.exception.js.map +1 -0
  16. package/dist/src/exception/index.d.ts +7 -0
  17. package/dist/src/exception/index.js +23 -0
  18. package/dist/src/exception/index.js.map +1 -1
  19. package/dist/src/exception/internal-server-error.exception.d.ts +4 -0
  20. package/dist/src/exception/internal-server-error.exception.js +12 -0
  21. package/dist/src/exception/internal-server-error.exception.js.map +1 -0
  22. package/dist/src/exception/not-found-error.exception.d.ts +4 -0
  23. package/dist/src/exception/not-found-error.exception.js +12 -0
  24. package/dist/src/exception/not-found-error.exception.js.map +1 -0
  25. package/dist/src/exception/unauthorized-error.exception.d.ts +4 -0
  26. package/dist/src/exception/unauthorized-error.exception.js +12 -0
  27. package/dist/src/exception/unauthorized-error.exception.js.map +1 -0
  28. package/dist/src/filter/http-exception.filter.d.ts +4 -0
  29. package/dist/src/filter/http-exception.filter.js +27 -0
  30. package/dist/src/filter/http-exception.filter.js.map +1 -0
  31. package/dist/src/filter/index.d.ts +1 -0
  32. package/dist/src/filter/index.js +18 -0
  33. package/dist/src/filter/index.js.map +1 -0
  34. package/dist/src/index.d.ts +2 -0
  35. package/dist/src/index.js +2 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/setup/index.d.ts +1 -0
  38. package/dist/src/setup/index.js +18 -0
  39. package/dist/src/setup/index.js.map +1 -0
  40. package/dist/src/setup/microservice.setup.d.ts +2 -0
  41. package/dist/src/setup/microservice.setup.js +25 -0
  42. package/dist/src/setup/microservice.setup.js.map +1 -0
  43. package/dist/src/setup/swagger.setup.d.ts +0 -0
  44. package/dist/src/setup/swagger.setup.js +1 -0
  45. package/dist/src/setup/swagger.setup.js.map +1 -0
  46. package/dist/src/util/app.utils.d.ts +4 -0
  47. package/dist/src/util/app.utils.js +21 -0
  48. package/dist/src/util/app.utils.js.map +1 -0
  49. package/dist/src/util/index.d.ts +1 -0
  50. package/dist/src/util/index.js +1 -0
  51. package/dist/src/util/index.js.map +1 -1
  52. package/dist/tsconfig.build.tsbuildinfo +1 -1
  53. package/index.ts +1 -1
  54. package/nest-cli.json +8 -8
  55. package/package.json +82 -81
  56. package/src/constant/entity-state.constant.ts +4 -4
  57. package/src/constant/index.ts +1 -1
  58. package/src/dto/base-filter.dto.ts +4 -4
  59. package/src/dto/index.ts +2 -2
  60. package/src/dto/pagination.dto.ts +4 -4
  61. package/src/exception/bad-request-error.exception.spec.ts +24 -0
  62. package/src/exception/bad-request-error.exception.ts +8 -0
  63. package/src/exception/base.exception.ts +36 -0
  64. package/src/exception/conflict-error.exception.spec.ts +23 -0
  65. package/src/exception/conflict-error.exception.ts +8 -0
  66. package/src/exception/forbidden-error.exception.spec.ts +23 -0
  67. package/src/exception/forbidden-error.exception.ts +8 -0
  68. package/src/exception/index.ts +7 -0
  69. package/src/exception/internal-server-error.exception.spec.ts +23 -0
  70. package/src/exception/internal-server-error.exception.ts +12 -0
  71. package/src/exception/not-found-error.exception.spec.ts +23 -0
  72. package/src/exception/not-found-error.exception.ts +8 -0
  73. package/src/exception/unauthorized-error.exception.spec.ts +23 -0
  74. package/src/exception/unauthorized-error.exception.ts +12 -0
  75. package/src/filter/http-exception.filter.ts +23 -0
  76. package/src/filter/index.ts +1 -0
  77. package/src/generic/entity/entity.generic.ts +34 -34
  78. package/src/generic/entity/index.ts +1 -1
  79. package/src/generic/index.ts +2 -2
  80. package/src/generic/service/index.ts +1 -1
  81. package/src/generic/service/service.generic.ts +112 -112
  82. package/src/index.ts +2 -0
  83. package/src/lib/index.ts +1 -1
  84. package/src/lib/search-engine/document/base.document.ts +2 -2
  85. package/src/lib/search-engine/index.ts +1 -1
  86. package/src/lib/search-engine/interface/index.ts +1 -1
  87. package/src/lib/search-engine/interface/search-document.interface.ts +5 -5
  88. package/src/lib/search-engine/interface/transform-service.interface.ts +10 -10
  89. package/src/lib/search-engine/typesense/index.ts +3 -3
  90. package/src/lib/search-engine/typesense/metadata/index.ts +1 -1
  91. package/src/lib/search-engine/typesense/metadata/schema.metadata.ts +13 -13
  92. package/src/lib/search-engine/typesense/metadata/typesense.metadata-registry.ts +28 -28
  93. package/src/lib/search-engine/typesense/service/client.service.ts +258 -258
  94. package/src/lib/search-engine/typesense/typesense-module.interface.ts +36 -36
  95. package/src/lib/search-engine/typesense/typesense.constants.ts +1 -1
  96. package/src/lib/search-engine/typesense/typesense.module.test.ts +94 -94
  97. package/src/lib/search-engine/typesense/typesense.module.ts +76 -76
  98. package/src/lib/search-engine/typesense/typesense.providers.ts +42 -42
  99. package/src/response/index.ts +1 -1
  100. package/src/response/pagination.response.ts +37 -37
  101. package/src/setup/index.ts +1 -0
  102. package/src/setup/microservice.setup.ts +29 -0
  103. package/src/setup/swagger.setup.ts +0 -0
  104. package/src/util/app.utils.ts +18 -0
  105. package/src/util/date.util.spec.ts +49 -49
  106. package/src/util/date.util.ts +10 -10
  107. package/src/util/generator.util.spec.ts +79 -79
  108. package/src/util/generator.util.ts +34 -34
  109. package/src/util/index.ts +3 -2
  110. package/test/app.e2e-spec.ts +24 -24
  111. package/test/jest-e2e.json +9 -9
  112. package/tsconfig.build.json +4 -4
  113. package/tsconfig.json +21 -21
package/index.ts CHANGED
@@ -1 +1 @@
1
- export * from './src';
1
+ export * from './src';
package/nest-cli.json CHANGED
@@ -1,8 +1,8 @@
1
- {
2
- "$schema": "https://json.schemastore.org/nest-cli",
3
- "collection": "@nestjs/schematics",
4
- "sourceRoot": "src",
5
- "compilerOptions": {
6
- "deleteOutDir": true
7
- }
8
- }
1
+ {
2
+ "$schema": "https://json.schemastore.org/nest-cli",
3
+ "collection": "@nestjs/schematics",
4
+ "sourceRoot": "src",
5
+ "compilerOptions": {
6
+ "deleteOutDir": true
7
+ }
8
+ }
package/package.json CHANGED
@@ -1,81 +1,82 @@
1
- {
2
- "name": "mm-share-lib",
3
- "version": "0.0.4",
4
- "description": "Share the generic service, entity, dto.",
5
- "author": "Mesa SOT",
6
- "license": "MIT",
7
- "main": "dist/index.js",
8
- "types": "dist/index.d.ts",
9
- "scripts": {
10
- "build": "nest build",
11
- "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
12
- "start": "nest start",
13
- "start:dev": "nest start --watch",
14
- "start:debug": "nest start --debug --watch",
15
- "start:prod": "node dist/main",
16
- "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
17
- "test": "jest",
18
- "test:watch": "jest --watch",
19
- "test:cov": "jest --coverage",
20
- "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
21
- "test:e2e": "jest --config ./test/jest-e2e.json",
22
- "prepare": "husky install"
23
- },
24
- "dependencies": {
25
- "@babel/runtime": "^7.22.5",
26
- "@nestjs/common": "^9.4.2",
27
- "@nestjs/core": "^9.4.2",
28
- "@nestjs/platform-express": "^9.4.2",
29
- "@nestjs/typeorm": "^9.0.1",
30
- "class-transformer": "^0.5.1",
31
- "class-validator": "^0.14.0",
32
- "dayjs": "^1.11.8",
33
- "reflect-metadata": "^0.1.13",
34
- "rxjs": "^7.8.1",
35
- "typeorm": "^0.3.16",
36
- "bcrypt": "^5.1.0",
37
- "typesense": "^1.5.4"
38
- },
39
- "devDependencies": {
40
- "@nestjs/cli": "^9.5.0",
41
- "@nestjs/schematics": "^9.2.0",
42
- "@nestjs/testing": "^9.4.2",
43
- "@types/bcrypt": "^5.0.0",
44
- "@types/express": "^4.17.17",
45
- "@types/jest": "29.5.2",
46
- "@types/node": "20.2.5",
47
- "@types/supertest": "^2.0.12",
48
- "@typescript-eslint/eslint-plugin": "^5.59.9",
49
- "@typescript-eslint/parser": "^5.59.9",
50
- "eslint": "^8.42.0",
51
- "eslint-config-prettier": "^8.8.0",
52
- "eslint-plugin-prettier": "^4.2.1",
53
- "husky": "^8.0.3",
54
- "jest": "29.5.0",
55
- "prettier": "^2.8.8",
56
- "source-map-support": "^0.5.21",
57
- "supertest": "^6.3.3",
58
- "ts-jest": "29.1.0",
59
- "ts-loader": "^9.4.3",
60
- "ts-node": "^10.9.1",
61
- "tsconfig-paths": "4.2.0",
62
- "typescript": "^5.1.3"
63
- },
64
- "jest": {
65
- "moduleFileExtensions": [
66
- "js",
67
- "json",
68
- "ts"
69
- ],
70
- "rootDir": "src",
71
- "testRegex": ".*\\.spec\\.ts$",
72
- "transform": {
73
- "^.+\\.(t|j)s$": "ts-jest"
74
- },
75
- "collectCoverageFrom": [
76
- "**/*.(t|j)s"
77
- ],
78
- "coverageDirectory": "../coverage",
79
- "testEnvironment": "node"
80
- }
81
- }
1
+ {
2
+ "name": "mm-share-lib",
3
+ "version": "0.0.5",
4
+ "description": "Share the generic service, entity, dto.",
5
+ "author": "Mesa SOT",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "scripts": {
10
+ "build": "nest build",
11
+ "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
12
+ "start": "nest start",
13
+ "start:dev": "nest start --watch",
14
+ "start:debug": "nest start --debug --watch",
15
+ "start:prod": "node dist/main",
16
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
17
+ "test": "jest",
18
+ "test:watch": "jest --watch",
19
+ "test:cov": "jest --coverage",
20
+ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
21
+ "test:e2e": "jest --config ./test/jest-e2e.json",
22
+ "prepare": "husky install"
23
+ },
24
+ "dependencies": {
25
+ "@babel/runtime": "^7.22.5",
26
+ "@nestjs/common": "^9.4.2",
27
+ "@nestjs/core": "^9.4.2",
28
+ "@nestjs/microservices": "^9.4.3",
29
+ "@nestjs/platform-express": "^9.4.2",
30
+ "@nestjs/typeorm": "^9.0.1",
31
+ "class-transformer": "^0.5.1",
32
+ "class-validator": "^0.14.0",
33
+ "dayjs": "^1.11.8",
34
+ "reflect-metadata": "^0.1.13",
35
+ "rxjs": "^7.8.1",
36
+ "typeorm": "^0.3.16",
37
+ "bcrypt": "^5.1.0",
38
+ "typesense": "^1.5.4"
39
+ },
40
+ "devDependencies": {
41
+ "@nestjs/cli": "^9.5.0",
42
+ "@nestjs/schematics": "^9.2.0",
43
+ "@nestjs/testing": "^9.4.2",
44
+ "@types/bcrypt": "^5.0.0",
45
+ "@types/express": "^4.17.17",
46
+ "@types/jest": "29.5.2",
47
+ "@types/node": "20.2.5",
48
+ "@types/supertest": "^2.0.12",
49
+ "@typescript-eslint/eslint-plugin": "^5.59.9",
50
+ "@typescript-eslint/parser": "^5.59.9",
51
+ "eslint": "^8.42.0",
52
+ "eslint-config-prettier": "^8.8.0",
53
+ "eslint-plugin-prettier": "^4.2.1",
54
+ "husky": "^8.0.3",
55
+ "jest": "29.5.0",
56
+ "prettier": "^2.8.8",
57
+ "source-map-support": "^0.5.21",
58
+ "supertest": "^6.3.3",
59
+ "ts-jest": "29.1.0",
60
+ "ts-loader": "^9.4.3",
61
+ "ts-node": "^10.9.1",
62
+ "tsconfig-paths": "4.2.0",
63
+ "typescript": "^5.1.3"
64
+ },
65
+ "jest": {
66
+ "moduleFileExtensions": [
67
+ "js",
68
+ "json",
69
+ "ts"
70
+ ],
71
+ "rootDir": "src",
72
+ "testRegex": ".*\\.spec\\.ts$",
73
+ "transform": {
74
+ "^.+\\.(t|j)s$": "ts-jest"
75
+ },
76
+ "collectCoverageFrom": [
77
+ "**/*.(t|j)s"
78
+ ],
79
+ "coverageDirectory": "../coverage",
80
+ "testEnvironment": "node"
81
+ }
82
+ }
@@ -1,4 +1,4 @@
1
- export enum EntityStateConstant {
2
- Active = 1,
3
- Archived = 0,
4
- }
1
+ export enum EntityStateConstant {
2
+ Active = 1,
3
+ Archived = 0,
4
+ }
@@ -1 +1 @@
1
- export * from './entity-state.constant';
1
+ export * from './entity-state.constant';
@@ -1,4 +1,4 @@
1
- export abstract class BaseFilterDto {
2
- excludeIds: number[] = undefined;
3
- includeIds: number[] = undefined;
4
- }
1
+ export abstract class BaseFilterDto {
2
+ excludeIds: number[] = undefined;
3
+ includeIds: number[] = undefined;
4
+ }
package/src/dto/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from './pagination.dto';
2
- export * from './base-filter.dto';
1
+ export * from './pagination.dto';
2
+ export * from './base-filter.dto';
@@ -1,4 +1,4 @@
1
- export class PaginationDto {
2
- limit = 25;
3
- offset = 0;
4
- }
1
+ export class PaginationDto {
2
+ limit = 25;
3
+ offset = 0;
4
+ }
@@ -0,0 +1,24 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BadRequestException } from './bad-request-error.exception';
3
+
4
+ describe('BadRequestException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new BadRequestException();
7
+
8
+ expect(error.message).toBe('BadRequestException');
9
+ expect(error.statusCode).toBe(HttpStatus.BAD_REQUEST);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.BAD_REQUEST;
16
+ const customParameters = { key: 'value' };
17
+ const error = new BadRequestException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ console.log(error);
23
+ });
24
+ });
@@ -0,0 +1,8 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class BadRequestException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(message ?? 'BadRequestException', HttpStatus.BAD_REQUEST, parameters);
7
+ }
8
+ }
@@ -0,0 +1,36 @@
1
+ import { HttpException, HttpStatus } from '@nestjs/common';
2
+
3
+ export type ErrorModel = {
4
+ error: {
5
+ code: string | number;
6
+ traceid: string;
7
+ message: string;
8
+ timestamp: string;
9
+ path: string;
10
+ };
11
+ };
12
+
13
+ export type ParametersType = { [key: string]: unknown };
14
+
15
+ export class BaseException extends HttpException {
16
+ traceid: string;
17
+ readonly context: string;
18
+ readonly statusCode: number;
19
+ readonly code?: string;
20
+ readonly parameters: ParametersType;
21
+
22
+ constructor(
23
+ message: string,
24
+ status: HttpStatus,
25
+ parameters?: ParametersType,
26
+ ) {
27
+ super(message, status);
28
+
29
+ if (parameters) {
30
+ this.parameters = parameters;
31
+ }
32
+
33
+ this.statusCode = super.getStatus();
34
+ Error.captureStackTrace(this);
35
+ }
36
+ }
@@ -0,0 +1,23 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { ConflictException } from './conflict-error.exception';
3
+
4
+ describe('ConflictException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new ConflictException();
7
+
8
+ expect(error.message).toBe('ConflictException');
9
+ expect(error.statusCode).toBe(HttpStatus.CONFLICT);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.CONFLICT;
16
+ const customParameters = { key: 'value' };
17
+ const error = new ConflictException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ });
23
+ });
@@ -0,0 +1,8 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class ConflictException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(message ?? 'ConflictException', HttpStatus.CONFLICT, parameters);
7
+ }
8
+ }
@@ -0,0 +1,23 @@
1
+ import { ForbiddenException } from './forbidden-error.exception';
2
+ import { HttpStatus } from '@nestjs/common';
3
+
4
+ describe('ForbiddenException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new ForbiddenException();
7
+
8
+ expect(error.message).toBe('BadRequestException');
9
+ expect(error.statusCode).toBe(HttpStatus.FORBIDDEN);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.FORBIDDEN;
16
+ const customParameters = { key: 'value' };
17
+ const error = new ForbiddenException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ });
23
+ });
@@ -0,0 +1,8 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class ForbiddenException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(message ?? 'BadRequestException', HttpStatus.FORBIDDEN, parameters);
7
+ }
8
+ }
@@ -0,0 +1,7 @@
1
+ export * from './base.exception';
2
+ export * from './conflict-error.exception';
3
+ export * from './not-found-error.exception';
4
+ export * from './forbidden-error.exception';
5
+ export * from './bad-request-error.exception';
6
+ export * from './unauthorized-error.exception';
7
+ export * from './internal-server-error.exception';
@@ -0,0 +1,23 @@
1
+ import { InternalServerException } from './internal-server-error.exception';
2
+ import { HttpStatus } from '@nestjs/common';
3
+
4
+ describe('InternalServerException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new InternalServerException();
7
+
8
+ expect(error.message).toBe('InternalServerException');
9
+ expect(error.statusCode).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.INTERNAL_SERVER_ERROR;
16
+ const customParameters = { key: 'value' };
17
+ const error = new InternalServerException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ });
23
+ });
@@ -0,0 +1,12 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class InternalServerException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(
7
+ message ?? 'InternalServerException',
8
+ HttpStatus.INTERNAL_SERVER_ERROR,
9
+ parameters,
10
+ );
11
+ }
12
+ }
@@ -0,0 +1,23 @@
1
+ import { NotFoundException } from './not-found-error.exception';
2
+ import { HttpStatus } from '@nestjs/common';
3
+
4
+ describe('NotFoundException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new NotFoundException();
7
+
8
+ expect(error.message).toBe('NotFoundException');
9
+ expect(error.statusCode).toBe(HttpStatus.NOT_FOUND);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.INTERNAL_SERVER_ERROR;
16
+ const customParameters = { key: 'value' };
17
+ const error = new NotFoundException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ });
23
+ });
@@ -0,0 +1,8 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class NotFoundException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(message ?? 'NotFoundException', HttpStatus.NOT_FOUND, parameters);
7
+ }
8
+ }
@@ -0,0 +1,23 @@
1
+ import { UnauthorizedException } from './unauthorized-error.exception';
2
+ import { HttpStatus } from '@nestjs/common';
3
+
4
+ describe('UnauthorizedException', () => {
5
+ it('should set default message and status code if no parameters are provided', () => {
6
+ const error = new UnauthorizedException();
7
+
8
+ expect(error.message).toBe('UnauthorizedException');
9
+ expect(error.statusCode).toBe(HttpStatus.UNAUTHORIZED);
10
+ expect(error.parameters).toBeUndefined();
11
+ });
12
+
13
+ it('should set custom message, status code, and parameters if provided', () => {
14
+ const customMessage = 'Custom message';
15
+ const customStatusCode = HttpStatus.UNAUTHORIZED;
16
+ const customParameters = { key: 'value' };
17
+ const error = new UnauthorizedException(customMessage, customParameters);
18
+
19
+ expect(error.message).toBe(customMessage);
20
+ expect(error.statusCode).toBe(customStatusCode);
21
+ expect(error.parameters).toEqual(customParameters);
22
+ });
23
+ });
@@ -0,0 +1,12 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { BaseException, ParametersType } from './base.exception';
3
+
4
+ export class UnauthorizedException extends BaseException {
5
+ constructor(message?: string, parameters?: ParametersType) {
6
+ super(
7
+ message ?? 'UnauthorizedException',
8
+ HttpStatus.UNAUTHORIZED,
9
+ parameters,
10
+ );
11
+ }
12
+ }
@@ -0,0 +1,23 @@
1
+ import {
2
+ ExceptionFilter,
3
+ Catch,
4
+ ArgumentsHost,
5
+ HttpException,
6
+ } from '@nestjs/common';
7
+ import { Request, Response } from 'express';
8
+
9
+ @Catch(HttpException)
10
+ export class HttpExceptionFilter implements ExceptionFilter {
11
+ catch(exception: HttpException, host: ArgumentsHost) {
12
+ const ctx = host.switchToHttp();
13
+ const response = ctx.getResponse<Response>();
14
+ const request = ctx.getRequest<Request>();
15
+ const status = exception.getStatus();
16
+
17
+ response.status(status).json({
18
+ statusCode: status,
19
+ timestamp: new Date().toISOString(),
20
+ path: request.url,
21
+ });
22
+ }
23
+ }
@@ -0,0 +1 @@
1
+ export * from './http-exception.filter';
@@ -1,34 +1,34 @@
1
- import {
2
- Column,
3
- VersionColumn,
4
- CreateDateColumn,
5
- UpdateDateColumn,
6
- PrimaryGeneratedColumn,
7
- } from 'typeorm';
8
-
9
- export class EntityGeneric {
10
- constructor(id?: number) {
11
- this.id = id;
12
- }
13
-
14
- @PrimaryGeneratedColumn()
15
- id: number;
16
-
17
- @CreateDateColumn()
18
- createdAt: Date;
19
-
20
- @UpdateDateColumn()
21
- updatedAt: Date;
22
-
23
- @Column()
24
- createdBy: number;
25
-
26
- @Column({ select: false })
27
- updatedBy: number;
28
-
29
- @Column()
30
- state: number;
31
-
32
- @VersionColumn({ select: false })
33
- version: number;
34
- }
1
+ import {
2
+ Column,
3
+ VersionColumn,
4
+ CreateDateColumn,
5
+ UpdateDateColumn,
6
+ PrimaryGeneratedColumn,
7
+ } from 'typeorm';
8
+
9
+ export class EntityGeneric {
10
+ constructor(id?: number) {
11
+ this.id = id;
12
+ }
13
+
14
+ @PrimaryGeneratedColumn()
15
+ id: number;
16
+
17
+ @CreateDateColumn()
18
+ createdAt: Date;
19
+
20
+ @UpdateDateColumn()
21
+ updatedAt: Date;
22
+
23
+ @Column()
24
+ createdBy: number;
25
+
26
+ @Column({ select: false })
27
+ updatedBy: number;
28
+
29
+ @Column()
30
+ state: number;
31
+
32
+ @VersionColumn({ select: false })
33
+ version: number;
34
+ }
@@ -1 +1 @@
1
- export * from './entity.generic';
1
+ export * from './entity.generic';
@@ -1,2 +1,2 @@
1
- export * from './entity/entity.generic';
2
- export * from './service/service.generic';
1
+ export * from './entity/entity.generic';
2
+ export * from './service/service.generic';
@@ -1 +1 @@
1
- export * from './service.generic';
1
+ export * from './service.generic';