@koalarx/nest-cli 1.0.12 → 1.0.15

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 (56) hide show
  1. package/code-base/startup-project/.eslintignore +2 -0
  2. package/code-base/startup-project/.eslintrc.js +20 -0
  3. package/code-base/startup-project/nest-cli.json +1 -1
  4. package/code-base/startup-project/package.json +10 -11
  5. package/code-base/startup-project/prisma/migrations/{20250326014047_init → 20250326220607_init}/migration.sql +12 -0
  6. package/code-base/startup-project/prisma/schema.prisma +15 -4
  7. package/code-base/startup-project/src/application/mapping/person.mapping.ts +44 -0
  8. package/code-base/startup-project/src/application/person/create/create-person.handler.spec.ts +6 -6
  9. package/code-base/startup-project/src/application/person/create/create-person.handler.ts +1 -1
  10. package/code-base/startup-project/src/application/person/create/create-person.request.ts +10 -0
  11. package/code-base/startup-project/src/application/person/create/create-person.validator.ts +3 -0
  12. package/code-base/startup-project/src/application/person/create-person-job/create-person-job.ts +2 -1
  13. package/code-base/startup-project/src/application/person/delete/delete-person.handler.spec.ts +6 -6
  14. package/code-base/startup-project/src/application/person/delete-inative-job/delete-inactive-job.ts +2 -2
  15. package/code-base/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +3 -3
  16. package/code-base/startup-project/src/application/person/read/read-person.handler.spec.ts +7 -7
  17. package/code-base/startup-project/src/application/person/read/read-person.response.ts +15 -1
  18. package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts +38 -34
  19. package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.ts +7 -2
  20. package/code-base/startup-project/src/application/person/read-many/read-many-person.request.ts +8 -2
  21. package/code-base/startup-project/src/application/person/read-many/read-many-person.response.ts +1 -1
  22. package/code-base/startup-project/src/application/person/update/update-person.handler.spec.ts +20 -18
  23. package/code-base/startup-project/src/application/person/update/update-person.handler.ts +2 -1
  24. package/code-base/startup-project/src/application/person/update/update-person.request.ts +15 -1
  25. package/code-base/startup-project/src/application/person/update/update-person.validator.ts +4 -0
  26. package/code-base/startup-project/src/core/env.ts +6 -0
  27. package/code-base/startup-project/src/domain/dtos/read-many-person.dto.ts +16 -0
  28. package/code-base/startup-project/src/domain/entities/person/person-address.ts +10 -0
  29. package/code-base/startup-project/src/domain/entities/person/person.ts +4 -0
  30. package/code-base/startup-project/src/domain/repositories/iperson.repository.ts +4 -6
  31. package/code-base/startup-project/src/domain/services/.gitkeep +0 -0
  32. package/code-base/startup-project/src/{infra → host}/app.module.ts +5 -4
  33. package/code-base/startup-project/src/{infra → host}/controllers/controller.module.ts +2 -2
  34. package/code-base/startup-project/src/{infra → host}/controllers/controllers.module.ts +1 -4
  35. package/code-base/startup-project/src/{infra → host}/controllers/person/person.controller.e2e-spec.ts +78 -44
  36. package/code-base/startup-project/src/{infra → host}/main.ts +1 -1
  37. package/code-base/startup-project/src/infra/database/db-transaction-context.ts +7 -0
  38. package/code-base/startup-project/src/infra/database/repositories/person.repository.ts +13 -6
  39. package/code-base/startup-project/src/infra/services/.gitkeep +0 -0
  40. package/code-base/startup-project/src/test/create-e2e-test-app.ts +8 -8
  41. package/code-base/startup-project/src/test/create-unit-test-app.ts +5 -5
  42. package/code-base/startup-project/src/test/mockup/person/create-person-request.mockup.ts +6 -5
  43. package/code-base/startup-project/src/test/repositories/person.repository.ts +24 -15
  44. package/code-base/startup-project/src/test/setup-e2e.ts +3 -3
  45. package/index.js +1 -1
  46. package/package.json +1 -1
  47. package/code-base/startup-project/eslint.config.mjs +0 -22
  48. package/code-base/startup-project/src/domain/mapping/person.mapping.ts +0 -24
  49. /package/code-base/startup-project/src/{domain → application}/mapping/mapping.profile.ts +0 -0
  50. /package/code-base/startup-project/src/{infra → host}/controllers/person/create-person.controller.ts +0 -0
  51. /package/code-base/startup-project/src/{infra → host}/controllers/person/delete-person.controller.ts +0 -0
  52. /package/code-base/startup-project/src/{infra → host}/controllers/person/person.module.ts +0 -0
  53. /package/code-base/startup-project/src/{infra → host}/controllers/person/read-many-person.controller.ts +0 -0
  54. /package/code-base/startup-project/src/{infra → host}/controllers/person/read-person.controller.ts +0 -0
  55. /package/code-base/startup-project/src/{infra → host}/controllers/person/router.config.ts +0 -0
  56. /package/code-base/startup-project/src/{infra → host}/controllers/person/update-person.controller.ts +0 -0
