Refactor: seperate to handleSellIn, handleQuality

This commit is contained in:
Gayun00 2023-09-25 21:53:58 +09:00
parent c36fb2b4ee
commit 60aafd40e1
2 changed files with 31 additions and 37 deletions

View File

@ -1,16 +1,5 @@
import { ITEMS } from "./constants"; import { ITEMS } from "./constants";
import { Item } from "./itemClasses";
export class Item {
name: string;
sellIn: number;
quality: number;
constructor(name, sellIn, quality) {
this.name = name;
this.sellIn = sellIn;
this.quality = quality;
}
}
export class GildedRose { export class GildedRose {
items: Array<Item>; items: Array<Item>;
@ -19,6 +8,26 @@ export class GildedRose {
this.items = items; this.items = items;
} }
handleSellIn(item) {
if (item.name != ITEMS.SURFRAS) {
item.sellIn -= 1;
}
if (item.sellIn >= 0) return;
if (item.quality >= 50) return;
switch (item.name) {
case ITEMS.BRIE:
item.quality = item.quality + 1;
break;
case ITEMS.SURFRAS:
item.quality = 0;
break;
default:
item.quality -= 1;
break;
}
}
handlePassesQuality(item) { handlePassesQuality(item) {
if (item.name !== ITEMS.PASSES) return; if (item.name !== ITEMS.PASSES) return;
if (6 <= item.sellIn && item.sellIn < 11) { if (6 <= item.sellIn && item.sellIn < 11) {
@ -30,41 +39,25 @@ export class GildedRose {
} }
} }
handleIfSellInIs0(item) { handleQuality(item) {
if (item.sellIn >= 0) return;
switch (item.name) { switch (item.name) {
case ITEMS.BRIE: case ITEMS.PASSES:
if (item.quality >= 50) return; this.handlePassesQuality(item);
item.quality = item.quality + 1;
break; break;
case ITEMS.SURFRAS: case ITEMS.SURFRAS:
item.quality = 0;
break;
default:
if (!item.quality) return;
item.quality -= 1; item.quality -= 1;
break; break;
} }
if (item.quality >= 50) return;
item.quality += 1;
} }
updateQuality() { updateQuality() {
for (const item of this.items) { for (const item of this.items) {
if (!item.quality) break; if (!item.quality) break;
if (item.name != ITEMS.SURFRAS) { this.handleSellIn(item);
item.sellIn -= 1; this.handleQuality(item);
}
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; return this.items;

View File

@ -1,4 +1,5 @@
import { Item, GildedRose } from "@/gilded-rose"; import { GildedRose } from "@/gilded-rose";
import { Item } from "@/itemClasses";
describe("Aged Brie 테스트", () => { describe("Aged Brie 테스트", () => {
let gildedRose = new GildedRose([new Item("Aged Brie", 1, 0)]); let gildedRose = new GildedRose([new Item("Aged Brie", 1, 0)]);