@koalarx/nest-cli 1.0.14 → 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.
- package/code-base/startup-project/.eslintignore +2 -0
- package/code-base/startup-project/.eslintrc.js +20 -0
- package/code-base/startup-project/package.json +9 -10
- package/code-base/startup-project/prisma/migrations/{20250326014047_init → 20250326220607_init}/migration.sql +12 -0
- package/code-base/startup-project/prisma/schema.prisma +15 -4
- package/code-base/startup-project/src/application/mapping/person.mapping.ts +25 -9
- package/code-base/startup-project/src/application/person/create/create-person.handler.spec.ts +6 -6
- package/code-base/startup-project/src/application/person/create/create-person.request.ts +10 -0
- package/code-base/startup-project/src/application/person/create/create-person.validator.ts +3 -0
- package/code-base/startup-project/src/application/person/create-person-job/create-person-job.ts +2 -1
- package/code-base/startup-project/src/application/person/delete/delete-person.handler.spec.ts +6 -6
- package/code-base/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +2 -3
- package/code-base/startup-project/src/application/person/read/read-person.handler.spec.ts +7 -7
- package/code-base/startup-project/src/application/person/read/read-person.response.ts +15 -1
- package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts +38 -34
- package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.ts +2 -2
- package/code-base/startup-project/src/application/person/read-many/read-many-person.request.ts +5 -2
- package/code-base/startup-project/src/application/person/update/update-person.handler.spec.ts +20 -18
- package/code-base/startup-project/src/application/person/update/update-person.handler.ts +1 -0
- package/code-base/startup-project/src/application/person/update/update-person.request.ts +15 -1
- package/code-base/startup-project/src/application/person/update/update-person.validator.ts +4 -0
- package/code-base/startup-project/src/core/env.ts +6 -0
- package/code-base/startup-project/src/domain/entities/person/person-address.ts +10 -0
- package/code-base/startup-project/src/domain/entities/person/person.ts +4 -0
- package/code-base/startup-project/src/host/app.module.ts +4 -3
- package/code-base/startup-project/src/host/controllers/controllers.module.ts +1 -4
- package/code-base/startup-project/src/host/controllers/person/person.controller.e2e-spec.ts +78 -44
- package/code-base/startup-project/src/infra/database/db-transaction-context.ts +7 -0
- package/code-base/startup-project/src/infra/database/repositories/person.repository.ts +4 -1
- package/code-base/startup-project/src/test/create-e2e-test-app.ts +7 -7
- package/code-base/startup-project/src/test/create-unit-test-app.ts +4 -4
- package/code-base/startup-project/src/test/mockup/person/create-person-request.mockup.ts +6 -5
- package/code-base/startup-project/src/test/repositories/person.repository.ts +16 -11
- package/code-base/startup-project/src/test/setup-e2e.ts +3 -3
- package/index.js +1 -1
- package/package.json +1 -1
- package/code-base/startup-project/eslint.config.mjs +0 -22
- package/code-base/startup-project/src/core/.gitkeep +0 -0
|
@@ -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
|
+
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@koalarx/utils": "3.1.3",
|
|
25
|
-
"@koalarx/nest": "
|
|
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": "
|
|
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": "
|
|
60
|
-
"eslint-config-prettier": "
|
|
61
|
-
"eslint-plugin-prettier": "
|
|
62
|
-
"eslint-plugin-vitest": "0.
|
|
63
|
-
"eslint-plugin-vitest-globals": "1.
|
|
64
|
-
"
|
|
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
|
|
14
|
-
name
|
|
15
|
-
active
|
|
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
|
|
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
|
+
}
|
|
@@ -1,18 +1,33 @@
|
|
|
1
|
-
import { ReadManyPersonDto } from
|
|
2
|
-
import { Person } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
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'
|
|
10
23
|
|
|
11
24
|
export class PersonMapping {
|
|
12
25
|
static createMap() {
|
|
26
|
+
createMap(CreatePersonAddressRequest, PersonAddress)
|
|
13
27
|
createMap(CreatePersonPhoneRequest, PersonPhone)
|
|
14
28
|
createMap(CreatePersonRequest, Person)
|
|
15
29
|
|
|
30
|
+
createMap(PersonAddress, ReadPersonAddressResponse)
|
|
16
31
|
createMap(PersonPhone, ReadPersonPhoneResponse)
|
|
17
32
|
createMap(
|
|
18
33
|
Person,
|
|
@@ -22,6 +37,7 @@ export class PersonMapping {
|
|
|
22
37
|
|
|
23
38
|
createMap(ReadManyPersonRequest, ReadManyPersonDto)
|
|
24
39
|
|
|
40
|
+
createMap(UpdatePersonAddressRequest, PersonAddress)
|
|
25
41
|
createMap(UpdatePersonPhoneRequest, PersonPhone)
|
|
26
42
|
createMap(UpdatePersonRequest, Person)
|
|
27
43
|
}
|
package/code-base/startup-project/src/application/person/create/create-person.handler.spec.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createUnitTestApp } from
|
|
2
|
-
import { createPersonRequestMockup } from
|
|
3
|
-
import { CreatePersonHandler } from
|
|
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
|
+
})
|
|
@@ -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
|
}
|
package/code-base/startup-project/src/application/person/create-person-job/create-person-job.ts
CHANGED
|
@@ -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()) {
|
package/code-base/startup-project/src/application/person/delete/delete-person.handler.spec.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createUnitTestApp } from
|
|
2
|
-
import { createPersonRequestMockup } from
|
|
3
|
-
import { CreatePersonHandler } from
|
|
4
|
-
import { DeletePersonHandler } from
|
|
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,9 +1,8 @@
|
|
|
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
|
-
import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
|
|
7
6
|
|
|
8
7
|
@Injectable()
|
|
9
8
|
export class InactivePersonHandler extends EventHandler<InactivePersonEvent> {
|
|
@@ -18,7 +17,7 @@ export class InactivePersonHandler extends EventHandler<InactivePersonEvent> {
|
|
|
18
17
|
|
|
19
18
|
for (const person of result.items) {
|
|
20
19
|
person.active = false
|
|
21
|
-
await this.repository.
|
|
20
|
+
await this.repository.update(person)
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
console.log(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createUnitTestApp } from
|
|
2
|
-
import { createPersonRequestMockup } from
|
|
3
|
-
import { CreatePersonHandler } from
|
|
4
|
-
import { ReadPersonHandler } from
|
|
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
|
package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.spec.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createUnitTestApp } from
|
|
2
|
-
import { createPersonRequestMockup } from
|
|
3
|
-
import { RequestResult } from
|
|
4
|
-
import { CreatePersonHandler } from
|
|
5
|
-
import { CreatePersonResponse } from
|
|
6
|
-
import { ReadManyPersonHandler } from
|
|
7
|
-
import { ReadManyPersonRequest } from
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
})
|
package/code-base/startup-project/src/application/person/read-many/read-many-person.handler.ts
CHANGED
|
@@ -33,7 +33,7 @@ export class ReadManyPersonHandler extends RequestHandlerBase<
|
|
|
33
33
|
this.mapper.map(
|
|
34
34
|
new ReadManyPersonValidator(query).validate(),
|
|
35
35
|
ReadManyPersonRequest,
|
|
36
|
-
ReadManyPersonDto
|
|
36
|
+
ReadManyPersonDto,
|
|
37
37
|
),
|
|
38
38
|
)
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ export class ReadManyPersonHandler extends RequestHandlerBase<
|
|
|
41
41
|
...listOfPerson,
|
|
42
42
|
items: listOfPerson.items.map((person) =>
|
|
43
43
|
this.mapper.map(person, Person, ReadPersonResponse),
|
|
44
|
-
)
|
|
44
|
+
),
|
|
45
45
|
})
|
|
46
46
|
}
|
|
47
47
|
}
|
package/code-base/startup-project/src/application/person/read-many/read-many-person.request.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
PaginatedRequestProps,
|
|
3
|
+
PaginationRequest,
|
|
4
|
+
} from '@koalarx/nest/core/controllers/pagination.request'
|
|
2
5
|
import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
|
|
3
6
|
import { ApiProperty } from '@nestjs/swagger'
|
|
4
7
|
|
|
@@ -10,7 +13,7 @@ export class ReadManyPersonRequest extends PaginationRequest {
|
|
|
10
13
|
@ApiProperty({ required: false })
|
|
11
14
|
@AutoMap()
|
|
12
15
|
active?: boolean
|
|
13
|
-
|
|
16
|
+
|
|
14
17
|
constructor(props?: PaginatedRequestProps<ReadManyPersonRequest>) {
|
|
15
18
|
super()
|
|
16
19
|
Object.assign(this, props)
|
package/code-base/startup-project/src/application/person/update/update-person.handler.spec.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createUnitTestApp } from
|
|
2
|
-
import { createPersonRequestMockup } from
|
|
3
|
-
import { CreatePersonHandler } from
|
|
4
|
-
import { ReadPersonHandler } from
|
|
5
|
-
import { UpdatePersonHandler } from
|
|
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
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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,6 +47,7 @@ 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
53
|
await this.repository.update(personInBd)
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
|
|
2
2
|
import { ApiProperty } from '@nestjs/swagger'
|
|
3
3
|
|
|
4
|
+
export class UpdatePersonAddressRequest {
|
|
5
|
+
@ApiProperty()
|
|
6
|
+
@AutoMap()
|
|
7
|
+
id: number
|
|
8
|
+
|
|
9
|
+
@ApiProperty()
|
|
10
|
+
@AutoMap()
|
|
11
|
+
address: string
|
|
12
|
+
}
|
|
13
|
+
|
|
4
14
|
export class UpdatePersonPhoneRequest {
|
|
5
|
-
@ApiProperty({required: false})
|
|
15
|
+
@ApiProperty({ required: false })
|
|
6
16
|
@AutoMap()
|
|
7
17
|
id?: number
|
|
8
18
|
|
|
@@ -23,4 +33,8 @@ export class UpdatePersonRequest {
|
|
|
23
33
|
@ApiProperty({ type: [UpdatePersonPhoneRequest] })
|
|
24
34
|
@AutoMap({ type: UpdatePersonPhoneRequest, isArray: true })
|
|
25
35
|
phones: Array<UpdatePersonPhoneRequest>
|
|
36
|
+
|
|
37
|
+
@ApiProperty({ type: UpdatePersonAddressRequest })
|
|
38
|
+
@AutoMap({ type: UpdatePersonAddressRequest })
|
|
39
|
+
address: UpdatePersonAddressRequest
|
|
26
40
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EntityBase } from '@koalarx/nest/core/database/entity.base'
|
|
2
|
+
import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
|
|
3
|
+
|
|
4
|
+
export class PersonAddress extends EntityBase<PersonAddress> {
|
|
5
|
+
@AutoMap()
|
|
6
|
+
id: number
|
|
7
|
+
|
|
8
|
+
@AutoMap()
|
|
9
|
+
address: string
|
|
10
|
+
}
|
|
@@ -2,6 +2,7 @@ import { EntityBase } from '@koalarx/nest/core/database/entity.base'
|
|
|
2
2
|
import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
|
|
3
3
|
import { List } from '@koalarx/nest/core/utils/list'
|
|
4
4
|
import { PersonPhone } from './person-phone'
|
|
5
|
+
import { PersonAddress } from './person-address'
|
|
5
6
|
|
|
6
7
|
export class Person extends EntityBase<Person> {
|
|
7
8
|
@AutoMap()
|
|
@@ -13,6 +14,9 @@ export class Person extends EntityBase<Person> {
|
|
|
13
14
|
@AutoMap({ type: List })
|
|
14
15
|
phones = new List(PersonPhone)
|
|
15
16
|
|
|
17
|
+
@AutoMap({ type: PersonAddress })
|
|
18
|
+
address: PersonAddress
|
|
19
|
+
|
|
16
20
|
@AutoMap()
|
|
17
21
|
active: boolean
|
|
18
22
|
}
|
|
@@ -8,12 +8,13 @@ import { RepositoriesModule } from '@/infra/database/repositories/repositories.m
|
|
|
8
8
|
import { KoalaNestModule } from '@koalarx/nest/core/koala-nest.module'
|
|
9
9
|
import { Module } from '@nestjs/common'
|
|
10
10
|
import { ControllersModule } from './controllers/controllers.module'
|
|
11
|
+
import { env } from '@/core/env'
|
|
11
12
|
|
|
12
13
|
@Module({
|
|
13
14
|
imports: [
|
|
14
|
-
KoalaNestModule.register(),
|
|
15
|
-
RepositoriesModule,
|
|
16
|
-
ControllersModule
|
|
15
|
+
KoalaNestModule.register({ env }),
|
|
16
|
+
RepositoriesModule,
|
|
17
|
+
ControllersModule,
|
|
17
18
|
],
|
|
18
19
|
providers: [
|
|
19
20
|
CreatePersonHandler,
|
|
@@ -3,10 +3,7 @@ import { ControllerModule } from './controller.module'
|
|
|
3
3
|
import { PersonModule } from './person/person.module'
|
|
4
4
|
|
|
5
5
|
@Module({
|
|
6
|
-
imports: [
|
|
7
|
-
ControllerModule,
|
|
8
|
-
PersonModule,
|
|
9
|
-
],
|
|
6
|
+
imports: [ControllerModule, PersonModule],
|
|
10
7
|
exports: [ControllerModule],
|
|
11
8
|
})
|
|
12
9
|
export class ControllersModule {}
|
|
@@ -16,70 +16,93 @@ describe(`CRUD OF PERSON`, () => {
|
|
|
16
16
|
.post(PERSON_ROUTER_CONFIG.group)
|
|
17
17
|
.send({
|
|
18
18
|
name: 'John Doe',
|
|
19
|
-
phones: []
|
|
19
|
+
phones: [],
|
|
20
|
+
address: {
|
|
21
|
+
address: 'Streat 1',
|
|
22
|
+
},
|
|
20
23
|
})
|
|
21
|
-
|
|
24
|
+
|
|
22
25
|
personId = response.body.id
|
|
23
26
|
|
|
24
27
|
expect(response.statusCode).toBe(201)
|
|
25
28
|
expect(response.body).toStrictEqual({
|
|
26
|
-
id: expect.any(Number)
|
|
29
|
+
id: expect.any(Number),
|
|
27
30
|
})
|
|
28
31
|
})
|
|
29
32
|
|
|
30
33
|
it('should get the created person', async () => {
|
|
31
|
-
const response = await request(app.getHttpServer())
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
const response = await request(app.getHttpServer()).get(
|
|
35
|
+
`${PERSON_ROUTER_CONFIG.group}/${personId}`,
|
|
36
|
+
)
|
|
37
|
+
|
|
34
38
|
expect(response.statusCode).toBe(200)
|
|
35
39
|
expect(response.body).toStrictEqual({
|
|
36
40
|
id: personId,
|
|
37
41
|
name: 'John Doe',
|
|
38
42
|
phones: [],
|
|
39
|
-
|
|
43
|
+
address: {
|
|
44
|
+
id: 1,
|
|
45
|
+
address: 'Streat 1',
|
|
46
|
+
},
|
|
47
|
+
status: 'active',
|
|
40
48
|
})
|
|
41
49
|
})
|
|
42
50
|
|
|
43
51
|
it('should get all persons', async () => {
|
|
44
|
-
const response = await request(app.getHttpServer())
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
const response = await request(app.getHttpServer()).get(
|
|
53
|
+
PERSON_ROUTER_CONFIG.group,
|
|
54
|
+
)
|
|
55
|
+
|
|
47
56
|
expect(response.statusCode).toBe(200)
|
|
48
57
|
expect(response.body).toStrictEqual({
|
|
49
|
-
items: [
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
items: [
|
|
59
|
+
{
|
|
60
|
+
id: personId,
|
|
61
|
+
name: 'John Doe',
|
|
62
|
+
phones: [],
|
|
63
|
+
address: {
|
|
64
|
+
id: 1,
|
|
65
|
+
address: 'Streat 1',
|
|
66
|
+
},
|
|
67
|
+
status: 'active',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
count: 1,
|
|
56
71
|
})
|
|
57
72
|
})
|
|
58
73
|
|
|
59
74
|
it('should get all inactive persons', async () => {
|
|
60
|
-
const response = await request(app.getHttpServer())
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
const response = await request(app.getHttpServer()).get(
|
|
76
|
+
`${PERSON_ROUTER_CONFIG.group}?active=false`,
|
|
77
|
+
)
|
|
78
|
+
|
|
63
79
|
expect(response.statusCode).toBe(200)
|
|
64
80
|
expect(response.body).toStrictEqual({
|
|
65
81
|
items: [],
|
|
66
|
-
count: 0
|
|
82
|
+
count: 0,
|
|
67
83
|
})
|
|
68
84
|
})
|
|
69
85
|
|
|
70
86
|
it('should get persons by name', async () => {
|
|
71
|
-
const response = await request(app.getHttpServer())
|
|
72
|
-
|
|
73
|
-
|
|
87
|
+
const response = await request(app.getHttpServer()).get(
|
|
88
|
+
`${PERSON_ROUTER_CONFIG.group}?name=John`,
|
|
89
|
+
)
|
|
90
|
+
|
|
74
91
|
expect(response.statusCode).toBe(200)
|
|
75
92
|
expect(response.body).toStrictEqual({
|
|
76
|
-
items: [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
93
|
+
items: [
|
|
94
|
+
{
|
|
95
|
+
id: personId,
|
|
96
|
+
name: 'John Doe',
|
|
97
|
+
phones: [],
|
|
98
|
+
address: {
|
|
99
|
+
id: 1,
|
|
100
|
+
address: 'Streat 1',
|
|
101
|
+
},
|
|
102
|
+
status: 'active',
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
count: 1,
|
|
83
106
|
})
|
|
84
107
|
})
|
|
85
108
|
|
|
@@ -89,32 +112,43 @@ describe(`CRUD OF PERSON`, () => {
|
|
|
89
112
|
.send({
|
|
90
113
|
name: 'John Doe Updated',
|
|
91
114
|
phones: [],
|
|
92
|
-
|
|
115
|
+
address: {
|
|
116
|
+
id: 1,
|
|
117
|
+
address: 'Streat 2',
|
|
118
|
+
},
|
|
119
|
+
status: 'active',
|
|
93
120
|
})
|
|
94
|
-
|
|
121
|
+
|
|
95
122
|
expect(updateResponse.statusCode).toBe(200)
|
|
96
123
|
|
|
97
|
-
const response = await request(app.getHttpServer())
|
|
98
|
-
|
|
99
|
-
|
|
124
|
+
const response = await request(app.getHttpServer()).get(
|
|
125
|
+
`${PERSON_ROUTER_CONFIG.group}/${personId}`,
|
|
126
|
+
)
|
|
127
|
+
|
|
100
128
|
expect(response.body).toStrictEqual({
|
|
101
129
|
id: personId,
|
|
102
130
|
name: 'John Doe Updated',
|
|
103
131
|
phones: [],
|
|
104
|
-
|
|
132
|
+
address: {
|
|
133
|
+
id: 1,
|
|
134
|
+
address: 'Streat 2',
|
|
135
|
+
},
|
|
136
|
+
status: 'active',
|
|
105
137
|
})
|
|
106
138
|
})
|
|
107
139
|
|
|
108
140
|
it('should delete the created person', async () => {
|
|
109
|
-
const deleteResponse = await request(app.getHttpServer())
|
|
110
|
-
|
|
111
|
-
|
|
141
|
+
const deleteResponse = await request(app.getHttpServer()).delete(
|
|
142
|
+
`${PERSON_ROUTER_CONFIG.group}/${personId}`,
|
|
143
|
+
)
|
|
144
|
+
|
|
112
145
|
expect(deleteResponse).toBeTruthy()
|
|
113
146
|
expect(deleteResponse.statusCode).toBe(204)
|
|
114
147
|
|
|
115
|
-
const response = await request(app.getHttpServer())
|
|
116
|
-
|
|
117
|
-
|
|
148
|
+
const response = await request(app.getHttpServer()).get(
|
|
149
|
+
`${PERSON_ROUTER_CONFIG.group}/${personId}`,
|
|
150
|
+
)
|
|
151
|
+
|
|
118
152
|
expect(response.statusCode).toBe(404)
|
|
119
153
|
})
|
|
120
|
-
})
|
|
154
|
+
})
|
|
@@ -15,4 +15,11 @@ export class DbTransactionContext
|
|
|
15
15
|
get personPhone(): Prisma.PersonPhoneDelegate<DefaultArgs> {
|
|
16
16
|
return this.transactionalClient.personPhone
|
|
17
17
|
}
|
|
18
|
+
|
|
19
|
+
get personAddress(): Prisma.PersonAddressDelegate<
|
|
20
|
+
DefaultArgs,
|
|
21
|
+
Prisma.PrismaClientOptions
|
|
22
|
+
> {
|
|
23
|
+
return this.transactionalClient.personAddress
|
|
24
|
+
}
|
|
18
25
|
}
|
|
@@ -4,14 +4,14 @@ import { KoalaAppTest } from '@koalarx/nest/test/koala-app-test'
|
|
|
4
4
|
import { Test } from '@nestjs/testing'
|
|
5
5
|
|
|
6
6
|
export async function createE2ETestApp() {
|
|
7
|
-
return Test
|
|
8
|
-
.createTestingModule({ imports: [AppModule] })
|
|
7
|
+
return Test.createTestingModule({ imports: [AppModule] })
|
|
9
8
|
.compile()
|
|
10
9
|
.then((moduleRef) => moduleRef.createNestApplication())
|
|
11
|
-
.then((app) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
.then((app) =>
|
|
11
|
+
new KoalaAppTest(app)
|
|
12
|
+
.setDbTransactionContext(DbTransactionContext)
|
|
13
|
+
.enableCors()
|
|
14
|
+
.build(),
|
|
15
15
|
)
|
|
16
16
|
.then((app) => app.init())
|
|
17
|
-
}
|
|
17
|
+
}
|
|
@@ -13,12 +13,12 @@ export function createUnitTestApp() {
|
|
|
13
13
|
const personRepository = new PersonRepository()
|
|
14
14
|
|
|
15
15
|
return new KoalaAppTestDependencies({
|
|
16
|
-
dependencies: [
|
|
16
|
+
dependencies: [
|
|
17
17
|
new CreatePersonHandler(automapService, personRepository),
|
|
18
18
|
new ReadPersonHandler(automapService, personRepository),
|
|
19
19
|
new ReadManyPersonHandler(automapService, personRepository),
|
|
20
20
|
new UpdatePersonHandler(automapService, personRepository),
|
|
21
|
-
new DeletePersonHandler(personRepository)
|
|
22
|
-
]
|
|
21
|
+
new DeletePersonHandler(personRepository),
|
|
22
|
+
],
|
|
23
23
|
})
|
|
24
|
-
}
|
|
24
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { CreatePersonRequest } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { CreatePersonRequest } from '@/application/person/create/create-person.request'
|
|
2
|
+
import { faker } from '@faker-js/faker'
|
|
3
|
+
import { assignObject } from '@koalarx/nest/core/utils/assing-object'
|
|
4
4
|
|
|
5
5
|
export const createPersonRequestMockup = assignObject(CreatePersonRequest, {
|
|
6
6
|
name: faker.person.fullName(),
|
|
7
|
-
phones: [{phone: faker.phone.number()}]
|
|
8
|
-
}
|
|
7
|
+
phones: [{ phone: faker.phone.number() }],
|
|
8
|
+
address: { address: faker.location.streetAddress() },
|
|
9
|
+
})
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { ReadManyPersonDto } from
|
|
2
|
-
import { Person } from
|
|
3
|
-
import { IPersonRepository } from
|
|
4
|
-
import { CreatedRegistreResponseBase } from
|
|
5
|
-
import { ListResponseBase } from
|
|
6
|
-
import { InMemoryBaseRepository } from
|
|
1
|
+
import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
|
|
2
|
+
import { Person } from '@/domain/entities/person/person'
|
|
3
|
+
import { IPersonRepository } from '@/domain/repositories/iperson.repository'
|
|
4
|
+
import { CreatedRegistreResponseBase } from '@koalarx/nest/core/controllers/created-registre-response.base'
|
|
5
|
+
import { ListResponseBase } from '@koalarx/nest/core/controllers/list-response.base'
|
|
6
|
+
import { InMemoryBaseRepository } from '@koalarx/nest/test/repositories/in-memory-base.repository'
|
|
7
7
|
|
|
8
|
-
export class PersonRepository
|
|
8
|
+
export class PersonRepository
|
|
9
|
+
extends InMemoryBaseRepository<Person>
|
|
10
|
+
implements IPersonRepository
|
|
11
|
+
{
|
|
9
12
|
create(person: Person): Promise<CreatedRegistreResponseBase<number>> {
|
|
10
13
|
return this.insert(person)
|
|
11
14
|
}
|
|
@@ -19,13 +22,15 @@ export class PersonRepository extends InMemoryBaseRepository<Person> implements
|
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
readMany(query: ReadManyPersonDto): Promise<ListResponseBase<Person>> {
|
|
22
|
-
return this.findManyAndCount<ReadManyPersonDto>(
|
|
23
|
-
|
|
24
|
-
(
|
|
25
|
+
return this.findManyAndCount<ReadManyPersonDto>(
|
|
26
|
+
query,
|
|
27
|
+
(person) =>
|
|
28
|
+
(!query.name || person.name.includes(query.name)) &&
|
|
29
|
+
(query.active === undefined || person.active === query.active),
|
|
25
30
|
)
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
delete(id: number): Promise<void> {
|
|
29
34
|
return this.remove((person) => person.id === id)
|
|
30
35
|
}
|
|
31
|
-
}
|
|
36
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createE2EDatabase } from '@koalarx/nest/test/utils/create-e2e-database'
|
|
2
|
-
import { dropE2EDatabase } from '@koalarx/nest/test/utils/drop-e2e-database'
|
|
1
|
+
import { createE2EDatabase } from '@koalarx/nest/test/utils/create-e2e-database'
|
|
2
|
+
import { dropE2EDatabase } from '@koalarx/nest/test/utils/drop-e2e-database'
|
|
3
3
|
|
|
4
4
|
let schemaId: string
|
|
5
5
|
|
|
6
|
-
beforeAll(() => schemaId = createE2EDatabase(), 40000)
|
|
6
|
+
beforeAll(() => (schemaId = createE2EDatabase()), 40000)
|
|
7
7
|
afterAll(async () => dropE2EDatabase(schemaId))
|
package/index.js
CHANGED
|
@@ -30,7 +30,7 @@ var import_inquirer = __toESM(require("inquirer"));
|
|
|
30
30
|
// package.json
|
|
31
31
|
var package_default = {
|
|
32
32
|
name: "@koalarx/nest-cli",
|
|
33
|
-
version: "1.0.
|
|
33
|
+
version: "1.0.15",
|
|
34
34
|
description: "Biblioteca de CLI para cria\xE7\xE3o de projetos utilizando Koala Nest",
|
|
35
35
|
scripts: {
|
|
36
36
|
test: "vitest run",
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import js from "@eslint/js";
|
|
2
|
-
import { defineConfig } from "eslint/config";
|
|
3
|
-
import globals from "globals";
|
|
4
|
-
import tseslint from "typescript-eslint";
|
|
5
|
-
|
|
6
|
-
export default defineConfig([
|
|
7
|
-
{ files: ["**/*.{js,mjs,cjs,ts}"] },
|
|
8
|
-
{ files: ["**/*.{js,mjs,cjs,ts}"], languageOptions: { globals: globals.node } },
|
|
9
|
-
{ files: ["**/*.{js,mjs,cjs,ts}"], plugins: { js }, extends: ["js/recommended"] },
|
|
10
|
-
tseslint.configs.recommended,
|
|
11
|
-
{ ignores: ["node_modules", "dist"] },
|
|
12
|
-
{
|
|
13
|
-
rules: {
|
|
14
|
-
"@typescript-eslint/ban-ts-comment": "off",
|
|
15
|
-
"@typescript-eslint/no-unused-vars": "off",
|
|
16
|
-
"@typescript-eslint/no-unsafe-function-type": "off",
|
|
17
|
-
"@typescript-eslint/no-useless-constructor": "off",
|
|
18
|
-
"@typescript-eslint/no-new": "off",
|
|
19
|
-
"@typescript-eslint/no-explicit-any": "off"
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
]);
|
|
File without changes
|