Skip to content

Commit

Permalink
Merge pull request #27 from Jibaru/feat-21
Browse files Browse the repository at this point in the history
Add update item endpoint
  • Loading branch information
Jibaru authored Feb 14, 2024
2 parents 000e90d + 4ee9212 commit db4cd80
Show file tree
Hide file tree
Showing 15 changed files with 684 additions and 27 deletions.
35 changes: 35 additions & 0 deletions internal/app/application/services/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type AssetServiceInterface interface {
GetByEntity(entity entities.Entity, pageFilter *PageFilter) ([]*entities.Asset, error)
Delete(asset *entities.Asset) error
GetByEntities(entities []entities.Entity) ([]*entities.Asset, error)
UpdateByEntity(entity entities.Entity, file *os.File) (*entities.Asset, error)
}

type AssetService struct {
Expand Down Expand Up @@ -128,6 +129,27 @@ func (s *AssetService) GetByEntities(theEntities []entities.Entity) ([]*entities
return assets, nil
}

func (s *AssetService) UpdateByEntity(theEntity entities.Entity, file *os.File) (*entities.Asset, error) {
oldAssets, err := s.assetRepository.FindByEntity(theEntity, nil)
if err != nil {
return nil, err
}

for _, oldAsset := range oldAssets {
err = s.Delete(oldAsset)
if err != nil {
return nil, err
}
}

asset, err := s.CreateFromFile(file, theEntity)
if err != nil {
return nil, err
}

return asset, nil
}

type AssetServiceMock struct {
mock.Mock
}
Expand Down Expand Up @@ -173,3 +195,16 @@ func (s *AssetServiceMock) GetByEntities(

return args.Get(0).([]*entities.Asset), args.Error(1)
}

func (s *AssetServiceMock) UpdateByEntity(
theEntity entities.Entity,
file *os.File,
) (*entities.Asset, error) {
args := s.Called(theEntity, file)

if args.Get(0) == nil {
return nil, args.Error(1)
}

return args.Get(0).(*entities.Asset), args.Error(1)
}
39 changes: 39 additions & 0 deletions internal/app/application/services/asset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,42 @@ func TestAssetServiceGetByEntitiesErrorFromAssetRepository(t *testing.T) {
assert.Nil(t, assets)
assetRepository.AssertExpectations(t)
}

func TestAssetServiceUpdateByEntity(t *testing.T) {
assetRepository := &stub.AssetRepositoryMock{}
fileManager := &serviceStubs.FileManagerMock{}
service := NewAssetService(fileManager, assetRepository)

entity := entities.NewIdentifiableEntity(uuid.NewString())
oldAssetId := uuid.NewString()
oldFileID := uuid.NewString()
oldExtension := ".png"
var filter *repositories.PageFilter

file, err := os.CreateTemp("", "*_"+uuid.NewString())
defer file.Close()

assetRepository.On("FindByEntity", entity, filter).
Return([]*entities.Asset{
{
ID: oldAssetId,
FileID: oldFileID,
Extension: oldExtension,
},
}, nil)
assetRepository.On("Delete", oldAssetId).
Return(nil)
assetRepository.On("Create", mock.AnythingOfType("*entities.Asset")).
Return(nil)
fileManager.On("Upload", file).
Return(uuid.NewString(), nil)
fileManager.On("Delete", oldFileID, oldExtension).
Return(nil)

asset, err := service.UpdateByEntity(entity, file)

assert.NoError(t, err)
assert.NotNil(t, asset)
assetRepository.AssertExpectations(t)
fileManager.AssertExpectations(t)
}
58 changes: 58 additions & 0 deletions internal/app/application/services/item.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,3 +190,61 @@ func (s *ItemService) makeGetAllQueryFilter(

return queryFilter
}

func (s *ItemService) Update(
id string,
name string,
sku string,
description *string,
unit string,
keywords []string,
imageFile *os.File,
) (*entities.Item, error) {
item, err := s.itemRepository.GetByID(id)
if err != nil {
return nil, err
}

err = item.Update(sku, name, description, unit)
if err != nil {
return nil, err
}

err = s.itemRepository.Update(item)
if err != nil {
return nil, err
}

err = s.itemKeywordRepository.DeleteByItemID(item.ID)
if err != nil {
return nil, err
}

if len(keywords) > 0 {
var itemKeywords []*entities.ItemKeyword
for _, keyword := range keywords {
itemKeyword, err := entities.NewItemKeyword(item.ID, keyword)
if err != nil {
return nil, err
}

itemKeywords = append(itemKeywords, itemKeyword)
}

err = s.itemKeywordRepository.CreateMany(itemKeywords)
if err != nil {
return nil, err
}

item.Keywords = itemKeywords
}

if imageFile != nil {
_, err = s.assetService.UpdateByEntity(item, imageFile)
if err != nil {
return nil, err
}
}

return item, nil
}
Loading

0 comments on commit db4cd80

Please sign in to comment.