@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.
- package/code-base/startup-project/.eslintignore +2 -0
- package/code-base/startup-project/.eslintrc.js +20 -0
- package/code-base/startup-project/nest-cli.json +1 -1
- package/code-base/startup-project/package.json +10 -11
- 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 +44 -0
- 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.handler.ts +1 -1
- 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/delete-inative-job/delete-inactive-job.ts +2 -2
- package/code-base/startup-project/src/application/person/events/inactive-person/inactive-person-handler.ts +3 -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 +7 -2
- package/code-base/startup-project/src/application/person/read-many/read-many-person.request.ts +8 -2
- package/code-base/startup-project/src/application/person/read-many/read-many-person.response.ts +1 -1
- 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 +2 -1
- 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/dtos/read-many-person.dto.ts +16 -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/domain/repositories/iperson.repository.ts +4 -6
- package/code-base/startup-project/src/domain/services/.gitkeep +0 -0
- package/code-base/startup-project/src/{infra → host}/app.module.ts +5 -4
- package/code-base/startup-project/src/{infra → host}/controllers/controller.module.ts +2 -2
- package/code-base/startup-project/src/{infra → host}/controllers/controllers.module.ts +1 -4
- package/code-base/startup-project/src/{infra → host}/controllers/person/person.controller.e2e-spec.ts +78 -44
- package/code-base/startup-project/src/{infra → host}/main.ts +1 -1
- 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 +13 -6
- package/code-base/startup-project/src/infra/services/.gitkeep +0 -0
- package/code-base/startup-project/src/test/create-e2e-test-app.ts +8 -8
- package/code-base/startup-project/src/test/create-unit-test-app.ts +5 -5
- 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 +24 -15
- 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/domain/mapping/person.mapping.ts +0 -24
- /package/code-base/startup-project/src/{domain → application}/mapping/mapping.profile.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/create-person.controller.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/delete-person.controller.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/person.module.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/read-many-person.controller.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/read-person.controller.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/router.config.ts +0 -0
- /package/code-base/startup-project/src/{infra → host}/controllers/person/update-person.controller.ts +0 -0
|
@@ -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,16 @@
|
|
|
1
|
+
import { PaginatedRequestProps } from '@koalarx/nest/core/controllers/pagination.request'
|
|
2
|
+
import { PaginationDto } from '@koalarx/nest/core/dtos/pagination.dto'
|
|
3
|
+
import { AutoMap } from '@koalarx/nest/core/mapping/auto-mapping.decorator'
|
|
4
|
+
|
|
5
|
+
export class ReadManyPersonDto extends PaginationDto {
|
|
6
|
+
@AutoMap()
|
|
7
|
+
name?: string
|
|
8
|
+
|
|
9
|
+
@AutoMap()
|
|
10
|
+
active?: boolean
|
|
11
|
+
|
|
12
|
+
constructor(props?: PaginatedRequestProps<ReadManyPersonDto>) {
|
|
13
|
+
super()
|
|
14
|
+
Object.assign(this, props)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -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
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { CreatedRegistreResponseBase } from '@koalarx/nest/core/controllers/created-registre-response.base'
|
|
2
2
|
import { ListResponseBase } from '@koalarx/nest/core/controllers/list-response.base'
|
|
3
|
+
import { ReadManyPersonDto } from '../dtos/read-many-person.dto'
|
|
3
4
|
import { Person } from '../entities/person/person'
|
|
4
|
-
import { ReadManyPersonRequest } from '@/application/person/read-many/read-many-person.request'
|
|
5
5
|
|
|
6
6
|
export abstract class IPersonRepository {
|
|
7
|
-
abstract
|
|
7
|
+
abstract create(person: Person): Promise<CreatedRegistreResponseBase<number>>
|
|
8
|
+
abstract update(person: Person): Promise<void>
|
|
8
9
|
abstract read(id: number): Promise<Person | null>
|
|
9
|
-
abstract readMany(
|
|
10
|
-
query: ReadManyPersonRequest,
|
|
11
|
-
): Promise<ListResponseBase<Person>>
|
|
12
|
-
|
|
10
|
+
abstract readMany(query: ReadManyPersonDto): Promise<ListResponseBase<Person>>
|
|
13
11
|
abstract delete(id: number): Promise<void>
|
|
14
12
|
}
|
|
File without changes
|
|
@@ -4,16 +4,17 @@ import { DeleteInactiveJob } from '@/application/person/delete-inative-job/delet
|
|
|
4
4
|
import { DeletePersonHandler } from '@/application/person/delete/delete-person.handler'
|
|
5
5
|
import { InactivePersonHandler } from '@/application/person/events/inactive-person/inactive-person-handler'
|
|
6
6
|
import { ReadManyPersonHandler } from '@/application/person/read-many/read-many-person.handler'
|
|
7
|
+
import { RepositoriesModule } from '@/infra/database/repositories/repositories.module'
|
|
7
8
|
import { KoalaNestModule } from '@koalarx/nest/core/koala-nest.module'
|
|
8
9
|
import { Module } from '@nestjs/common'
|
|
9
10
|
import { ControllersModule } from './controllers/controllers.module'
|
|
10
|
-
import {
|
|
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,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { MappingProfile } from '@/
|
|
1
|
+
import { MappingProfile } from '@/application/mapping/mapping.profile'
|
|
2
|
+
import { RepositoriesModule } from '@/infra/database/repositories/repositories.module'
|
|
2
3
|
import { KoalaNestHttpModule } from '@koalarx/nest/core/koala-nest-http.module'
|
|
3
4
|
import { Module } from '@nestjs/common'
|
|
4
|
-
import { RepositoriesModule } from '../database/repositories/repositories.module'
|
|
5
5
|
|
|
6
6
|
@Module({
|
|
7
7
|
imports: [
|
|
@@ -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
|
+
})
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CreatePersonJob } from '@/application/person/create-person-job/create-person-job'
|
|
2
2
|
import { DeleteInactiveJob } from '@/application/person/delete-inative-job/delete-inactive-job'
|
|
3
3
|
import { InactivePersonHandler } from '@/application/person/events/inactive-person/inactive-person-handler'
|
|
4
|
+
import { DbTransactionContext } from '@/infra/database/db-transaction-context'
|
|
4
5
|
import { KoalaApp } from '@koalarx/nest/core/koala-app'
|
|
5
6
|
import { NestFactory } from '@nestjs/core'
|
|
6
7
|
import { AppModule } from './app.module'
|
|
7
|
-
import { DbTransactionContext } from './database/db-transaction-context'
|
|
8
8
|
|
|
9
9
|
async function bootstrap() {
|
|
10
10
|
const app = await NestFactory.create(AppModule).then((app) =>
|
|
@@ -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
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReadManyPersonDto } from '@/domain/dtos/read-many-person.dto'
|
|
2
2
|
import { Person } from '@/domain/entities/person/person'
|
|
3
3
|
import { IPersonRepository } from '@/domain/repositories/iperson.repository'
|
|
4
4
|
import { CreatedRegistreResponseBase } from '@koalarx/nest/core/controllers/created-registre-response.base'
|
|
@@ -21,19 +21,26 @@ export class PersonRepository
|
|
|
21
21
|
super({
|
|
22
22
|
modelName: Person,
|
|
23
23
|
context: prisma,
|
|
24
|
-
include: {
|
|
24
|
+
include: {
|
|
25
|
+
phones: true,
|
|
26
|
+
address: true,
|
|
27
|
+
},
|
|
25
28
|
})
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
return this.
|
|
31
|
+
create(person: Person): Promise<CreatedRegistreResponseBase<number>> {
|
|
32
|
+
return this.insert(person)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
update(person: Person): Promise<void> {
|
|
36
|
+
return this.edit(person)
|
|
30
37
|
}
|
|
31
38
|
|
|
32
39
|
read(id: number): Promise<Person | null> {
|
|
33
40
|
return this.findById(id)
|
|
34
41
|
}
|
|
35
42
|
|
|
36
|
-
readMany(query:
|
|
43
|
+
readMany(query: ReadManyPersonDto): Promise<ListResponseBase<Person>> {
|
|
37
44
|
return this.findManyAndCount<Prisma.PersonWhereInput>(
|
|
38
45
|
{
|
|
39
46
|
name: {
|
|
@@ -46,6 +53,6 @@ export class PersonRepository
|
|
|
46
53
|
}
|
|
47
54
|
|
|
48
55
|
delete(id: number): Promise<void> {
|
|
49
|
-
return
|
|
56
|
+
return this.remove<Prisma.PersonWhereUniqueInput>({ id })
|
|
50
57
|
}
|
|
51
58
|
}
|
|
File without changes
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { AppModule } from '@/
|
|
1
|
+
import { AppModule } from '@/host/app.module'
|
|
2
2
|
import { DbTransactionContext } from '@/infra/database/db-transaction-context'
|
|
3
3
|
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
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CreatePersonHandler } from '@/application/person/create/create-person.handler'
|
|
2
|
-
import { MappingProfile } from '@/
|
|
2
|
+
import { MappingProfile } from '@/application/mapping/mapping.profile'
|
|
3
3
|
import { AutoMappingService } from '@koalarx/nest/core/mapping/auto-mapping.service'
|
|
4
4
|
import { KoalaAppTestDependencies } from '@koalarx/nest/test/koala-app-test-dependencies'
|
|
5
5
|
import { PersonRepository } from './repositories/person.repository'
|
|
@@ -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,27 +1,36 @@
|
|
|
1
|
-
import {
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
export class PersonRepository
|
|
9
|
+
extends InMemoryBaseRepository<Person>
|
|
10
|
+
implements IPersonRepository
|
|
11
|
+
{
|
|
12
|
+
create(person: Person): Promise<CreatedRegistreResponseBase<number>> {
|
|
13
|
+
return this.insert(person)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
update(person: Person): Promise<void> {
|
|
17
|
+
return this.edit(person, (item) => item.id === person.id)
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
read(id: number): Promise<Person | null> {
|
|
14
21
|
return this.findById(id)
|
|
15
22
|
}
|
|
16
23
|
|
|
17
|
-
readMany(query:
|
|
18
|
-
return this.findManyAndCount<
|
|
19
|
-
|
|
20
|
-
(
|
|
24
|
+
readMany(query: ReadManyPersonDto): Promise<ListResponseBase<Person>> {
|
|
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),
|
|
21
30
|
)
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
delete(id: number): Promise<void> {
|
|
25
|
-
return
|
|
34
|
+
return this.remove((person) => person.id === id)
|
|
26
35
|
}
|
|
27
|
-
}
|
|
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
|
-
]);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { CreatePersonPhoneRequest, CreatePersonRequest } from '@/application/person/create/create-person.request'
|
|
2
|
-
import { ReadPersonPhoneResponse, ReadPersonResponse } from '@/application/person/read/read-person.response'
|
|
3
|
-
import { UpdatePersonPhoneRequest, UpdatePersonRequest } from '@/application/person/update/update-person.request'
|
|
4
|
-
import { createMap } from '@koalarx/nest/core/mapping/create-map'
|
|
5
|
-
import { forMember } from '@koalarx/nest/core/mapping/for-member'
|
|
6
|
-
import { Person } from '../entities/person/person'
|
|
7
|
-
import { PersonPhone } from '../entities/person/person-phone'
|
|
8
|
-
|
|
9
|
-
export class PersonMapping {
|
|
10
|
-
static createMap() {
|
|
11
|
-
createMap(CreatePersonPhoneRequest, PersonPhone)
|
|
12
|
-
createMap(CreatePersonRequest, Person)
|
|
13
|
-
|
|
14
|
-
createMap(PersonPhone, ReadPersonPhoneResponse)
|
|
15
|
-
createMap(
|
|
16
|
-
Person,
|
|
17
|
-
ReadPersonResponse,
|
|
18
|
-
forMember('status', (s) => (s.active === true ? 'active' : 'inactive')),
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
createMap(UpdatePersonPhoneRequest, PersonPhone)
|
|
22
|
-
createMap(UpdatePersonRequest, Person)
|
|
23
|
-
}
|
|
24
|
-
}
|
|
File without changes
|
/package/code-base/startup-project/src/{infra → host}/controllers/person/create-person.controller.ts
RENAMED
|
File without changes
|
/package/code-base/startup-project/src/{infra → host}/controllers/person/delete-person.controller.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/code-base/startup-project/src/{infra → host}/controllers/person/read-person.controller.ts
RENAMED
|
File without changes
|
|
File without changes
|
/package/code-base/startup-project/src/{infra → host}/controllers/person/update-person.controller.ts
RENAMED
|
File without changes
|