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 (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
//"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"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 {
|
type ItemUpdateServiceProvider struct {
|
||||||
logger lib.Logger
|
logger lib.Logger
|
||||||
itemUpdateService ItemUpdateService
|
normalItemUpdateService NormalItemUpdateService
|
||||||
|
agedBrieItemUpdateService AgedBrieItemUpdateService
|
||||||
|
backstagePassItemUpdateService BackstagePassItemUpdateService
|
||||||
|
sulfurasItemUpdateService SulfurasItemUpdateService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewItemUpdateServiceProvider(
|
func NewItemUpdateServiceProvider(
|
||||||
logger lib.Logger,
|
logger lib.Logger,
|
||||||
itemUpdateService ItemUpdateService,
|
normalItemUpdateService NormalItemUpdateService,
|
||||||
|
agedBrieItemUpdateService AgedBrieItemUpdateService,
|
||||||
|
backstagePassItemUpdateService BackstagePassItemUpdateService,
|
||||||
|
sulfurasItemUpdateService SulfurasItemUpdateService,
|
||||||
) domains.ItemUpdateServiceProvider {
|
) domains.ItemUpdateServiceProvider {
|
||||||
|
|
||||||
return ItemUpdateServiceProvider{
|
return ItemUpdateServiceProvider{
|
||||||
logger: logger,
|
logger: logger,
|
||||||
itemUpdateService: itemUpdateService,
|
normalItemUpdateService: normalItemUpdateService,
|
||||||
|
agedBrieItemUpdateService: agedBrieItemUpdateService,
|
||||||
|
backstagePassItemUpdateService: backstagePassItemUpdateService,
|
||||||
|
sulfurasItemUpdateService: sulfurasItemUpdateService,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this ItemUpdateServiceProvider) GetUpdateService(item *models.Item) domains.ItemUpdateService {
|
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"
|
"github.com/emilybache/gildedrose-refactoring-kata/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ItemUpdateService struct {
|
type NormalItemUpdateService struct {
|
||||||
logger lib.Logger
|
logger lib.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewItemUpdateService(logger lib.Logger) ItemUpdateService {
|
func NewNormalItemUpdateService(logger lib.Logger) NormalItemUpdateService {
|
||||||
return ItemUpdateService{
|
return NormalItemUpdateService{
|
||||||
logger: logger,
|
logger: logger,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this ItemUpdateService) UpdateQuality(item *models.Item) error {
|
func (this NormalItemUpdateService) UpdateQuality(item *models.Item) error {
|
||||||
item.Mutex.Lock()
|
item.Mutex.Lock()
|
||||||
defer item.Mutex.Unlock()
|
defer item.Mutex.Unlock()
|
||||||
|
|
||||||
@ -3,6 +3,9 @@ package services
|
|||||||
import "go.uber.org/fx"
|
import "go.uber.org/fx"
|
||||||
|
|
||||||
var Module = fx.Options(
|
var Module = fx.Options(
|
||||||
fx.Provide(NewItemUpdateService),
|
fx.Provide(NewNormalItemUpdateService),
|
||||||
|
fx.Provide(NewAgedBrieItemUpdateService),
|
||||||
|
fx.Provide(NewBackstagePassItemUpdateService),
|
||||||
|
fx.Provide(NewSulfurasItemUpdateService),
|
||||||
fx.Provide(NewItemUpdateServiceProvider),
|
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