@@ -0,0 +1,2 @@
1
+ node_modules
2
+ dist
@@ -0,0 +1,20 @@
1
+ module.exports = {
2
+ globals: {
3
+ NodeJS: true,
4
+ },
5
+ extends: [
6
+ '@rocketseat/eslint-config/node',
7
+ 'plugin:vitest-globals/recommended',
8
+ ],
9
+ env: {
10
+ 'vitest-globals/env': true,
11
+ },
12
+ ignorePatterns: ['*.json'],
13
+ rules: {
14
+ 'no-unused-vars': 'off',
15
+ 'no-useless-constructor': 'off',
16
+ 'no-new': 'off',
17
+ 'no-use-before-define': 'off',
18
+ '@typescript-eslint/no-explicit-any': 'off',
19
+ },
20
+ }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/nest-cli",
3
3
  "collection": "@nestjs/schematics",
4
4
  "sourceRoot": "src",
5
- "entryFile": "infra/main",
5
+ "entryFile": "host/main",
6
6
  "compilerOptions": {
7
7
  "builder": "swc",
8
8
  "plugins": [
@@ -11,7 +11,7 @@
11
11
  "start": "nest start",
12
12
  "start:dev": "npm run swc:copy-files && nest start --watch",
13
13
  "start:debug": "npm run swc:copy-files && nest start --debug --watch",
14
- "start:prod": "node dist/infra/main",
14
+ "start:prod": "node dist/host/main",
15
15
  "lint": "prettier --end-of-line lf --write . && npx eslint --fix src/**/* && npx eslint --fix .eslintrc.js",
16
16
  "test": "vitest run",
17
17
  "test:watch": "vitest",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@koalarx/utils": "3.1.3",
25
- "@koalarx/nest": "^1.0.1",
25
+ "@koalarx/nest": "1.2.0",
26
26
  "@nestjs/common": "11.0.12",
27
27
  "@nestjs/config": "4.0.1",
28
28
  "@nestjs/core": "11.0.12",
@@ -42,10 +42,11 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@eslint/js": "9.23.0",
45
- "@faker-js/faker": "^9.6.0",
45
+ "@faker-js/faker": "9.6.0",
46
46
  "@nestjs/cli": "11.0.5",
47
47
  "@nestjs/schematics": "10.0.2",
48
48
  "@nestjs/testing": "11.0.12",
49
+ "@rocketseat/eslint-config": "1.2.0",
49
50
  "@swc/cli": "0.1.62",
50
51
  "@swc/core": "1.3.81",
51
52
  "@types/cookie-parser": "1.4.8",
@@ -56,19 +57,17 @@
56
57
  "@typescript-eslint/eslint-plugin": "8.27.0",
57
58
  "@typescript-eslint/parser": "8.27.0",
58
59
  "@vitest/coverage-v8": "3.0.9",
59
- "eslint": "9.23.0",
60
- "eslint-config-prettier": "10.1.1",
61
- "eslint-plugin-prettier": "5.2.3",
62
- "eslint-plugin-vitest": "0.5.4",
63
- "eslint-plugin-vitest-globals": "1.5.0",
64
- "globals": "16.0.0",
65
- "prettier": "3.5.3",
60
+ "eslint": "8.57.0",
61
+ "eslint-config-prettier": "8.3.0",
62
+ "eslint-plugin-prettier": "4.0.0",
63
+ "eslint-plugin-vitest": "0.2.8",
64
+ "eslint-plugin-vitest-globals": "1.4.0",
65
+ "prettier": "2.3.2",
66
66
  "prisma": "6.5.0",
67
67
  "source-map-support": "0.5.20",
68
68
  "supertest": "7.1.0",
69
69
  "tsconfig-paths": "4.2.0",
70
70
  "typescript": "5.1.3",
71
- "typescript-eslint": "8.27.0",
72
71
  "unplugin-swc": "1.5.1",
73
72
  "vite-tsconfig-paths": "5.1.4",
74
73
  "vitest": "3.0.9"
@@ -3,6 +3,7 @@ CREATE TABLE "person" (
3
3
  "id" SERIAL NOT NULL,
4
4
  "name" TEXT NOT NULL,
5
5
  "active" BOOLEAN NOT NULL DEFAULT true,
6
+ "person_address_id" INTEGER NOT NULL,
6
7
 
7
8
  CONSTRAINT "person_pkey" PRIMARY KEY ("id")
8
9
  );
@@ -16,5 +17,16 @@ CREATE TABLE "person_phone" (
16
17
  CONSTRAINT "person_phone_pkey" PRIMARY KEY ("id")
17
18
  );
18
19
 
20
+ -- CreateTable
21
+ CREATE TABLE "person_address" (
22
+ "id" SERIAL NOT NULL,
23
+ "address" TEXT NOT NULL,
24
+
25
+ CONSTRAINT "person_address_pkey" PRIMARY KEY ("id")
26
+ );
27
+
28
+ -- AddForeignKey
29
+ ALTER TABLE "person" ADD CONSTRAINT "person_person_address_id_fkey" FOREIGN KEY ("person_address_id") REFERENCES "person_address"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
30
+
19
31
  -- AddForeignKey
20
32
  ALTER TABLE "person_phone" ADD CONSTRAINT "person_phone_person_id_fkey" FOREIGN KEY ("person_id") REFERENCES "person"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -10,11 +10,13 @@ datasource db {
10
10
  }
11
11
 
12
12
  model Person {
13
- id Int @id @default(autoincrement())
14
- name String
15
- active Boolean @default(true)
13
+ id Int @id @default(autoincrement())
14
+ name String
15
+ active Boolean @default(true)
16
+ personAddressId Int @map("person_address_id")
16
17
 
17
- phones PersonPhone[]
18
+ phones PersonPhone[]
19
+ address PersonAddress @relation(fields: [personAddressId], references: [id])
18
20
 
19
21
  @@map("person")
20
22
  }
@@ -28,3 +30,12 @@ model PersonPhone {
28
30
 
29
31
  @@map("person_phone")
30
32
  }
33
+
34
+ model PersonAddress {
35
+ id Int @id @default(autoincrement())
36
+ address String
37
+
38
+ people Person[]
39
+
40
+ @@map("person_address")
41
+ }
@@ -0,0 +1,44 @@
1
+ import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
2
+ import { Person } from '@/domain/entities/person/person'
3
+ import { PersonAddress } from '@/domain/entities/person/person-address'
4
+ import { PersonPhone } from '@/domain/entities/person/person-phone'
5
+ import { createMap } from '@koalarx/nest/core/mapping/create-map'
6
+ import { forMember } from '@koalarx/nest/core/mapping/for-member'
7
+ import {
8
+ CreatePersonAddressRequest,
9
+ CreatePersonPhoneRequest,
10
+ CreatePersonRequest,
11
+ } from '../person/create/create-person.request'
12
+ import { ReadManyPersonRequest } from '../person/read-many/read-many-person.request'
13
+ import {
14
+ ReadPersonAddressResponse,
15
+ ReadPersonPhoneResponse,
16
+ ReadPersonResponse,
17
+ } from '../person/read/read-person.response'
18
+ import {
19
+ UpdatePersonAddressRequest,
20
+ UpdatePersonPhoneRequest,
21
+ UpdatePersonRequest,
22
+ } from '../person/update/update-person.request'
23
+
24
+ export class PersonMapping {
25
+ static createMap() {
26
+ createMap(CreatePersonAddressRequest, PersonAddress)
27
+ createMap(CreatePersonPhoneRequest, PersonPhone)
28
+ createMap(CreatePersonRequest, Person)
29
+
30
+ createMap(PersonAddress, ReadPersonAddressResponse)
31
+ createMap(PersonPhone, ReadPersonPhoneResponse)
32
+ createMap(
33
+ Person,
34
+ ReadPersonResponse,
35
+ forMember('status', (s) => (s.active === true ? 'active' : 'inactive')),
36
+ )
37
+
38
+ createMap(ReadManyPersonRequest, ReadManyPersonDto)
39
+
40
+ createMap(UpdatePersonAddressRequest, PersonAddress)
41
+ createMap(UpdatePersonPhoneRequest, PersonPhone)
42
+ createMap(UpdatePersonRequest, Person)
43
+ }
44
+ }
@@ -1,6 +1,6 @@
1
- import { createUnitTestApp } from "@/test/create-unit-test-app"
2
- import { createPersonRequestMockup } from "@/test/mockup/person/create-person-request.mockup"
3
- import { CreatePersonHandler } from "./create-person.handler"
1
+ import { createUnitTestApp } from '@/test/create-unit-test-app'
2
+ import { createPersonRequestMockup } from '@/test/mockup/person/create-person-request.mockup'
3
+ import { CreatePersonHandler } from './create-person.handler'
4
4
 
5
5
  describe('CreatePersonHandler', () => {
6
6
  const app = createUnitTestApp()
@@ -10,13 +10,13 @@ describe('CreatePersonHandler', () => {
10
10
  const request = createPersonRequestMockup
11
11
 
12
12
  const result = await handler.handle(request)
13
-
13
+
14
14
  expect(result.isOk()).toBeTruthy()
15
15
 
16
16
  if (result.isOk()) {
17
17
  expect(result.value).toEqual({
18
- id: expect.any(Number)
18
+ id: expect.any(Number),
19
19
  })
20
20
  }
21
21
  })
22
- })
22
+ })
@@ -32,7 +32,7 @@ export class CreatePersonHandler extends RequestHandlerBase<
32
32
  Person,
