Skip to content

Instantly share code, notes, and snippets.

@tarasowski
Created October 16, 2018 06:11
Show Gist options
  • Save tarasowski/b98309d00622afacb8581a260cf16b90 to your computer and use it in GitHub Desktop.
Save tarasowski/b98309d00622afacb8581a260cf16b90 to your computer and use it in GitHub Desktop.
Example for refactoring
const alphabetArray = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')
const generateLetterSequence = (start, end, alphabet) => {
const positionStart = alphabet.indexOf(start)
const positionEnd = alphabet.indexOf(end) + 1
return alphabet.slice(positionStart, positionEnd)
}
const generateNumberSequence = (start, end) => {
const numberArray = []
for (let i = start; i < end + 1; ++i) {
numberArray.push(i)
}
return numberArray
}
const generateSequenceOfLettersAndNumbers = (positions, numbers) => {
return positions.map(letter => {
const newArray = []
numbers.forEach(number => {
newArray.push(`${letter}-${number}`)
})
return newArray
})
}
const flat = (arr) => {
const newArray = []
arr.forEach(element => {
element.forEach(el => {
newArray.push(el)
})
})
return newArray
}
const joinWarehouseAndShelfs = (warehouse, shelfs) => {
return warehouse.map(element => {
const newArray = []
shelfs.forEach(el => {
newArray.push(`${element}-${el}`)
})
return newArray
})
}
const addSortNumberToArray = (positions, sortNumber, sortNumberIncrement) => {
const arrayWithSortNumber = positions.map((element, index, array) => {
return { [element]: sortNumber + (index * sortNumberIncrement) }
})
return arrayWithSortNumber
}
module.exports = async (id, params, putItem) => {
const { locationId, sortNumber, sortNumberIncrement, warehouseStart, warehouseEnd, shelfNumberStart, shelfNumberEnd, shelfRowStart, shelfRowEnd, shelfPartStart, shelfPartEnd } = params
const warehousePosition = generateLetterSequence(warehouseStart, warehouseEnd, alphabetArray)
const shelfRows = generateLetterSequence(shelfRowStart, shelfRowEnd, alphabetArray)
const shelfNumbers = generateNumberSequence(shelfNumberStart, shelfNumberEnd)
const shelfParts = generateNumberSequence(shelfPartStart, shelfPartEnd)
const warehouseAndShelfs = generateSequenceOfLettersAndNumbers(warehousePosition, shelfNumbers)
const shelfRowsAndParts = generateSequenceOfLettersAndNumbers(shelfRows, shelfParts)
const warehouseAndShelfsFlat = flat(warehouseAndShelfs)
const shelfRowsAndPartsFlat = flat(shelfRowsAndParts)
const warehouseAndShelfPositions = joinWarehouseAndShelfs(warehouseAndShelfsFlat, shelfRowsAndPartsFlat)
const warehouseAndShelfPositionsFlat = flat(warehouseAndShelfPositions)
const warehousePlan = addSortNumberToArray(warehouseAndShelfPositionsFlat, sortNumber, sortNumberIncrement)
const response = await putItem(id, locationId, warehousePlan)
return {
id,
locationId,
storageBins: warehousePlan
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment