Skip to content

Commit 534895d

Browse files
biniamb-admike
authored andcommitted
fix(repository): change parameter order in HasManyRepositoryFactory
BREAKING CHANGE: the generic SourceID for type HasManyRepositoryFactory has been renamed to ForeignKeyType and switched with Target generic. Also, the function createHasManyRepositoryFactory also renames the same generic and makes it the last declared generic. Lastly, the generic ForeignKeyType is added to DefaultCrudRepository#_createHasManyRepository FactoryFor function. Assuming there is an Order and Customer model defined, see the following examples for upgrade instructions: For `HasManyRepository` type: ```diff - public orders: HasManyRepository<typeof Customer.prototype.id, Order> + public orders: HasManyRepository<Order, typeof Customer.prototype.id> ``` For `createHasManyRepositoryFactory` function: ```diff - const orderFactoryFn = createHasManyRepositoryFactory<typeof Customer. prototype.id, Order, typeof Order.prototype.id>(...); + const orderFactoryFn = createHasManyRepositoryFactory<Order, typeof Order. prototype.id, typeof Customer.prototype.id>(...); ```
1 parent 51bc012 commit 534895d

File tree

6 files changed

+25
-21
lines changed

6 files changed

+25
-21
lines changed

docs/site/HasMany-relation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class CustomerRepository extends DefaultCrudRepository<
128128
Customer,
129129
typeof Customer.prototype.id
130130
> {
131-
public orders: HasManyRepositoryFactory<typeof Customer.prototype.id, Order>;
131+
public orders: HasManyRepositoryFactory<Order, typeof Customer.prototype.id>;
132132
constructor(
133133
@inject('datasources.db') protected db: juggler.DataSource,
134134
@repository(OrderRepository) orderRepository: OrderRepository,

packages/repository/src/repositories/legacy-juggler-bridge.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export class DefaultCrudRepository<T extends Entity, ID>
132132
* Customer,
133133
* typeof Customer.prototype.id
134134
* > {
135-
* public orders: HasManyRepositoryFactory<typeof Customer.prototype.id, Order>;
135+
* public orders: HasManyRepositoryFactory<Order, typeof Customer.prototype.id>;
136136
*
137137
* constructor(
138138
* protected db: juggler.DataSource,
@@ -150,12 +150,16 @@ export class DefaultCrudRepository<T extends Entity, ID>
150150
* @param relationName Name of the relation defined on the source model
151151
* @param targetRepo Target repository instance
152152
*/
153-
protected _createHasManyRepositoryFactoryFor<Target extends Entity, TargetID>(
153+
protected _createHasManyRepositoryFactoryFor<
154+
Target extends Entity,
155+
TargetID,
156+
ForeignKeyType
157+
>(
154158
relationName: string,
155159
targetRepo: EntityCrudRepository<Target, TargetID>,
156-
): HasManyRepositoryFactory<ID, Target> {
160+
): HasManyRepositoryFactory<Target, ForeignKeyType> {
157161
const meta = this.entityClass.definition.relations[relationName];
158-
return createHasManyRepositoryFactory<ID, Target, TargetID>(
162+
return createHasManyRepositoryFactory<Target, TargetID, ForeignKeyType>(
159163
meta as HasManyDefinition,
160164
targetRepo,
161165
);

packages/repository/src/repositories/relation.factory.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
DefaultHasManyEntityCrudRepository,
1212
} from './relation.repository';
1313

14-
export type HasManyRepositoryFactory<SourceID, Target extends Entity> = (
15-
fkValue: SourceID,
14+
export type HasManyRepositoryFactory<Target extends Entity, ForeignKeyType> = (
15+
fkValue: ForeignKeyType,
1616
) => HasManyRepository<Target>;
1717

1818
/**
@@ -29,14 +29,14 @@ export type HasManyRepositoryFactory<SourceID, Target extends Entity> = (
2929
* the given target repository
3030
*/
3131
export function createHasManyRepositoryFactory<
32-
SourceID,
3332
Target extends Entity,
34-
TargetID
33+
TargetID,
34+
ForeignKeyType
3535
>(
3636
relationMetadata: HasManyDefinition,
3737
targetRepository: EntityCrudRepository<Target, TargetID>,
38-
): HasManyRepositoryFactory<SourceID, Target> {
39-
return function(fkValue: SourceID) {
38+
): HasManyRepositoryFactory<Target, ForeignKeyType> {
39+
return function(fkValue: ForeignKeyType) {
4040
const fkName = relationMetadata.keyTo;
4141
if (!fkName) {
4242
throw new Error(

packages/repository/test/acceptance/has-many-without-di.relation.acceptance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ describe('HasMany relation', () => {
133133
typeof Customer.prototype.id
134134
> {
135135
public orders: HasManyRepositoryFactory<
136-
typeof Customer.prototype.id,
137-
Order
136+
Order,
137+
typeof Customer.prototype.id
138138
>;
139139

140140
constructor(

packages/repository/test/acceptance/has-many.relation.acceptance.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ describe('HasMany relation', () => {
205205
typeof Customer.prototype.id
206206
> {
207207
public orders: HasManyRepositoryFactory<
208-
typeof Customer.prototype.id,
209-
Order
208+
Order,
209+
typeof Customer.prototype.id
210210
>;
211211
constructor(
212212
@inject('datasources.db') protected db: juggler.DataSource,

packages/repository/test/integration/repositories/relation.factory.integration.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ describe('HasMany relation', () => {
2828
let reviewRepo: EntityCrudRepository<Review, typeof Review.prototype.id>;
2929
let customerOrderRepo: HasManyRepository<Order>;
3030
let customerAuthoredReviewFactoryFn: HasManyRepositoryFactory<
31-
typeof Customer.prototype.id,
32-
Review
31+
Review,
32+
typeof Customer.prototype.id
3333
>;
3434
let customerApprovedReviewFactoryFn: HasManyRepositoryFactory<
35-
typeof Customer.prototype.id,
36-
Review
35+
Review,
36+
typeof Customer.prototype.id
3737
>;
3838
let existingCustomerId: number;
3939

@@ -209,9 +209,9 @@ describe('HasMany relation', () => {
209209

210210
function givenConstrainedRepositories() {
211211
const orderFactoryFn = createHasManyRepositoryFactory<
212-
typeof Customer.prototype.id,
213212
Order,
214-
typeof Order.prototype.id
213+
typeof Order.prototype.id,
214+
typeof Customer.prototype.id
215215
>(Customer.definition.relations.orders as HasManyDefinition, orderRepo);
216216

217217
customerOrderRepo = orderFactoryFn(existingCustomerId);

0 commit comments

Comments
 (0)