33
33
  )
34
34
 
35
- const result = await this.repository.save(person)
35
+ const result = await this.repository.create(person)
36
36
 
37
37
  return ok({ id: result.id })
38
38
  }
@@ -1,6 +1,12 @@
1
1
  import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
2
2
  import { ApiProperty } from '@nestjs/swagger'
3
3
 
4
+ export class CreatePersonAddressRequest {
5
+ @ApiProperty()
6
+ @AutoMap()
7
+ address: string
8
+ }
9
+
4
10
  export class CreatePersonPhoneRequest {
5
11
  @ApiProperty()
6
12
  @AutoMap()
@@ -15,4 +21,8 @@ export class CreatePersonRequest {
15
21
  @ApiProperty({ type: [CreatePersonPhoneRequest] })
16
22
  @AutoMap({ type: CreatePersonPhoneRequest, isArray: { addTo: true } })
17
23
  phones: Array<CreatePersonPhoneRequest>
24
+
25
+ @ApiProperty({ type: CreatePersonAddressRequest })
26
+ @AutoMap({ type: CreatePersonAddressRequest })
27
+ address: CreatePersonAddressRequest
18
28
  }
@@ -11,6 +11,9 @@ export class CreatePersonValidator extends RequestValidatorBase<CreatePersonRequ
11
11
  phone: z.string(),
12
12
  }),
