diff --git a/app/repos/productsRepo/productsRepo.go b/app/repos/productsRepo/productsRepo.go index 010fc2c..da6409b 100644 --- a/app/repos/productsRepo/productsRepo.go +++ b/app/repos/productsRepo/productsRepo.go @@ -10,7 +10,6 @@ import ( "git.ma-al.com/goc_daniel/b2b/app/model/dbmodel" "git.ma-al.com/goc_daniel/b2b/app/utils/query/filters" "git.ma-al.com/goc_daniel/b2b/app/utils/query/find" - "git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors" "git.ma-al.com/goc_marek/gormcol" "github.com/WinterYukky/gorm-extra-clause-plugin/exclause" ) @@ -20,6 +19,8 @@ type UIProductsRepo interface { Find(id_lang, userID uint, p find.Paging, filt *filters.FiltersList) (find.Found[model.ProductInList], error) AddToFavorites(userID uint, productID uint) error RemoveFromFavorites(userID uint, productID uint) error + ExistsInFavorites(userID uint, productID uint) (int64, error) + ProductInDatabase(productID uint) (int64, error) } type ProductsRepo struct{} @@ -130,29 +131,6 @@ func (repo *ProductsRepo) Find(id_lang, userID uint, p find.Paging, filt *filter } func (repo *ProductsRepo) AddToFavorites(userID uint, productID uint) error { - var count int64 - err := db.Get(). - Table(dbmodel.TableNamePsProduct). - Where(dbmodel.PsProductCols.IDProduct.Col()+" = ?", productID). - Count(&count).Error - if err != nil { - return err - } - if count == 0 { - return responseErrors.ErrProductNotFound - } - - err = db.Get(). - Table("b2b_favorites"). - Where("user_id = ? AND product_id = ?", userID, productID). - Count(&count).Error - if err != nil { - return err - } - if count > 0 { - return responseErrors.ErrAlreadyInFavorites - } - fav := model.B2bFavorite{ UserID: userID, ProductID: productID, @@ -165,3 +143,21 @@ func (repo *ProductsRepo) RemoveFromFavorites(userID uint, productID uint) error Where("user_id = ? AND product_id = ?", userID, productID). Delete(&model.B2bFavorite{}).Error } + +func (repo *ProductsRepo) ExistsInFavorites(userID uint, productID uint) (int64, error) { + var count int64 + err := db.Get(). + Table("b2b_favorites"). + Where("user_id = ? AND product_id = ?", userID, productID). + Count(&count).Error + return count, err +} + +func (repo *ProductsRepo) ProductInDatabase(productID uint) (int64, error) { + var count int64 + err := db.Get(). + Table(dbmodel.TableNamePsProduct). + Where(dbmodel.PsProductCols.IDProduct.Col()+" = ?", productID). + Count(&count).Error + return count, err +} diff --git a/app/service/productService/productService.go b/app/service/productService/productService.go index 03a7132..ae3ddd6 100644 --- a/app/service/productService/productService.go +++ b/app/service/productService/productService.go @@ -8,6 +8,7 @@ import ( constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data" "git.ma-al.com/goc_daniel/b2b/app/utils/query/filters" "git.ma-al.com/goc_daniel/b2b/app/utils/query/find" + "git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors" ) type ProductService struct { @@ -34,9 +35,41 @@ func (s *ProductService) Find(id_lang, userID uint, p find.Paging, filters *filt } func (s *ProductService) AddToFavorites(userID uint, productID uint) error { + count, err := s.productsRepo.ProductInDatabase(productID) + if err != nil { + return err + } + if count <= 0 { + return responseErrors.ErrProductNotFound + } + + count, err = s.productsRepo.ExistsInFavorites(userID, productID) + if err != nil { + return err + } + if count >= 1 { + return responseErrors.ErrAlreadyInFavorites + } + return s.productsRepo.AddToFavorites(userID, productID) } func (s *ProductService) RemoveFromFavorites(userID uint, productID uint) error { + count, err := s.productsRepo.ProductInDatabase(productID) + if err != nil { + return err + } + if count <= 0 { + return responseErrors.ErrProductNotFound + } + + count, err = s.productsRepo.ExistsInFavorites(userID, productID) + if err != nil { + return err + } + if count <= 0 { + return responseErrors.ErrNotInFavorites + } + return s.productsRepo.RemoveFromFavorites(userID, productID) } diff --git a/bruno/api_v1/product/Add To Favorites.yml b/bruno/api_v1/product/Add To Favorites.yml index 71b3d9a..29a660d 100644 --- a/bruno/api_v1/product/Add To Favorites.yml +++ b/bruno/api_v1/product/Add To Favorites.yml @@ -5,7 +5,7 @@ info: http: method: POST - url: "{{bas_url}}/restricted/product/favorite/51" + url: "{{bas_url}}/restricted/product/favorite/53" auth: inherit settings: diff --git a/bruno/api_v1/product/Remove Form Favorites.yml b/bruno/api_v1/product/Remove Form Favorites.yml index a76feb6..2b388c2 100644 --- a/bruno/api_v1/product/Remove Form Favorites.yml +++ b/bruno/api_v1/product/Remove Form Favorites.yml @@ -5,7 +5,7 @@ info: http: method: DELETE - url: "{{bas_url}}/restricted/product/favorite/1" + url: "{{bas_url}}/restricted/product/favorite/51" auth: inherit settings: