mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 14:31:28 +00:00
Updated services, split into strategy pattern for each kind of update
This commit is contained in:
parent
79f0e0d3d6
commit
1000c5e1e5
@ -3,7 +3,6 @@ package controllers
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
//"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
71
go/services/aged_brie_item_update_service.go
Normal file
71
go/services/aged_brie_item_update_service.go
Normal file
@ -0,0 +1,71 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/lib"
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/models"
|
||||
)
|
||||
|
||||
type AgedBrieItemUpdateService struct {
|
||||
logger lib.Logger
|
||||
}
|
||||
|
||||
func NewAgedBrieItemUpdateService(logger lib.Logger) AgedBrieItemUpdateService {
|
||||
return AgedBrieItemUpdateService{
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (this AgedBrieItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||
item.Mutex.Lock()
|
||||
defer item.Mutex.Unlock()
|
||||
|
||||
itemModel := item.Model
|
||||
|
||||
if itemModel.Name != "Aged Brie" && itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
if itemModel.Name == "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.SellIn < 11 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
if itemModel.SellIn < 6 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.SellIn = itemModel.SellIn - 1
|
||||
}
|
||||
|
||||
if itemModel.SellIn < 0 {
|
||||
if itemModel.Name != "Aged Brie" {
|
||||
if itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
itemModel.Quality = itemModel.Quality - itemModel.Quality
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
71
go/services/backstage_pass_item_update_service.go
Normal file
71
go/services/backstage_pass_item_update_service.go
Normal file
@ -0,0 +1,71 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/lib"
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/models"
|
||||
)
|
||||
|
||||
type BackstagePassItemUpdateService struct {
|
||||
logger lib.Logger
|
||||
}
|
||||
|
||||
func NewBackstagePassItemUpdateService(logger lib.Logger) BackstagePassItemUpdateService {
|
||||
return BackstagePassItemUpdateService{
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (this BackstagePassItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||
item.Mutex.Lock()
|
||||
defer item.Mutex.Unlock()
|
||||
|
||||
itemModel := item.Model
|
||||
|
||||
if itemModel.Name != "Aged Brie" && itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
if itemModel.Name == "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.SellIn < 11 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
if itemModel.SellIn < 6 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.SellIn = itemModel.SellIn - 1
|
||||
}
|
||||
|
||||
if itemModel.SellIn < 0 {
|
||||
if itemModel.Name != "Aged Brie" {
|
||||
if itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
itemModel.Quality = itemModel.Quality - itemModel.Quality
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -8,20 +8,38 @@ import (
|
||||
|
||||
type ItemUpdateServiceProvider struct {
|
||||
logger lib.Logger
|
||||
itemUpdateService ItemUpdateService
|
||||
normalItemUpdateService NormalItemUpdateService
|
||||
agedBrieItemUpdateService AgedBrieItemUpdateService
|
||||
backstagePassItemUpdateService BackstagePassItemUpdateService
|
||||
sulfurasItemUpdateService SulfurasItemUpdateService
|
||||
}
|
||||
|
||||
func NewItemUpdateServiceProvider(
|
||||
logger lib.Logger,
|
||||
itemUpdateService ItemUpdateService,
|
||||
normalItemUpdateService NormalItemUpdateService,
|
||||
agedBrieItemUpdateService AgedBrieItemUpdateService,
|
||||
backstagePassItemUpdateService BackstagePassItemUpdateService,
|
||||
sulfurasItemUpdateService SulfurasItemUpdateService,
|
||||
) domains.ItemUpdateServiceProvider {
|
||||
|
||||
return ItemUpdateServiceProvider{
|
||||
logger: logger,
|
||||
itemUpdateService: itemUpdateService,
|
||||
normalItemUpdateService: normalItemUpdateService,
|
||||
agedBrieItemUpdateService: agedBrieItemUpdateService,
|
||||
backstagePassItemUpdateService: backstagePassItemUpdateService,
|
||||
sulfurasItemUpdateService: sulfurasItemUpdateService,
|
||||
}
|
||||
}
|
||||
|
||||
func (this ItemUpdateServiceProvider) GetUpdateService(item *models.Item) domains.ItemUpdateService {
|
||||
return this.itemUpdateService
|
||||
switch item.Model.Name {
|
||||
case "Aged Brie":
|
||||
return this.agedBrieItemUpdateService
|
||||
case "Backstage passes to a TAFKAL80ETC concert":
|
||||
return this.backstagePassItemUpdateService
|
||||
case "Sulfuras, Hand of Ragnaros":
|
||||
return this.sulfurasItemUpdateService
|
||||
default:
|
||||
return this.normalItemUpdateService
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,17 +5,17 @@ import (
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/models"
|
||||
)
|
||||
|
||||
type ItemUpdateService struct {
|
||||
type NormalItemUpdateService struct {
|
||||
logger lib.Logger
|
||||
}
|
||||
|
||||
func NewItemUpdateService(logger lib.Logger) ItemUpdateService {
|
||||
return ItemUpdateService{
|
||||
func NewNormalItemUpdateService(logger lib.Logger) NormalItemUpdateService {
|
||||
return NormalItemUpdateService{
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (this ItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||
func (this NormalItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||
item.Mutex.Lock()
|
||||
defer item.Mutex.Unlock()
|
||||
|
||||
@ -3,6 +3,9 @@ package services
|
||||
import "go.uber.org/fx"
|
||||
|
||||
var Module = fx.Options(
|
||||
fx.Provide(NewItemUpdateService),
|
||||
fx.Provide(NewNormalItemUpdateService),
|
||||
fx.Provide(NewAgedBrieItemUpdateService),
|
||||
fx.Provide(NewBackstagePassItemUpdateService),
|
||||
fx.Provide(NewSulfurasItemUpdateService),
|
||||
fx.Provide(NewItemUpdateServiceProvider),
|
||||
)
|
||||
|
||||
71
go/services/sulfuras_item_update_service.go
Normal file
71
go/services/sulfuras_item_update_service.go
Normal file
@ -0,0 +1,71 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/lib"
|
||||
"github.com/emilybache/gildedrose-refactoring-kata/models"
|
||||
)
|
||||
|
||||
type SulfurasItemUpdateService struct {
|
||||
logger lib.Logger
|
||||
}
|
||||
|
||||
func NewSulfurasItemUpdateService(logger lib.Logger) SulfurasItemUpdateService {
|
||||
return SulfurasItemUpdateService{
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (this SulfurasItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||
item.Mutex.Lock()
|
||||
defer item.Mutex.Unlock()
|
||||
|
||||
itemModel := item.Model
|
||||
|
||||
if itemModel.Name != "Aged Brie" && itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
if itemModel.Name == "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.SellIn < 11 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
if itemModel.SellIn < 6 {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.SellIn = itemModel.SellIn - 1
|
||||
}
|
||||
|
||||
if itemModel.SellIn < 0 {
|
||||
if itemModel.Name != "Aged Brie" {
|
||||
if itemModel.Name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||
if itemModel.Quality > 0 {
|
||||
if itemModel.Name != "Sulfuras, Hand of Ragnaros" {
|
||||
itemModel.Quality = itemModel.Quality - 1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
itemModel.Quality = itemModel.Quality - itemModel.Quality
|
||||
}
|
||||
} else {
|
||||
if itemModel.Quality < 50 {
|
||||
itemModel.Quality = itemModel.Quality + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user