From 105bda67a3118de7fbf97a88d18d88ee2b762f05 Mon Sep 17 00:00:00 2001 From: "aditya.siregar" Date: Fri, 26 Jul 2024 22:32:24 +0700 Subject: [PATCH] update Order History --- internal/common/mycontext/kinoscontext.go | 5 +++++ internal/entity/order.go | 6 ++++-- internal/handlers/http/order/order.go | 15 +++------------ internal/handlers/request/order.go | 13 ++++++++----- internal/repository/orders/order.go | 6 +++--- internal/repository/repository.go | 2 +- internal/services/order/order.go | 12 +++--------- internal/services/service.go | 6 +++--- 8 files changed, 30 insertions(+), 35 deletions(-) diff --git a/internal/common/mycontext/kinoscontext.go b/internal/common/mycontext/kinoscontext.go index fb19d02..f0fb057 100644 --- a/internal/common/mycontext/kinoscontext.go +++ b/internal/common/mycontext/kinoscontext.go @@ -13,6 +13,7 @@ type Context interface { RequestedBy() int64 IsSuperAdmin() bool + IsAdmin() bool IsCasheer() bool GetPartnerID() *int64 GetSiteID() *int64 @@ -36,6 +37,10 @@ func (m *MyContextImpl) IsSuperAdmin() bool { return m.roleID == int(role.SuperAdmin) } +func (m *MyContextImpl) IsAdmin() bool { + return m.roleID == int(role.SuperAdmin) || m.roleID == int(role.Admin) +} + func (m *MyContextImpl) IsCasheer() bool { return m.roleID == int(role.Casheer) } diff --git a/internal/entity/order.go b/internal/entity/order.go index 8f617b5..462929f 100644 --- a/internal/entity/order.go +++ b/internal/entity/order.go @@ -100,8 +100,10 @@ type HistoryOrderDB struct { } type HistoryOrderSearch struct { - Limit int - Offset int + PartnerID *int64 + IsAdmin bool + Limit int + Offset int } type HistoryOrderList []*HistoryOrderDB diff --git a/internal/handlers/http/order/order.go b/internal/handlers/http/order/order.go index 6089e1f..ca3d386 100644 --- a/internal/handlers/http/order/order.go +++ b/internal/handlers/http/order/order.go @@ -2,12 +2,12 @@ package order import ( "furtuna-be/internal/common/errors" + "furtuna-be/internal/common/mycontext" "furtuna-be/internal/entity" "furtuna-be/internal/handlers/request" "furtuna-be/internal/handlers/response" "furtuna-be/internal/services" "net/http" - "strings" "time" "github.com/gin-gonic/gin" @@ -171,23 +171,14 @@ func (h *Handler) toHistoryOrderResponse(resp *entity.HistoryOrder) response.His } func (h *Handler) GetAllHistoryOrders(c *gin.Context) { - tokenString := c.GetHeader("Authorization") - - if tokenString == "" { - c.JSON(http.StatusUnauthorized, gin.H{"error": "Authorization header is required"}) - c.Abort() - return - } - - tokenString = strings.TrimPrefix(tokenString, "Bearer ") - var req request.HistoryOrderParam if err := c.ShouldBindQuery(&req); err != nil { response.ErrorWrapper(c, errors.ErrorBadRequest) return } - orders, total, err := h.service.GetAllHistoryOrders(c.Request.Context(), tokenString, req.ToEntity()) + ctx := mycontext.NewContext(c.Request.Context()) + orders, total, err := h.service.GetAllHistoryOrders(ctx, req.ToEntity(ctx)) if err != nil { response.ErrorWrapper(c, err) return diff --git a/internal/handlers/request/order.go b/internal/handlers/request/order.go index c0eb134..0183119 100644 --- a/internal/handlers/request/order.go +++ b/internal/handlers/request/order.go @@ -1,6 +1,7 @@ package request import ( + "furtuna-be/internal/common/mycontext" "furtuna-be/internal/constants/transaction" "furtuna-be/internal/entity" ) @@ -12,14 +13,16 @@ type Order struct { } type HistoryOrderParam struct { - Limit int `form:"limit" json:"limit" example:"10"` - Offset int `form:"offset" json:"offset" example:"0"` + Limit int `form:"limit" json:"limit" example:"10"` + Offset int `form:"offset" json:"offset" example:"0"` } -func (o *HistoryOrderParam) ToEntity() entity.HistoryOrderSearch { +func (o *HistoryOrderParam) ToEntity(ctx mycontext.Context) entity.HistoryOrderSearch { return entity.HistoryOrderSearch{ - Limit: o.Limit, - Offset: o.Offset, + PartnerID: ctx.GetPartnerID(), + IsAdmin: ctx.IsAdmin(), + Limit: o.Limit, + Offset: o.Offset, } } diff --git a/internal/repository/orders/order.go b/internal/repository/orders/order.go index 3eb2ee4..307c88b 100644 --- a/internal/repository/orders/order.go +++ b/internal/repository/orders/order.go @@ -83,7 +83,7 @@ func (r *OrderRepository) Update(ctx context.Context, order *entity.Order) (*ent return order, nil } -func (b *OrderRepository) GetAllHystoryOrders(ctx context.Context, claims entity.JWTAuthClaims, req entity.HistoryOrderSearch) (entity.HistoryOrderList, int, error) { +func (b *OrderRepository) GetAllHystoryOrders(ctx context.Context, req entity.HistoryOrderSearch) (entity.HistoryOrderList, int, error) { var orders []*entity.HistoryOrderDB var total int64 @@ -94,8 +94,8 @@ func (b *OrderRepository) GetAllHystoryOrders(ctx context.Context, claims entity Joins("left join partners on orders.partner_id = partners.id"). Joins("left join sites on partners.id = sites.partner_id") - if claims.Role == 3 { - query = query.Where("orders.partner_id = ?", claims.PartnerID) + if !req.IsAdmin { + query = query.Where("orders.partner_id = ?", req.PartnerID) } query = query.Group("orders.id, users.name, sites.name, orders.created_at, orders.payment_type, orders.status") diff --git a/internal/repository/repository.go b/internal/repository/repository.go index cca2939..18ce638 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -130,7 +130,7 @@ type Order interface { FindByID(ctx context.Context, id int64) (*entity.Order, error) Update(ctx context.Context, order *entity.Order) (*entity.Order, error) SetOrderStatus(ctx context.Context, db *gorm.DB, orderID int64, status string) error - GetAllHystoryOrders(ctx context.Context, claims entity.JWTAuthClaims, req entity.HistoryOrderSearch) (entity.HistoryOrderList, int, error) + GetAllHystoryOrders(ctx context.Context, req entity.HistoryOrderSearch) (entity.HistoryOrderList, int, error) } type OSSRepository interface { diff --git a/internal/services/order/order.go b/internal/services/order/order.go index 3605c14..1ca88d8 100644 --- a/internal/services/order/order.go +++ b/internal/services/order/order.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "furtuna-be/internal/common/logger" + "furtuna-be/internal/common/mycontext" order2 "furtuna-be/internal/constants/order" "furtuna-be/internal/entity" "furtuna-be/internal/repository" @@ -297,15 +298,8 @@ func (s *OrderService) updateWalletBalance(ctx context.Context, tx *gorm.DB, par return err } -func (s *OrderService) GetAllHistoryOrders(ctx context.Context, tokenString string, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) { - claims, err := s.crypt.ParseAndValidateJWT(tokenString) - - if err != nil { - logger.ContextLogger(ctx).Error("error when get data token", zap.Error(err)) - return nil, 0, err - } - - historyOrders, total, err := s.repo.GetAllHystoryOrders(ctx, *claims, req) +func (s *OrderService) GetAllHistoryOrders(ctx mycontext.Context, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) { + historyOrders, total, err := s.repo.GetAllHystoryOrders(ctx, req) if err != nil { logger.ContextLogger(ctx).Error("error when get all history orders", zap.Error(err)) return nil, 0, err diff --git a/internal/services/service.go b/internal/services/service.go index c653fcd..539f519 100644 --- a/internal/services/service.go +++ b/internal/services/service.go @@ -42,8 +42,8 @@ func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl) BranchSvc: branch.NewBranchService(repo.Branch), StudioSvc: studio.NewStudioService(repo.Studio), ProductSvc: product.NewProductService(repo.Product), - OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet), - OSSSvc: oss.NewOSSService(repo.OSS), + OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet), + OSSSvc: oss.NewOSSService(repo.OSS), PartnerSvc: partner.NewPartnerService( repo.Partner, users.NewUserService(repo.User, repo.Branch), repo.Trx, repo.Wallet), SiteSvc: site.NewSiteService(repo.Site), @@ -101,7 +101,7 @@ type Order interface { CreateOrder(ctx context.Context, req *entity.OrderRequest) (*entity.OrderResponse, error) Execute(ctx context.Context, req *entity.OrderExecuteRequest) (*entity.ExecuteOrderResponse, error) ProcessCallback(ctx context.Context, req *entity.CallbackRequest) error - GetAllHistoryOrders(ctx context.Context, tokenString string, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) + GetAllHistoryOrders(ctx mycontext.Context, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) } type OSSService interface {