@janiscommerce/model
Advanced tools
Comparing version 5.2.0 to 5.3.0
@@ -10,2 +10,6 @@ # Changelog | ||
## [5.3.0] - 2020-12-01 | ||
### Added | ||
- `mapIdBy` new method | ||
## [5.2.0] - 2020-11-27 | ||
@@ -12,0 +16,0 @@ ### Added |
@@ -258,19 +258,26 @@ 'use strict'; | ||
async mapIdByReferenceId(referenceIds, params = {}) { | ||
mapIdByReferenceId(referenceIds, params = {}) { | ||
return this.mapIdBy('referenceId', referenceIds, params); | ||
} | ||
if(!Array.isArray(referenceIds)) | ||
throw new ModelError('References Ids must be an Array', ModelError.codes.INVALID_VALUE); | ||
async mapIdBy(field, fieldValues, params = {}) { | ||
if(!referenceIds.length) | ||
if(!Array.isArray(fieldValues)) | ||
throw new ModelError(`${field} items must be an Array`, ModelError.codes.INVALID_VALUE); | ||
if(!fieldValues.length) | ||
return {}; | ||
const newParams = { ...params, limit: referenceIds.length }; // to avoid default DBDriver limit | ||
const newParams = { ...params, limit: fieldValues.length }; // to avoid default DBDriver limit | ||
const items = await this.getBy('referenceId', referenceIds, newParams); | ||
const items = await this.getBy(field, fieldValues, newParams); | ||
return items | ||
.filter(item => referenceIds.includes(item.referenceId)) | ||
.reduce((acum, { referenceId, id }) => { | ||
return { ...acum, [referenceId]: id.toString() }; | ||
}, {}); | ||
const newItems = {}; | ||
items.forEach(item => { | ||
if(fieldValues.includes(item[field])) | ||
newItems[item[field]] = item.id.toString(); | ||
}); | ||
return newItems; | ||
} | ||
@@ -475,11 +482,7 @@ | ||
static changeKeys(items, newKey) { | ||
const newItems = {}; | ||
items.forEach(item => { | ||
if(newKey in item && item[newKey] !== null) | ||
return items.reduce((newItems, item) => { | ||
if(item[newKey]) | ||
newItems[item[newKey]] = item; | ||
}); | ||
return newItems; | ||
return newItems; | ||
}, {}); | ||
} | ||
@@ -486,0 +489,0 @@ } |
{ | ||
"name": "@janiscommerce/model", | ||
"version": "5.2.0", | ||
"version": "5.3.0", | ||
"description": "A package for managing Janis Models", | ||
@@ -5,0 +5,0 @@ "main": "lib/model.js", |
@@ -272,2 +272,26 @@ # model | ||
### async `mapIdBy(field, fieldValues, [params])` | ||
<details> | ||
<summary>Search all items filtering by field and fieldValues and return an Object with key: <tt>referenceIds</tt> and values: <tt>id</tt>, only those founds.</summary> | ||
#### Parameters | ||
- `field` Field to filter for (`String`) | ||
- `fieldValues` List of values to filter for (`Array<strings>`) | ||
- `params` See get() method | ||
#### Example | ||
```js | ||
await myModel.mapIdBy('code', ['code-123', 'code-456'], { | ||
order: { code: 'desc' } | ||
}); | ||
/** | ||
{ | ||
code-456: 'the-code-456-id', | ||
code-123: 'the-code-123-id' | ||
} | ||
*/ | ||
``` | ||
</details> | ||
### async `mapIdByReferenceId(referencesIds, [params])` | ||
@@ -274,0 +298,0 @@ <details> |
36949
528
693