Skip to content

Commit

Permalink
Merge pull request #20 from ARUNK2121/finalization
Browse files Browse the repository at this point in the history
Finalization
  • Loading branch information
ARUNK2121 authored Oct 31, 2023
2 parents a85f8d2 + 270723e commit 6e3a46a
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 4 deletions.
14 changes: 14 additions & 0 deletions pkg/api/handler/category.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,17 @@ func (Cat *CategoryHandler) GetProductDetailsInACategory(c *gin.Context) {
c.JSON(http.StatusOK, successRes)

}

func (Cat *CategoryHandler) GetBannersForUsers(c *gin.Context) {

banners, err := Cat.CategoryUseCase.GetBannersForUsers()
if err != nil {
errorRes := response.ClientResponse(http.StatusInternalServerError, "error in fetching data", nil, err.Error())
c.JSON(http.StatusBadRequest, errorRes)
return
}

successRes := response.ClientResponse(http.StatusOK, "Successfully got all banners", banners, nil)
c.JSON(http.StatusOK, successRes)

}
1 change: 1 addition & 0 deletions pkg/domain/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ type Inventories struct {
type Category struct {
ID uint `json:"id" gorm:"unique;not null"`
Category string `json:"category"`
Image string `json:"category_image"`
}
2 changes: 1 addition & 1 deletion pkg/repository/cart.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (ad *cartRepository) GetPaymentOptions() ([]models.PaymentMethod, error) {

var payment []models.PaymentMethod

if err := ad.DB.Raw("SELECT * FROM payment_methods").Scan(&payment).Error; err != nil {
if err := ad.DB.Raw("SELECT * FROM payment_methods WHERE id_deleted = false").Scan(&payment).Error; err != nil {
return []models.PaymentMethod{}, err
}

Expand Down
25 changes: 25 additions & 0 deletions pkg/repository/category.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"errors"
"jerseyhub/pkg/domain"
interfaces "jerseyhub/pkg/repository/interface"
"jerseyhub/pkg/utils/models"
"strconv"

"gorm.io/gorm"
Expand Down Expand Up @@ -103,3 +104,27 @@ func (c *categoryRepository) GetCategories() ([]domain.Category, error) {

return model, nil
}

func (c *categoryRepository) GetBannersForUsers() ([]models.Banner, error) {
var banners []models.Banner
err := c.DB.Raw(`select offers.category_id,categories.category as category_name,offers.discount_rate as discount_percentage
from offers
join categories on categories.id = offers.category_id
where offers.discount_rate > 10
Order by offers.discount_rate desc
limit 3`).Scan(&banners).Error
if err != nil {
return []models.Banner{}, err
}
return banners, nil
}

func (c *categoryRepository) GetImagesOfProductsFromACategory(CategoryID int) ([]string, error) {
var images []string
err := c.DB.Raw("select image from inventories where category_id = $1 limit 2", CategoryID).Scan(&images).Error
if err != nil {
return []string{}, err
}

return images, nil
}
7 changes: 6 additions & 1 deletion pkg/repository/interface/category.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package interfaces

import "jerseyhub/pkg/domain"
import (
"jerseyhub/pkg/domain"
"jerseyhub/pkg/utils/models"
)

type CategoryRepository interface {
AddCategory(category domain.Category) (domain.Category, error)
CheckCategory(currrent string) (bool, error)
UpdateCategory(current, new string) (domain.Category, error)
DeleteCategory(categoryID string) error
GetCategories() ([]domain.Category, error)
GetBannersForUsers() ([]models.Banner, error)
GetImagesOfProductsFromACategory(CategoryID int) ([]string, error)
}
2 changes: 1 addition & 1 deletion pkg/repository/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func (ad *inventoryRepository) ListProducts(page int) ([]models.Inventories, err
if page == 0 {
page = 1
}
offset := (page - 1) * 5
offset := (page - 1) * 10
var productDetails []models.Inventories

if err := ad.DB.Raw("select id,category_id,product_name,image,size,stock,price from inventories limit $1 offset $2", 10, offset).Scan(&productDetails).Error; err != nil {
Expand Down
4 changes: 3 additions & 1 deletion pkg/routes/userRoutes.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ func UserRoutes(engine *gin.RouterGroup,
engine.Use(middleware.UserAuthMiddleware)
{

engine.GET("/banners", categoryHandler.GetBannersForUsers)

search := engine.Group("/search")
{
search.GET("/", inventoryHandler.SearchProducts)
Expand All @@ -61,7 +63,7 @@ func UserRoutes(engine *gin.RouterGroup,
profile.GET("/details", userHandler.GetUserDetails)
profile.GET("/address", userHandler.GetAddresses)
profile.POST("/address", userHandler.AddAddress)
profile.GET("/get-link", userHandler.GetMyReferenceLink)
profile.GET("/reference-link", userHandler.GetMyReferenceLink)

orders := profile.Group("/orders")
{
Expand Down
20 changes: 20 additions & 0 deletions pkg/usecase/category.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,23 @@ func (i *categoryUseCase) GetProductDetailsInACategory(id int) ([]models.Invento
return productDetails, nil

}

func (Cat *categoryUseCase) GetBannersForUsers() ([]models.Banner, error) {

//find categories with highest offer percentage atleast one maximum 3
banners, err := Cat.repository.GetBannersForUsers()
if err != nil {
return []models.Banner{}, err
}

//find images of 2 products from each category
for _, v := range banners {
images, err := Cat.repository.GetImagesOfProductsFromACategory(v.CategoryID)
if err != nil {
return []models.Banner{}, err
}
v.Images = images
}

return banners, nil
}
1 change: 1 addition & 0 deletions pkg/usecase/interface/category.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ type CategoryUseCase interface {
DeleteCategory(categoryID string) error
GetCategories() ([]domain.Category, error)
GetProductDetailsInACategory(id int) ([]models.Inventories, error)
GetBannersForUsers() ([]models.Banner, error)
}
7 changes: 7 additions & 0 deletions pkg/utils/models/inventory.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,10 @@ type EditInventoryDetails struct {
CategoryID int `json:"category_id"`
Size string `json:"size"`
}

type Banner struct {
CategoryID int
CategoryName string
DiscountPercentage int
Images []string
}

0 comments on commit 6e3a46a

Please sign in to comment.