Skip to content
This repository was archived by the owner on Jun 15, 2021. It is now read-only.

Commit 9cbf757

Browse files
committed
fix: Fixes entity update functions.
1 parent fbe5603 commit 9cbf757

11 files changed

+68
-35
lines changed

src/functions/countEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import filterEntities from '../utils/filterEntities';
55

66
export default <E extends Entity>(config: Config<E>): CountEntities<E> => {
77
return async ({ filter = {} }) => {
8-
const storedEntities = config.getEntities();
9-
const matchedEntities = filterEntities(storedEntities, filter);
8+
const entities = config.getEntities();
9+
const matchedEntities = filterEntities({ entities, filter });
1010
const count = matchedEntities.length;
1111
return { count };
1212
};

src/functions/createEntity.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@ import Filter from '@js-entity-repos/core/dist/types/Filter';
55
import Config from '../Config';
66
import filterEntities from '../utils/filterEntities';
77

8-
export default <E extends Entity>(config: Config<E>): CreateEntity<E> => {
8+
export default <E extends Entity>({
9+
entityName,
10+
getEntities,
11+
setEntities,
12+
}: Config<E>): CreateEntity<E> => {
913
return async ({ id, entity }) => {
10-
const storedEntities = config.getEntities();
14+
const entities = getEntities();
1115
const idFilter = { id } as Filter<E>;
12-
const matchedEntities = filterEntities(storedEntities, idFilter);
16+
const matchedEntities = filterEntities({ entities, filter: idFilter });
1317
if (matchedEntities.length > 0) {
14-
throw new ConflictingEntityError(config.entityName, id);
18+
throw new ConflictingEntityError(entityName, id);
1519
}
1620
const createdEntity = { ...entity as any, id };
17-
config.setEntities([...config.getEntities(), createdEntity]);
21+
setEntities([...entities, createdEntity]);
1822
return { entity: createdEntity };
1923
};
2024
};

src/functions/getEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ export default <E extends Entity>(config: Config<E>): GetEntities<E> => {
1919
const paginationFilter = createPaginationFilter(pagination, sort);
2020
const fullFilter = { $and: [filter, paginationFilter] };
2121
const storedEntities = config.getEntities();
22-
const matchedEntities = filterEntities(storedEntities, fullFilter);
23-
const sortedEntities = sortEntities(matchedEntities, sort);
22+
const matchedEntities = filterEntities({ entities: storedEntities, filter: fullFilter });
23+
const sortedEntities = sortEntities({ entities: matchedEntities, sort });
2424
const start = pagination.forward ? 0 : 0 - pagination.limit;
2525
const end = pagination.forward ? pagination.limit : undefined;
2626
const entities = sortedEntities.slice(start, end);

src/functions/getEntity.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ import Entity from '@js-entity-repos/core/dist/types/Entity';
33
import Config from '../Config';
44
import filterEntity from '../utils/filterEntity';
55

6-
export default <E extends Entity>(config: Config<E>): GetEntity<E> => {
6+
export default <E extends Entity>({
7+
entityName,
8+
getEntities,
9+
}: Config<E>): GetEntity<E> => {
710
return async ({ id, filter = {} }) => {
8-
const entity = filterEntity(config, id, filter);
11+
const entities = getEntities();
12+
const entity = filterEntity({ entities, entityName, id, filter });
913
return { entity };
1014
};
1115
};

src/functions/patchEntity.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ import { difference } from 'lodash';
44
import Config from '../Config';
55
import filterEntity from '../utils/filterEntity';
66

7-
export default <E extends Entity>(config: Config<E>): PatchEntity<E> => {
7+
export default <E extends Entity>({
8+
entityName,
9+
getEntities,
10+
setEntities,
11+
}: Config<E>): PatchEntity<E> => {
812
return async ({ id, patch, filter = {} }) => {
9-
const storedEntities = config.getEntities();
10-
const matchedEntity = filterEntity(config, id, filter);
13+
const entities = getEntities();
14+
const matchedEntity = filterEntity({ entities, entityName, id, filter });
1115
const patchedEntity = { ...matchedEntity as any, ...patch as any } as E;
12-
const unmatchedEntities = difference(storedEntities, [matchedEntity]);
13-
config.setEntities([...unmatchedEntities, patchedEntity]);
16+
const unmatchedEntities = difference(entities, [matchedEntity]);
17+
setEntities([...unmatchedEntities, patchedEntity]);
1418
return { entity: patchedEntity };
1519
};
1620
};

src/functions/removeEntities.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import filterEntities from '../utils/filterEntities';
55

66
export default <E extends Entity>(config: Config<E>): RemoveEntities<E> => {
77
return async ({ filter = {} }) => {
8-
const storedEntities = config.getEntities();
9-
const unmatchedEntities = filterEntities(storedEntities, { $nor: [filter] });
8+
const entities = config.getEntities();
9+
const removalFilter = { $nor: [filter] };
10+
const unmatchedEntities = filterEntities({ entities, filter: removalFilter });
1011
config.setEntities(unmatchedEntities);
1112
};
1213
};

src/functions/removeEntity.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ import filterEntities from '../utils/filterEntities';
88

99
export default <E extends Entity>(config: Config<E>): RemoveEntity<E> => {
1010
return async ({ id, filter = {} }) => {
11-
const storedEntities = config.getEntities();
11+
const entities = config.getEntities();
1212
const idFilter = { id } as Filter<E>;
1313
const fullFilter = { $and: [idFilter, filter] };
14-
const unmatchedEntities = filterEntities(storedEntities, { $nor: [fullFilter] });
15-
if (unmatchedEntities.length === storedEntities.length) {
14+
const removalFilter = { $nor: [fullFilter] };
15+
const unmatchedEntities = filterEntities({ entities, filter: removalFilter });
16+
if (unmatchedEntities.length === entities.length) {
1617
throw new MissingEntityError(config.entityName, id);
1718
}
1819
/* istanbul ignore next */
19-
if ((unmatchedEntities.length + 1) !== storedEntities.length) {
20+
if ((unmatchedEntities.length + 1) !== entities.length) {
2021
throw new ConflictingEntityError(config.entityName, id);
2122
}
2223
config.setEntities(unmatchedEntities);

src/functions/replaceEntity.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ import { difference } from 'lodash';
44
import Config from '../Config';
55
import filterEntity from '../utils/filterEntity';
66

7-
export default <E extends Entity>(config: Config<E>): ReplaceEntity<E> => {
7+
export default <E extends Entity>({
8+
entityName,
9+
getEntities,
10+
setEntities,
11+
}: Config<E>): ReplaceEntity<E> => {
812
return async ({ id, entity, filter = {} }) => {
9-
const storedEntities = config.getEntities();
10-
const matchedEntity = filterEntity(config, id, filter);
13+
const entities = getEntities();
14+
const matchedEntity = filterEntity({ entities, entityName, id, filter });
1115
const replacedEntity = { ...entity as any, id } as E;
12-
const unmatchedEntities = difference(storedEntities, [matchedEntity]);
13-
config.setEntities([...unmatchedEntities, replacedEntity]);
16+
const unmatchedEntities = difference(entities, [matchedEntity]);
17+
setEntities([...unmatchedEntities, replacedEntity]);
1418
return { entity: replacedEntity };
1519
};
1620
};

src/utils/filterEntities.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ import Entity from '@js-entity-repos/core/dist/types/Entity';
33
import { ConditionFilter, Filter, PropFilter } from '@js-entity-repos/core/dist/types/Filter';
44
import sift from 'sift';
55

6-
export default <E extends Entity>(entities: E[], filter: Filter<E>) => {
6+
export interface Opts<E extends Entity> {
7+
readonly entities: E[];
8+
readonly filter: Filter<E>;
9+
}
10+
11+
export default <E extends Entity>({ entities, filter }: Opts<E>) => {
712
const sifter = sift(filter as any);
813
return entities.filter(sifter);
914
};

src/utils/filterEntity.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@ import ConflictingEntityError from '@js-entity-repos/core/dist/errors/Conflictin
22
import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityError';
33
import Entity from '@js-entity-repos/core/dist/types/Entity';
44
import Filter from '@js-entity-repos/core/dist/types/Filter';
5-
import Config from '../Config';
65
import filterEntities from './filterEntities';
76

8-
export default <E extends Entity>(config: Config<E>, id: string, filter: Filter<E>) => {
9-
const storedEntities = config.getEntities();
7+
export interface Opts<E extends Entity> {
8+
readonly entities: E[];
9+
readonly entityName: string;
10+
readonly id: string;
11+
readonly filter: Filter<E>;
12+
}
13+
14+
export default <E extends Entity>({ entities, entityName, id, filter }: Opts<E>) => {
1015
const idFilter = { id } as Filter<E>;
1116
const fullFilter = { $and: [idFilter, filter] };
12-
const matchedEntities = filterEntities(storedEntities, fullFilter);
17+
const matchedEntities = filterEntities({ entities, filter: fullFilter });
1318
if (matchedEntities.length === 0) {
14-
throw new MissingEntityError(config.entityName, id);
19+
throw new MissingEntityError(entityName, id);
1520
}
1621
/* istanbul ignore next */
1722
if (matchedEntities.length > 1) {
18-
throw new ConflictingEntityError(config.entityName, id);
23+
throw new ConflictingEntityError(entityName, id);
1924
}
2025
return matchedEntities[0];
2126
};

src/utils/sortEntities.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import Entity from '@js-entity-repos/core/dist/types/Entity';
22
import Sort from '@js-entity-repos/core/dist/types/Sort';
33
import { orderBy } from 'lodash';
44

5-
export default <E extends Entity>(entities: E[], sort: Sort<E>) => {
5+
export interface Opts<E extends Entity> {
6+
readonly entities: E[];
7+
readonly sort: Sort<E>;
8+
}
9+
10+
export default <E extends Entity>({ entities, sort }: Opts<E>) => {
611
const sortKeys = Object.keys(sort);
712
const sortDirections = sortKeys.map((sortKey) => {
813
const sortAscending = (sort as any)[sortKey] as boolean;

0 commit comments

Comments
 (0)