Skip to content

Commit b8c59a1

Browse files
committed
fix: hydrate polymorphic children from parent
1 parent 9663935 commit b8c59a1

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

src/__tests__/polymorphic.repository.spec.ts

+37
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { resolve } from 'path';
66
import { AdvertRepository } from './repository/advert.repository';
77
import { AbstractPolymorphicRepository } from '../';
88
import { MerchantEntity } from './entities/merchant.entity';
9+
import { UserRepository } from './repository/user.repository';
910

1011
describe('AbstractPolymorphicRepository', () => {
1112
let connection: DataSource;
@@ -172,4 +173,40 @@ describe('AbstractPolymorphicRepository', () => {
172173
});
173174
});
174175
});
176+
177+
describe('Parent', () => {
178+
describe('findOne', () => {
179+
it('Can find parent entity with children', async () => {
180+
const repository = AbstractPolymorphicRepository.createRepository(
181+
connection,
182+
UserRepository,
183+
);
184+
const advertRepository = AbstractPolymorphicRepository.createRepository(
185+
connection,
186+
AdvertRepository,
187+
);
188+
189+
const user = await repository.save(new UserEntity());
190+
191+
const advert = await advertRepository.save(
192+
advertRepository.create({
193+
owner: user,
194+
}),
195+
);
196+
197+
let result = await repository.findOne({
198+
where: { id: user.id },
199+
});
200+
201+
result = await repository.hydrateOne(result);
202+
203+
expect(result).toBeInstanceOf(UserEntity);
204+
expect(result?.adverts).toHaveLength(1);
205+
expect(result?.adverts[0]).toBeInstanceOf(AdvertEntity);
206+
expect(result?.adverts[0].id).toBe(advert.id);
207+
expect(result?.adverts[0].entityType).toBe(UserEntity.name);
208+
expect(result?.adverts[0].entityId).toBe(user.id);
209+
});
210+
});
211+
});
175212
});

src/polymorphic.repository.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export abstract class AbstractPolymorphicRepository<
169169
resultEntities: PolymorphicChildInterface[],
170170
entities: PolymorphicChildInterface[],
171171
) => entities.concat(...resultEntities),
172-
results as PolymorphicChildInterface[],
172+
[] as PolymorphicChildInterface[],
173173
)
174174
: results) as PolymorphicChildInterface | PolymorphicChildInterface[],
175175
};
@@ -193,7 +193,7 @@ export abstract class AbstractPolymorphicRepository<
193193
: {
194194
where: {
195195
[entityIdColumn(options)]: parent[PrimaryColumn(options)],
196-
[entityTypeColumn(options)]: entityType,
196+
[entityTypeColumn(options)]: parent.constructor.name,
197197
},
198198
},
199199
);

0 commit comments

Comments
 (0)