GildedRose-Refactoring-Kata/rescript/src/GildedRose.res
2023-09-07 09:30:10 +09:30

72 lines
2.1 KiB
Plaintext

module Item = {
type t = {
name: string,
sellIn: int,
quality: int,
}
let make = (~name, ~sellIn, ~quality): t => {
name,
sellIn,
quality,
}
}
let updateQuality = (items: array<Item.t>) => {
items->Js.Array2.map(item => {
let newItem = ref(item)
if (
newItem.contents.name != "Aged Brie" &&
newItem.contents.name != "Backstage passes to a TAFKAL80ETC concert"
) {
if newItem.contents.quality > 0 {
if newItem.contents.name != "Sulfuras, Hand of Ragnaros" {
newItem := {...newItem.contents, quality: newItem.contents.quality - 1}
}
}
} else if newItem.contents.quality < 50 {
newItem := {...newItem.contents, quality: newItem.contents.quality + 1}
if newItem.contents.name == "Backstage passes to a TAFKAL80ETC concert" {
if newItem.contents.sellIn < 11 {
if newItem.contents.quality < 50 {
newItem := {...newItem.contents, quality: newItem.contents.quality + 1}
}
}
if newItem.contents.sellIn < 6 {
if newItem.contents.quality < 50 {
newItem := {...newItem.contents, quality: newItem.contents.quality + 1}
}
}
}
}
if newItem.contents.name != "Sulfuras, Hand of Ragnaros" {
newItem := {...newItem.contents, sellIn: newItem.contents.sellIn - 1}
}
if newItem.contents.sellIn < 0 {
if newItem.contents.name != "Aged Brie" {
if newItem.contents.name != "Backstage passes to a TAFKAL80ETC concert" {
if newItem.contents.quality > 0 {
if newItem.contents.name != "Sulfuras, Hand of Ragnaros" {
newItem := {...newItem.contents, quality: newItem.contents.quality - 1}
}
}
} else {
newItem := {
...newItem.contents,
quality: newItem.contents.quality - newItem.contents.quality,
}
}
} else if newItem.contents.quality < 50 {
newItem := {...newItem.contents, quality: newItem.contents.quality + 1}
}
}
newItem.contents
})
}