Skip to content

Commit f254768

Browse files
committed
refactor: save method clean up
1 parent 04dff41 commit f254768

File tree

2 files changed

+54
-56
lines changed

2 files changed

+54
-56
lines changed

src/__tests__/polymorphic.repository.spec.ts

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { UserEntity } from './entities/user.entity';
44
import { config } from 'dotenv';
55
import { resolve } from 'path';
66
import { AdvertRepository } from './repository/advert.repository';
7-
import { AbstractPolymorphicRepository } from '../../dist';
7+
import { AbstractPolymorphicRepository } from '../';
88

99
describe('AbstractPolymorphicRepository', () => {
1010
let connection: Connection;
@@ -41,38 +41,42 @@ describe('AbstractPolymorphicRepository', () => {
4141
]);
4242
});
4343

44-
describe('child', () => {
45-
it('Can create with parent', async () => {
46-
const repository = connection.getCustomRepository(AdvertRepository);
44+
describe('Childen', () => {
45+
describe('create', () => {
46+
it('Can create with parent', async () => {
47+
const repository = connection.getCustomRepository(AdvertRepository);
4748

48-
const user = new UserEntity();
49+
const user = new UserEntity();
4950

50-
const result = repository.create({
51-
owner: user,
52-
});
51+
const result = repository.create({
52+
owner: user,
53+
});
5354

54-
expect(result).toBeInstanceOf(AdvertEntity);
55-
expect(result.owner).toBeInstanceOf(UserEntity);
55+
expect(result).toBeInstanceOf(AdvertEntity);
56+
expect(result.owner).toBeInstanceOf(UserEntity);
57+
});
5658
});
5759

58-
it('Can save cascade parent', async () => {
59-
const repository = connection.getCustomRepository(AdvertRepository);
60-
const userRepository = connection.getRepository(UserEntity);
60+
describe('save', () => {
61+
it('Can save cascade parent', async () => {
62+
const repository = connection.getCustomRepository(AdvertRepository);
63+
const userRepository = connection.getRepository(UserEntity);
6164

62-
const user = await userRepository.save(new UserEntity());
65+
const user = await userRepository.save(new UserEntity());
6366

64-
const result = await repository.save(
65-
repository.create({
66-
owner: user,
67-
}),
68-
);
67+
const result = await repository.save(
68+
repository.create({
69+
owner: user,
70+
}),
71+
);
6972

70-
expect(result).toBeInstanceOf(AdvertEntity);
71-
expect(result.owner).toBeInstanceOf(UserEntity);
72-
expect(result.id).toBeTruthy();
73-
expect(result.owner.id).toBeTruthy();
74-
expect(result.entityType).toBe(UserEntity.name);
75-
expect(result.entityId).toBe(result.owner.id);
73+
expect(result).toBeInstanceOf(AdvertEntity);
74+
expect(result.owner).toBeInstanceOf(UserEntity);
75+
expect(result.id).toBeTruthy();
76+
expect(result.owner.id).toBeTruthy();
77+
expect(result.entityType).toBe(UserEntity.name);
78+
expect(result.entityId).toBe(result.owner.id);
79+
});
7680
});
7781
});
7882
});

src/polymorphic.repository.ts

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,9 @@ export abstract class AbstractPolymorphicRepository<E> extends Repository<E> {
226226
options?: SaveOptions & { reload: false },
227227
): Promise<(T & E) | Array<T & E> | T | Array<T>> {
228228
if (!this.isPolymorph()) {
229-
return Array.isArray(entityOrEntities) && options
230-
? await super.save(entityOrEntities, options)
231-
: Array.isArray(entityOrEntities)
232-
? await super.save(entityOrEntities)
233-
: options
234-
? await super.save(entityOrEntities, options)
235-
: await super.save(entityOrEntities);
229+
return Array.isArray(entityOrEntities)
230+
? super.save(entityOrEntities, options)
231+
: super.save(entityOrEntities, options);
236232
}
237233

238234
const metadata = this.getPolymorphicMetadata();
@@ -248,53 +244,51 @@ export abstract class AbstractPolymorphicRepository<E> extends Repository<E> {
248244
if (!parent || entity[entityIdColumn(options)] !== undefined) {
249245
return entity;
250246
}
247+
248+
/**
249+
* Add parent's id and type to child's id and type field
250+
*/
251251
entity[entityIdColumn(options)] = parent[PrimaryColumn(options)];
252252
entity[entityTypeColumn(options)] = parent.constructor.name;
253253
return entity;
254254
});
255255
}
256256
});
257257

258-
const savedEntities =
259-
Array.isArray(entityOrEntities) && options
260-
? await super.save(entityOrEntities, options)
261-
: Array.isArray(entityOrEntities)
262-
? await super.save(entityOrEntities)
263-
: options
264-
? await super.save(entityOrEntities, options)
265-
: await super.save(entityOrEntities);
266-
267-
return savedEntities;
268-
269-
// return Promise.all(
270-
// (Array.isArray(savedEntities) ? savedEntities : [savedEntities]).map(
271-
// entity =>
272-
// new Promise(async resolve => {
273-
// // @ts-ignore
274-
// await this.deletePolymorphs(entity as E, metadata);
275-
// // @ts-ignore
276-
// resolve(await this.savePolymorphs(entity as E, metadata));
277-
// }),
278-
// ),
279-
// );
258+
/**
259+
* Check deleteBeforeUpdate
260+
*/
261+
Array.isArray(entityOrEntities)
262+
? await Promise.all(
263+
(entityOrEntities as Array<T>).map((entity) =>
264+
this.deletePolymorphs(entity, metadata),
265+
),
266+
)
267+
: await this.deletePolymorphs(entityOrEntities as T, metadata);
268+
269+
return Array.isArray(entityOrEntities)
270+
? super.save(entityOrEntities, options)
271+
: super.save(entityOrEntities, options);
280272
}
281273

282274
private async deletePolymorphs(
283-
entity: E,
275+
entity: DeepPartial<E>,
284276
options: PolymorphicMetadataInterface[],
285277
): Promise<void | never> {
286278
await Promise.all(
287279
options.map(
288280
(option: PolymorphicMetadataInterface) =>
289281
new Promise((resolve) => {
282+
console.log('delete', option.deleteBeforeUpdate);
290283
if (!option.deleteBeforeUpdate) {
291-
return Promise.resolve();
284+
resolve(Promise.resolve());
292285
}
293286

294287
const entityTypes = Array.isArray(option.classType)
295288
? option.classType
296289
: [option.classType];
297290

291+
// resolve to singular query?
298292
resolve(
299293
Promise.all(
300294
entityTypes.map((type: () => Function | Function[]) => {

0 commit comments

Comments
 (0)