From 99177b74a034eada2029445247758d84316f9908 Mon Sep 17 00:00:00 2001 From: Gayun00 Date: Sat, 23 Sep 2023 23:11:10 +0900 Subject: [PATCH 1/5] Refactor: use items constants --- TypeScript/.gitignore | 1 - TypeScript/app/constants.ts | 5 ++++ TypeScript/app/gilded-rose.ts | 34 +++++++++++++--------- TypeScript/test/golden-master-text-test.ts | 15 +++++----- TypeScript/test/jest/gilded-rose.spec.ts | 2 -- 5 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 TypeScript/app/constants.ts diff --git a/TypeScript/.gitignore b/TypeScript/.gitignore index 7872ff9b..778a45b5 100644 --- a/TypeScript/.gitignore +++ b/TypeScript/.gitignore @@ -9,4 +9,3 @@ test/**/*.js.map coverage .nyc_output .yarn -.DS_Store \ No newline at end of file diff --git a/TypeScript/app/constants.ts b/TypeScript/app/constants.ts new file mode 100644 index 00000000..7cde7b89 --- /dev/null +++ b/TypeScript/app/constants.ts @@ -0,0 +1,5 @@ +export const ITEMS = { + BRIE: "Aged Brie", + SURFRAS: "Sulfuras, Hand of Ragnaros", + PASSES: "Backstage passes to a TAFKAL80ETC concert", +}; diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index db58d678..76602293 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -1,3 +1,5 @@ +import { ITEMS } from "./constants"; + export class Item { name: string; sellIn: number; @@ -19,46 +21,50 @@ export class GildedRose { updateQuality() { for (let i = 0; i < this.items.length; i++) { - if (this.items[i].name != 'Aged Brie' && this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { + if ( + this.items[i].name != ITEMS.BRIE && + this.items[i].name != ITEMS.PASSES + ) { if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 + if (this.items[i].name != ITEMS.SURFRAS) { + this.items[i].quality = this.items[i].quality - 1; } } } else { if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 - if (this.items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { + this.items[i].quality = this.items[i].quality + 1; + if (this.items[i].name == ITEMS.PASSES) { if (this.items[i].sellIn < 11) { if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 + this.items[i].quality = this.items[i].quality + 1; } } if (this.items[i].sellIn < 6) { if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 + this.items[i].quality = this.items[i].quality + 1; } } } } } - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { + if (this.items[i].name != ITEMS.SURFRAS) { this.items[i].sellIn = this.items[i].sellIn - 1; } if (this.items[i].sellIn < 0) { - if (this.items[i].name != 'Aged Brie') { - if (this.items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { + if (this.items[i].name != ITEMS.BRIE) { + if (this.items[i].name != ITEMS.PASSES) { if (this.items[i].quality > 0) { - if (this.items[i].name != 'Sulfuras, Hand of Ragnaros') { - this.items[i].quality = this.items[i].quality - 1 + if (this.items[i].name != ITEMS.SURFRAS) { + this.items[i].quality = this.items[i].quality - 1; } } } else { - this.items[i].quality = this.items[i].quality - this.items[i].quality + this.items[i].quality = + this.items[i].quality - this.items[i].quality; } } else { if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1 + this.items[i].quality = this.items[i].quality + 1; } } } diff --git a/TypeScript/test/golden-master-text-test.ts b/TypeScript/test/golden-master-text-test.ts index 2259b975..6fa5537a 100644 --- a/TypeScript/test/golden-master-text-test.ts +++ b/TypeScript/test/golden-master-text-test.ts @@ -1,4 +1,4 @@ -import { Item, GildedRose } from '../app/gilded-rose'; +import { Item, GildedRose } from "../app/gilded-rose"; const items = [ new Item("+5 Dexterity Vest", 10, 20), // @@ -10,22 +10,21 @@ const items = [ new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49), new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49), // this conjured item does not work properly yet - new Item("Conjured Mana Cake", 3, 6)]; - + // new Item("Conjured Mana Cake", 3, 6) +]; const gildedRose = new GildedRose(items); let days: number = 2; if (process.argv.length > 2) { - days = +process.argv[2]; - } + days = +process.argv[2]; +} for (let i = 0; i < days; i++) { console.log("-------- day " + i + " --------"); console.log("name, sellIn, quality"); - items.forEach(element => { - console.log(element.name + ' ' + element.sellIn + ' ' + element.quality); - + items.forEach((element) => { + console.log(element.name + " " + element.sellIn + " " + element.quality); }); console.log(); gildedRose.updateQuality(); diff --git a/TypeScript/test/jest/gilded-rose.spec.ts b/TypeScript/test/jest/gilded-rose.spec.ts index 48da86d3..e89a60f6 100644 --- a/TypeScript/test/jest/gilded-rose.spec.ts +++ b/TypeScript/test/jest/gilded-rose.spec.ts @@ -77,6 +77,4 @@ describe("Backstage passes 테스트", () => { expect(items[0].sellIn).toBe(4); expect(items[0].quality).toBe(6); }); - - // TODO: 콘서트 종료 후 quality 0으로 변경 테스트 }); From 16d0d0c5a060334e82e6994e5c371e43c26eca86 Mon Sep 17 00:00:00 2001 From: Gayun00 Date: Sat, 23 Sep 2023 23:12:52 +0900 Subject: [PATCH 2/5] Refactor: replace this.items[i] to item --- TypeScript/app/gilded-rose.ts | 54 ++++++++++++++++------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 76602293..6845fbfa 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -20,51 +20,47 @@ export class GildedRose { } updateQuality() { - for (let i = 0; i < this.items.length; i++) { - if ( - this.items[i].name != ITEMS.BRIE && - this.items[i].name != ITEMS.PASSES - ) { - if (this.items[i].quality > 0) { - if (this.items[i].name != ITEMS.SURFRAS) { - this.items[i].quality = this.items[i].quality - 1; + for (const item of this.items) { + if (item.name != ITEMS.BRIE && item.name != ITEMS.PASSES) { + if (item.quality > 0) { + if (item.name != ITEMS.SURFRAS) { + item.quality = item.quality - 1; } } } else { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1; - if (this.items[i].name == ITEMS.PASSES) { - if (this.items[i].sellIn < 11) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1; + if (item.quality < 50) { + item.quality = item.quality + 1; + if (item.name == ITEMS.PASSES) { + if (item.sellIn < 11) { + if (item.quality < 50) { + item.quality = item.quality + 1; } } - if (this.items[i].sellIn < 6) { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1; + if (item.sellIn < 6) { + if (item.quality < 50) { + item.quality = item.quality + 1; } } } } } - if (this.items[i].name != ITEMS.SURFRAS) { - this.items[i].sellIn = this.items[i].sellIn - 1; + if (item.name != ITEMS.SURFRAS) { + item.sellIn = item.sellIn - 1; } - if (this.items[i].sellIn < 0) { - if (this.items[i].name != ITEMS.BRIE) { - if (this.items[i].name != ITEMS.PASSES) { - if (this.items[i].quality > 0) { - if (this.items[i].name != ITEMS.SURFRAS) { - this.items[i].quality = this.items[i].quality - 1; + if (item.sellIn < 0) { + if (item.name != ITEMS.BRIE) { + if (item.name != ITEMS.PASSES) { + if (item.quality > 0) { + if (item.name != ITEMS.SURFRAS) { + item.quality = item.quality - 1; } } } else { - this.items[i].quality = - this.items[i].quality - this.items[i].quality; + item.quality = item.quality - item.quality; } } else { - if (this.items[i].quality < 50) { - this.items[i].quality = this.items[i].quality + 1; + if (item.quality < 50) { + item.quality = item.quality + 1; } } } From 2bacc188d5b379d593ce55a0ed3553332a1d8c70 Mon Sep 17 00:00:00 2001 From: Gayun00 Date: Mon, 25 Sep 2023 17:25:39 +0900 Subject: [PATCH 3/5] Refactor: sepereate handleQualitySellInIs0 - use switch case --- TypeScript/app/gilded-rose.ts | 56 ++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 6845fbfa..64dfe8e4 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -19,51 +19,53 @@ export class GildedRose { this.items = items; } + handleIfSellInIs0(item) { + if (item.sellIn >= 0) return; + + switch (item.name) { + case ITEMS.BRIE: + if (item.quality >= 50) return; + item.quality = item.quality + 1; + break; + case ITEMS.SURFRAS: + item.quality = item.quality - item.quality; + break; + default: + if (!item.quality) return; + item.quality -= 1; + break; + } + } + updateQuality() { for (const item of this.items) { if (item.name != ITEMS.BRIE && item.name != ITEMS.PASSES) { - if (item.quality > 0) { - if (item.name != ITEMS.SURFRAS) { - item.quality = item.quality - 1; - } + if (!item.quality) break; + if (item.name != ITEMS.SURFRAS) { + item.quality -= 1; } } else { if (item.quality < 50) { - item.quality = item.quality + 1; + item.quality += 1; + if (item.name == ITEMS.PASSES) { if (item.sellIn < 11) { if (item.quality < 50) { - item.quality = item.quality + 1; + item.quality += 1; } } + if (item.sellIn < 6) { - if (item.quality < 50) { - item.quality = item.quality + 1; - } + if (item.quality >= 50) break; + item.quality += 1; } } } } if (item.name != ITEMS.SURFRAS) { - item.sellIn = item.sellIn - 1; - } - if (item.sellIn < 0) { - if (item.name != ITEMS.BRIE) { - if (item.name != ITEMS.PASSES) { - if (item.quality > 0) { - if (item.name != ITEMS.SURFRAS) { - item.quality = item.quality - 1; - } - } - } else { - item.quality = item.quality - item.quality; - } - } else { - if (item.quality < 50) { - item.quality = item.quality + 1; - } - } + item.sellIn -= 1; } + this.handleIfSellInIs0(item); } return this.items; From 87131ef92662af8e0e063eab2649d6a0584d7b6a Mon Sep 17 00:00:00 2001 From: Gayun00 Date: Mon, 25 Sep 2023 17:44:53 +0900 Subject: [PATCH 4/5] Refactor: remove duplicated conditional statement - seperate handlePassesQuality --- TypeScript/app/gilded-rose.ts | 51 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 64dfe8e4..8bbc3a96 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -10,6 +10,11 @@ export class Item { this.sellIn = sellIn; this.quality = quality; } + + // handleSellIn() { + // if (this.name === ITEMS.SURFRAS) return; + // this.sellIn--; + // } } export class GildedRose { @@ -19,6 +24,18 @@ export class GildedRose { this.items = items; } + handlePassesQuality(item) { + if (item.name == ITEMS.PASSES) { + if (6 <= item.sellIn && item.sellIn < 11) { + item.quality += 1; + } + + if (item.sellIn < 6) { + item.quality += 2; + } + } + } + handleIfSellInIs0(item) { if (item.sellIn >= 0) return; @@ -39,33 +56,21 @@ export class GildedRose { updateQuality() { for (const item of this.items) { - if (item.name != ITEMS.BRIE && item.name != ITEMS.PASSES) { - if (!item.quality) break; - if (item.name != ITEMS.SURFRAS) { - item.quality -= 1; - } - } else { - if (item.quality < 50) { - item.quality += 1; - - if (item.name == ITEMS.PASSES) { - if (item.sellIn < 11) { - if (item.quality < 50) { - item.quality += 1; - } - } - - if (item.sellIn < 6) { - if (item.quality >= 50) break; - item.quality += 1; - } - } - } - } + if (!item.quality) break; if (item.name != ITEMS.SURFRAS) { item.sellIn -= 1; } this.handleIfSellInIs0(item); + + if (item.name != ITEMS.BRIE && item.name != ITEMS.PASSES) { + if (item.name === ITEMS.SURFRAS) break; + item.quality -= 1; + } + + if (item.quality >= 50) break; + item.quality += 1; + + this.handlePassesQuality(item); } return this.items; From 022eded43037e6a54e4ba89f4469b4bf3b18a36e Mon Sep 17 00:00:00 2001 From: Gayun00 Date: Mon, 25 Sep 2023 18:37:10 +0900 Subject: [PATCH 5/5] Refactor: remove unnecessary conditional depth --- TypeScript/app/gilded-rose.ts | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/TypeScript/app/gilded-rose.ts b/TypeScript/app/gilded-rose.ts index 8bbc3a96..15d316bf 100644 --- a/TypeScript/app/gilded-rose.ts +++ b/TypeScript/app/gilded-rose.ts @@ -10,11 +10,6 @@ export class Item { this.sellIn = sellIn; this.quality = quality; } - - // handleSellIn() { - // if (this.name === ITEMS.SURFRAS) return; - // this.sellIn--; - // } } export class GildedRose { @@ -25,14 +20,13 @@ export class GildedRose { } handlePassesQuality(item) { - if (item.name == ITEMS.PASSES) { - if (6 <= item.sellIn && item.sellIn < 11) { - item.quality += 1; - } + if (item.name !== ITEMS.PASSES) return; + if (6 <= item.sellIn && item.sellIn < 11) { + item.quality += 1; + } - if (item.sellIn < 6) { - item.quality += 2; - } + if (item.sellIn < 6) { + item.quality += 2; } } @@ -45,7 +39,7 @@ export class GildedRose { item.quality = item.quality + 1; break; case ITEMS.SURFRAS: - item.quality = item.quality - item.quality; + item.quality = 0; break; default: if (!item.quality) return;