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

Commit c177941

Browse files
committed
refactor: Creates filterEntity util to fix CI.
1 parent 0013571 commit c177941

File tree

4 files changed

+37
-58
lines changed

4 files changed

+37
-58
lines changed

src/functions/getEntity.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,11 @@
1-
import ConflictingEntityError from '@js-entity-repos/core/dist/errors/ConflictingEntityError';
2-
import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityError';
31
import GetEntity from '@js-entity-repos/core/dist/signatures/GetEntity';
42
import Entity from '@js-entity-repos/core/dist/types/Entity';
5-
import Filter from '@js-entity-repos/core/dist/types/Filter';
63
import Config from '../Config';
7-
import filterEntities from '../utils/filterEntities';
4+
import filterEntity from '../utils/filterEntity';
85

96
export default <E extends Entity>(config: Config<E>): GetEntity<E> => {
107
return async ({ id, filter = {} }) => {
11-
const storedEntities = config.getEntities();
12-
const idFilter = { id } as Filter<E>;
13-
const fullFilter = { $and: [idFilter, filter] };
14-
const matchedEntities = filterEntities(storedEntities, fullFilter);
15-
if (matchedEntities.length === 0) {
16-
throw new MissingEntityError(config.entityName, id);
17-
}
18-
/* istanbul ignore next */
19-
if (matchedEntities.length > 1) {
20-
throw new ConflictingEntityError(config.entityName, id);
21-
}
22-
const entity = matchedEntities[0];
8+
const entity = filterEntity(config, id, filter);
239
return { entity };
2410
};
2511
};

src/functions/patchEntity.ts

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
1-
import ConflictingEntityError from '@js-entity-repos/core/dist/errors/ConflictingEntityError';
2-
import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityError';
31
import PatchEntity from '@js-entity-repos/core/dist/signatures/PatchEntity';
42
import Entity from '@js-entity-repos/core/dist/types/Entity';
5-
import Filter from '@js-entity-repos/core/dist/types/Filter';
3+
import { difference } from 'lodash';
64
import Config from '../Config';
7-
import filterEntities from '../utils/filterEntities';
5+
import filterEntity from '../utils/filterEntity';
86

97
export default <E extends Entity>(config: Config<E>): PatchEntity<E> => {
108
return async ({ id, patch, filter = {} }) => {
119
const storedEntities = config.getEntities();
12-
const idFilter = { id } as Filter<E>;
13-
const fullFilter = { $and: [idFilter, filter] };
14-
const matchedEntities = filterEntities(storedEntities, fullFilter);
15-
if (matchedEntities.length === 0) {
16-
throw new MissingEntityError(config.entityName, id);
17-
}
18-
/* istanbul ignore next */
19-
if (matchedEntities.length > 1) {
20-
throw new ConflictingEntityError(config.entityName, id);
21-
}
22-
23-
const patchEntities = matchedEntities.map((matchedEntity: E) => {
24-
return { ...matchedEntity as any, ...patch as any } as E;
25-
});
26-
const unmatchedEntities = filterEntities(storedEntities, { $nor: [idFilter] });
27-
config.setEntities([...unmatchedEntities, ...patchEntities]);
28-
return { entity: patchEntities[0] };
10+
const matchedEntity = filterEntity(config, id, filter);
11+
const patchedEntity = { ...matchedEntity as any, ...patch as any } as E;
12+
const unmatchedEntities = difference(storedEntities, [matchedEntity]);
13+
config.setEntities([...unmatchedEntities, patchedEntity]);
14+
return { entity: patchedEntity };
2915
};
3016
};

src/functions/replaceEntity.ts

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
1-
import ConflictingEntityError from '@js-entity-repos/core/dist/errors/ConflictingEntityError';
2-
import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityError';
31
import ReplaceEntity from '@js-entity-repos/core/dist/signatures/ReplaceEntity';
42
import Entity from '@js-entity-repos/core/dist/types/Entity';
5-
import Filter from '@js-entity-repos/core/dist/types/Filter';
3+
import { difference } from 'lodash';
64
import Config from '../Config';
7-
import filterEntities from '../utils/filterEntities';
5+
import filterEntity from '../utils/filterEntity';
86

97
export default <E extends Entity>(config: Config<E>): ReplaceEntity<E> => {
108
return async ({ id, entity, filter = {} }) => {
119
const storedEntities = config.getEntities();
12-
const idFilter = { id } as Filter<E>;
13-
const fullFilter = { $and: [idFilter, filter] };
14-
const matchedEntities = filterEntities(storedEntities, fullFilter);
15-
if (matchedEntities.length === 0) {
16-
throw new MissingEntityError(config.entityName, id);
17-
}
18-
/* istanbul ignore next */
19-
if (matchedEntities.length > 1) {
20-
throw new ConflictingEntityError(config.entityName, id);
21-
}
22-
23-
const replacedEntities = matchedEntities.map(() => {
24-
return { ...entity as any, id } as E;
25-
});
26-
const unmatchedEntities = filterEntities(storedEntities, { $nor: [fullFilter] });
27-
config.setEntities([...unmatchedEntities, ...replacedEntities]);
28-
return { entity: replacedEntities[0] };
10+
const matchedEntity = filterEntity(config, id, filter);
11+
const replacedEntity = { ...entity as any, id } as E;
12+
const unmatchedEntities = difference(storedEntities, [matchedEntity]);
13+
config.setEntities([...unmatchedEntities, replacedEntity]);
14+
return { entity: replacedEntity };
2915
};
3016
};

src/utils/filterEntity.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ConflictingEntityError from '@js-entity-repos/core/dist/errors/ConflictingEntityError';
2+
import MissingEntityError from '@js-entity-repos/core/dist/errors/MissingEntityError';
3+
import Entity from '@js-entity-repos/core/dist/types/Entity';
4+
import Filter from '@js-entity-repos/core/dist/types/Filter';
5+
import Config from '../Config';
6+
import filterEntities from './filterEntities';
7+
8+
export default <E extends Entity>(config: Config<E>, id: string, filter: Filter<E>) => {
9+
const storedEntities = config.getEntities();
10+
const idFilter = { id } as Filter<E>;
11+
const fullFilter = { $and: [idFilter, filter] };
12+
const matchedEntities = filterEntities(storedEntities, fullFilter);
13+
if (matchedEntities.length === 0) {
14+
throw new MissingEntityError(config.entityName, id);
15+
}
16+
/* istanbul ignore next */
17+
if (matchedEntities.length > 1) {
18+
throw new ConflictingEntityError(config.entityName, id);
19+
}
20+
return matchedEntities[0];
21+
};

0 commit comments

Comments
 (0)