13
13
  ),
14
+ address: z.object({
15
+ address: z.string(),
16
+ }),
14
17
  })
15
18
  }
16
19
  }
@@ -26,7 +26,8 @@ export class CreatePersonJob extends CronJob {
26
26
  protected async run(): Promise<CronJobResponse> {
27
27
  const result = await this.createPerson.handle({
28
28
  name: 'John Doe',
29
- phones: [{phone: '22999999999'}],
29
+ phones: [{ phone: '22999999999' }],
30
+ address: { address: 'Street 1' },
30
31
  })
31
32
 
32
33
  if (result.isOk()) {
@@ -1,7 +1,7 @@
1
- import { createUnitTestApp } from "@/test/create-unit-test-app"
2
- import { createPersonRequestMockup } from "@/test/mockup/person/create-person-request.mockup"
3
- import { CreatePersonHandler } from "../create/create-person.handler"
4
- import { DeletePersonHandler } from "./delete-person.handler"
1
+ import { createUnitTestApp } from '@/test/create-unit-test-app'
2
+ import { createPersonRequestMockup } from '@/test/mockup/person/create-person-request.mockup'
3
+ import { CreatePersonHandler } from '../create/create-person.handler'
4
+ import { DeletePersonHandler } from './delete-person.handler'
5
5
 
6
6
  describe('DeletePersonHandler', () => {
7
7
  const app = createUnitTestApp()
@@ -10,7 +10,7 @@ describe('DeletePersonHandler', () => {
10
10
  const createResult = await app
11
11
  .get(CreatePersonHandler)
12
12
  .handle(createPersonRequestMockup)
13
-
13
+
14
14
  expect(createResult.isOk()).toBeTruthy()
15
15
 
16
16
  if (createResult.isOk()) {
@@ -21,4 +21,4 @@ describe('DeletePersonHandler', () => {
21
21
  expect(result.isOk()).toBeTruthy()
22
22
  }
23
23
  })
24
- })
24
+ })
@@ -1,3 +1,4 @@
1
+ import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
1
2
  import {
2
3
  CronJob,
3
4
  CronJobResponse,
@@ -8,7 +9,6 @@ import { IRedLockService } from '@koalarx/nest/services/redlock/ired-lock.servic
8
9
  import { Injectable } from '@nestjs/common'
9
10
  import { DeletePersonHandler } from '../delete/delete-person.handler'
10
11
  import { ReadManyPersonHandler } from '../read-many/read-many-person.handler'
11
- import { ReadManyPersonRequest } from '../read-many/read-many-person.request'
12
12
 
13
13
  @Injectable()
14
14
  export class DeleteInactiveJob extends CronJob {
@@ -23,7 +23,7 @@ export class DeleteInactiveJob extends CronJob {
23
23
 
24
24
  protected async run(): Promise<CronJobResponse> {
25
25
  const result = await this.readManyPerson.handle(
26
- new ReadManyPersonRequest({ active: false }),
26
+ new ReadManyPersonDto({ active: false }),
27
27
  )
28
28
 
29
29
  if (result.isOk()) {
@@ -1,7 +1,7 @@
1
+ import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
1
2
  import { IPersonRepository } from '@/domain/repositories/iperson.repository'
2
3
  import { EventHandler } from '@koalarx/nest/core/backgroud-services/event-service/event-handler'
3
4
  import { Injectable } from '@nestjs/common'
4
- import { ReadManyPersonRequest } from '../../read-many/read-many-person.request'
5
5
  import { InactivePersonEvent } from './inactive-person-event'
6
6
 
7
7
  @Injectable()
@@ -12,12 +12,12 @@ export class InactivePersonHandler extends EventHandler<InactivePersonEvent> {
12
12
 
13
13
  async handleEvent(): Promise<void> {
14
14
  const result = await this.repository.readMany(
15
- new ReadManyPersonRequest({ active: true }),
15
+ new ReadManyPersonDto({ active: true }),
16
16
  )
17
17
 
18
18
  for (const person of result.items) {
19
19
  person.active = false
20
- await this.repository.save(person)
20
+ await this.repository.update(person)
21
21
  }
22
22
 
23
23
  console.log(
@@ -1,7 +1,7 @@
1
- import { createUnitTestApp } from "@/test/create-unit-test-app"
2
- import { createPersonRequestMockup } from "@/test/mockup/person/create-person-request.mockup"
3
- import { CreatePersonHandler } from "../create/create-person.handler"
4
- import { ReadPersonHandler } from "./read-person.handler"
1
+ import { createUnitTestApp } from '@/test/create-unit-test-app'
2
+ import { createPersonRequestMockup } from '@/test/mockup/person/create-person-request.mockup'
3
+ import { CreatePersonHandler } from '../create/create-person.handler'
4
+ import { ReadPersonHandler } from './read-person.handler'
5
5
 
6
6
  describe('ReadPersonHandler', () => {
7
7
  const app = createUnitTestApp()
@@ -11,7 +11,7 @@ describe('ReadPersonHandler', () => {
11
11
  const createResult = await app
12
12
  .get(CreatePersonHandler)
13
13
  .handle(createPersonRequestMockup)
14
-
14
+
15
15
  expect(createResult.isOk()).toBeTruthy()
16
16
 
17
17
  if (createResult.isOk()) {
@@ -22,8 +22,8 @@ describe('ReadPersonHandler', () => {
22
22
  expect(result.value).toEqual({
23
23
  ...person,
24
24
  id: createResult.value.id,
25
- status: 'inactive'
25
+ status: 'inactive',
26
26
  })
27
27
  }
28
28
  })
29
- })
29
+ })
@@ -1,6 +1,16 @@
1
1
  import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
2
2
  import { ApiProperty } from '@nestjs/swagger'
3
3
 
4
+ export class ReadPersonAddressResponse {
5
+ @ApiProperty()
6
+ @AutoMap()
7
+ id: number
8
+
9
+ @ApiProperty()
10
+ @AutoMap()
11
+ address: string
12
+ }
13
+
4
14
  export class ReadPersonPhoneResponse {
5
15
  @ApiProperty()
6
16
  @AutoMap()
@@ -21,9 +31,13 @@ export class ReadPersonResponse {
21
31
  name: string
22
32
 
23
33
  @ApiProperty({ type: [ReadPersonPhoneResponse] })
24
- @AutoMap({ type: ReadPersonPhoneResponse, isArray: true})
34
+ @AutoMap({ type: ReadPersonPhoneResponse, isArray: true })
25
35
  phones: Array<ReadPersonPhoneResponse>
26
36
 
37
+ @ApiProperty({ type: ReadPersonAddressResponse })
38
+ @AutoMap({ type: ReadPersonAddressResponse })
39
+ address: ReadPersonAddressResponse
40
+
27
41
  @ApiProperty()
28
42
  @AutoMap()
29
43
  status: string
@@ -1,10 +1,10 @@
1
- import { createUnitTestApp } from "@/test/create-unit-test-app"
2
- import { createPersonRequestMockup } from "@/test/mockup/person/create-person-request.mockup"
3
- import { CreatePersonHandler } from "../create/create-person.handler"
4
- import { ReadManyPersonHandler } from "./read-many-person.handler"
5
- import { ReadManyPersonRequest } from "./read-many-person.request"
6
- import { RequestResult } from "@koalarx/nest/core/request-overflow/request-result"
7
- import { CreatePersonResponse } from "../create/create-person.response"
1
+ import { createUnitTestApp } from '@/test/create-unit-test-app'
2
+ import { createPersonRequestMockup } from '@/test/mockup/person/create-person-request.mockup'
3
+ import { RequestResult } from '@koalarx/nest/core/request-overflow/request-result'
4
+ import { CreatePersonHandler } from '../create/create-person.handler'
5
+ import { CreatePersonResponse } from '../create/create-person.response'
6
+ import { ReadManyPersonHandler } from './read-many-person.handler'
7
+ import { ReadManyPersonRequest } from './read-many-person.request'
8
8
 
9
9
  describe('ReadManyPersonHandler', () => {
10
10
  const app = createUnitTestApp()
@@ -13,11 +13,11 @@ describe('ReadManyPersonHandler', () => {
13
13
  let personId: number
14
14
  let createResult: RequestResult<Error, CreatePersonResponse>
15
15
 
16
- beforeAll(async () => {
16
+ beforeAll(async () => {
17
17
  createResult = await app
18
18
  .get(CreatePersonHandler)
19
19
  .handle(createPersonRequestMockup)
20
-
20
+
21
21
  expect(createResult.isOk()).toBeTruthy()
22
22
 
23
23
  if (createResult.isOk()) {
@@ -31,42 +31,46 @@ describe('ReadManyPersonHandler', () => {
31
31
  .handle(new ReadManyPersonRequest())
32
32
 
33
33
  expect(result.value).toEqual({
34
- items: [{
35
- ...person,
36
- id: personId,
37
- status: 'inactive'
38
- }],
39
- count: 1
34
+ items: [
35
+ {
36
+ ...person,
37
+ id: personId,
38
+ status: 'inactive',
39
+ },
40
+ ],
41
+ count: 1,
40
42
  })
41
43
  })
42
44
 
43
45
  it('should get persons by name', async () => {
44
- const result = await app
45
- .get(ReadManyPersonHandler)
46
- .handle(new ReadManyPersonRequest({
47
- name: person.name
48
- }))
46
+ const result = await app.get(ReadManyPersonHandler).handle(
47
+ new ReadManyPersonRequest({
48
+ name: person.name,
49
+ }),
50
+ )
49
51
 
50
52
  expect(result.value).toEqual({
51
- items: [{
52
- ...person,
53
- id: personId,
54
- status: 'inactive'
55
- }],
56
- count: 1
53
+ items: [
54
+ {
55
+ ...person,
56
+ id: personId,
57
+ status: 'inactive',
58
+ },
59
+ ],
60
+ count: 1,
57
61
  })
58
- })
62
+ })
59
63
 
60
64
  it('should get persons by status', async () => {
61
- const result = await app
62
- .get(ReadManyPersonHandler)
63
- .handle(new ReadManyPersonRequest({
64
- active: true
65
- }))
65
+ const result = await app.get(ReadManyPersonHandler).handle(
66
+ new ReadManyPersonRequest({
67
+ active: true,
68
+ }),
69
+ )
66
70
 
67
71
  expect(result.value).toEqual({
68
72
  items: [],
69
- count: 0
73
+ count: 0,
70
74
  })
71
75
  })
72
- })
76
+ })
@@ -1,3 +1,4 @@
1
+ import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
1
2
  import { Person } from '@/domain/entities/person/person'
2
3
  import { IPersonRepository } from '@/domain/repositories/iperson.repository'
3
4
  import { ResourceNotFoundError } from '@koalarx/nest/core/errors/resource-not-found.error'
@@ -29,14 +30,18 @@ export class ReadManyPersonHandler extends RequestHandlerBase<
29
30
  query: ReadManyPersonRequest,
30
31
  ): Promise<RequestResult<ResourceNotFoundError, ReadManyPersonResponse>> {
31
32
  const listOfPerson = await this.repository.readMany(
32
- new ReadManyPersonValidator(query).validate(),
33
+ this.mapper.map(
34
+ new ReadManyPersonValidator(query).validate(),
35
+ ReadManyPersonRequest,
36
+ ReadManyPersonDto,
37
+ ),
33
38
  )
34
39
 
35
40
  return ok({
36
41
  ...listOfPerson,
37
42
  items: listOfPerson.items.map((person) =>
38
43
  this.mapper.map(person, Person, ReadPersonResponse),
39
- )
44
+ ),
40
45
  })
41
46
  }
42
47
  }
@@ -1,11 +1,17 @@
1
- import { PaginatedRequestProps, PaginationParams } from '@koalarx/nest/core/models/pagination-params'
1
+ import {
2
+ PaginatedRequestProps,
3
+ PaginationRequest,
4
+ } from '@koalarx/nest/core/controllers/pagination.request'
5
+ import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
2
6
  import { ApiProperty } from '@nestjs/swagger'
3
7
 
4
- export class ReadManyPersonRequest extends PaginationParams {
8
+ export class ReadManyPersonRequest extends PaginationRequest {
5
9
  @ApiProperty({ required: false })
10
+ @AutoMap()
6
11
  name?: string
7
12
 
8
13
  @ApiProperty({ required: false })
14
+ @AutoMap()
9
15
  active?: boolean
10
16
 
11
17
  constructor(props?: PaginatedRequestProps<ReadManyPersonRequest>) {
@@ -1,4 +1,4 @@
1
- import { ListResponse } from '@koalarx/nest/core/@types'
1
+ import { ListResponse } from '@koalarx/nest/core'
2
2
  import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
3
3
  import { ApiProperty } from '@nestjs/swagger'
4
4
  import { ReadPersonResponse } from '../read/read-person.response'
@@ -1,8 +1,8 @@
1
- import { createUnitTestApp } from "@/test/create-unit-test-app"
2
- import { createPersonRequestMockup } from "@/test/mockup/person/create-person-request.mockup"
3
- import { CreatePersonHandler } from "../create/create-person.handler"
4
- import { ReadPersonHandler } from "../read/read-person.handler"
5
- import { UpdatePersonHandler } from "./update-person.handler"
1
+ import { createUnitTestApp } from '@/test/create-unit-test-app'
2
+ import { createPersonRequestMockup } from '@/test/mockup/person/create-person-request.mockup'
3
+ import { CreatePersonHandler } from '../create/create-person.handler'
4
+ import { ReadPersonHandler } from '../read/read-person.handler'
5
+ import { UpdatePersonHandler } from './update-person.handler'
6
6
 
7
7
  describe('UpdatePersonHandler', () => {
8
8
  const app = createUnitTestApp()
@@ -12,20 +12,22 @@ describe('UpdatePersonHandler', () => {
12
12
  const createResult = await app
13
13
  .get(CreatePersonHandler)
14
14
  .handle(createPersonRequestMockup)
15
-
15
+
16
16
  expect(createResult.isOk()).toBeTruthy()
17
17
 
18
18
  if (createResult.isOk()) {
19
- const updateResult = await app
20
- .get(UpdatePersonHandler)
21
- .handle({
22
- id: createResult.value.id,
23
- data: {
24
- ...person,
25
- active: true
26
- }
27
- })
28
-
19
+ const updateResult = await app.get(UpdatePersonHandler).handle({
20
+ id: createResult.value.id,
21
+ data: {
22
+ ...person,
23
+ address: {
24
+ id: 1,
25
+ ...person.address,
26
+ },
27
+ active: true,
28
+ },
29
+ })
30
+
29
31
  expect(updateResult.isOk()).toBeTruthy()
30
32
 
31
33
  const result = await app
@@ -35,8 +37,8 @@ describe('UpdatePersonHandler', () => {
35
37
  expect(result.value).toEqual({
36
38
  ...person,
37
39
  id: createResult.value.id,
38
- status: 'active'
40
+ status: 'active',
39
41
  })
40
42
  }
41
43
  })
42
- })
44
+ })
@@ -47,9 +47,10 @@ export class UpdatePersonHandler extends RequestHandlerBase<
47
47
 
48
48
  personInBd.name = person.name
49
49
  personInBd.active = person.active
50
+ personInBd.address.address = person.address.address
50
51
  personInBd.phones.update(person.phones.toArray())
51
52
 
52
- await this.repository.save(personInBd)
53
+ await this.repository.update(personInBd)
53
54
 
54
55
  return ok(null)
55
56
  }