update Order History

This commit is contained in:
aditya.siregar 2024-07-26 22:32:24 +07:00
parent 5ef14f3043
commit 105bda67a3
8 changed files with 30 additions and 35 deletions

View File

@ -13,6 +13,7 @@ type Context interface {
RequestedBy() int64 RequestedBy() int64
IsSuperAdmin() bool IsSuperAdmin() bool
IsAdmin() bool
IsCasheer() bool IsCasheer() bool
GetPartnerID() *int64 GetPartnerID() *int64
GetSiteID() *int64 GetSiteID() *int64
@ -36,6 +37,10 @@ func (m *MyContextImpl) IsSuperAdmin() bool {
return m.roleID == int(role.SuperAdmin) 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 { func (m *MyContextImpl) IsCasheer() bool {
return m.roleID == int(role.Casheer) return m.roleID == int(role.Casheer)
} }

View File

@ -100,8 +100,10 @@ type HistoryOrderDB struct {
} }
type HistoryOrderSearch struct { type HistoryOrderSearch struct {
Limit int PartnerID *int64
Offset int IsAdmin bool
Limit int
Offset int
} }
type HistoryOrderList []*HistoryOrderDB type HistoryOrderList []*HistoryOrderDB

View File

@ -2,12 +2,12 @@ package order
import ( import (
"furtuna-be/internal/common/errors" "furtuna-be/internal/common/errors"
"furtuna-be/internal/common/mycontext"
"furtuna-be/internal/entity" "furtuna-be/internal/entity"
"furtuna-be/internal/handlers/request" "furtuna-be/internal/handlers/request"
"furtuna-be/internal/handlers/response" "furtuna-be/internal/handlers/response"
"furtuna-be/internal/services" "furtuna-be/internal/services"
"net/http" "net/http"
"strings"
"time" "time"
"github.com/gin-gonic/gin" "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) { 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 var req request.HistoryOrderParam
if err := c.ShouldBindQuery(&req); err != nil { if err := c.ShouldBindQuery(&req); err != nil {
response.ErrorWrapper(c, errors.ErrorBadRequest) response.ErrorWrapper(c, errors.ErrorBadRequest)
return 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 { if err != nil {
response.ErrorWrapper(c, err) response.ErrorWrapper(c, err)
return return

View File

@ -1,6 +1,7 @@
package request package request
import ( import (
"furtuna-be/internal/common/mycontext"
"furtuna-be/internal/constants/transaction" "furtuna-be/internal/constants/transaction"
"furtuna-be/internal/entity" "furtuna-be/internal/entity"
) )
@ -12,14 +13,16 @@ type Order struct {
} }
type HistoryOrderParam struct { type HistoryOrderParam struct {
Limit int `form:"limit" json:"limit" example:"10"` Limit int `form:"limit" json:"limit" example:"10"`
Offset int `form:"offset" json:"offset" example:"0"` 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{ return entity.HistoryOrderSearch{
Limit: o.Limit, PartnerID: ctx.GetPartnerID(),
Offset: o.Offset, IsAdmin: ctx.IsAdmin(),
Limit: o.Limit,
Offset: o.Offset,
} }
} }

View File

@ -83,7 +83,7 @@ func (r *OrderRepository) Update(ctx context.Context, order *entity.Order) (*ent
return order, nil 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 orders []*entity.HistoryOrderDB
var total int64 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 partners on orders.partner_id = partners.id").
Joins("left join sites on partners.id = sites.partner_id") Joins("left join sites on partners.id = sites.partner_id")
if claims.Role == 3 { if !req.IsAdmin {
query = query.Where("orders.partner_id = ?", claims.PartnerID) 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") query = query.Group("orders.id, users.name, sites.name, orders.created_at, orders.payment_type, orders.status")

View File

@ -130,7 +130,7 @@ type Order interface {
FindByID(ctx context.Context, id int64) (*entity.Order, error) FindByID(ctx context.Context, id int64) (*entity.Order, error)
Update(ctx context.Context, order *entity.Order) (*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 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 { type OSSRepository interface {

View File

@ -6,6 +6,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"furtuna-be/internal/common/logger" "furtuna-be/internal/common/logger"
"furtuna-be/internal/common/mycontext"
order2 "furtuna-be/internal/constants/order" order2 "furtuna-be/internal/constants/order"
"furtuna-be/internal/entity" "furtuna-be/internal/entity"
"furtuna-be/internal/repository" "furtuna-be/internal/repository"
@ -297,15 +298,8 @@ func (s *OrderService) updateWalletBalance(ctx context.Context, tx *gorm.DB, par
return err return err
} }
func (s *OrderService) GetAllHistoryOrders(ctx context.Context, tokenString string, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) { func (s *OrderService) GetAllHistoryOrders(ctx mycontext.Context, req entity.HistoryOrderSearch) ([]*entity.HistoryOrder, int, error) {
claims, err := s.crypt.ParseAndValidateJWT(tokenString) historyOrders, total, err := s.repo.GetAllHystoryOrders(ctx, req)
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)
if err != nil { if err != nil {
logger.ContextLogger(ctx).Error("error when get all history orders", zap.Error(err)) logger.ContextLogger(ctx).Error("error when get all history orders", zap.Error(err))
return nil, 0, err return nil, 0, err

View File

@ -42,8 +42,8 @@ func NewServiceManagerImpl(cfg *config.Config, repo *repository.RepoManagerImpl)
BranchSvc: branch.NewBranchService(repo.Branch), BranchSvc: branch.NewBranchService(repo.Branch),
StudioSvc: studio.NewStudioService(repo.Studio), StudioSvc: studio.NewStudioService(repo.Studio),
ProductSvc: product.NewProductService(repo.Product), ProductSvc: product.NewProductService(repo.Product),
OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet), OrderSvc: order.NewOrderService(repo.Order, repo.Product, repo.Crypto, repo.Midtrans, repo.Payment, repo.Trx, repo.Wallet),
OSSSvc: oss.NewOSSService(repo.OSS), OSSSvc: oss.NewOSSService(repo.OSS),
PartnerSvc: partner.NewPartnerService( PartnerSvc: partner.NewPartnerService(
repo.Partner, users.NewUserService(repo.User, repo.Branch), repo.Trx, repo.Wallet), repo.Partner, users.NewUserService(repo.User, repo.Branch), repo.Trx, repo.Wallet),
SiteSvc: site.NewSiteService(repo.Site), SiteSvc: site.NewSiteService(repo.Site),
@ -101,7 +101,7 @@ type Order interface {
CreateOrder(ctx context.Context, req *entity.OrderRequest) (*entity.OrderResponse, error) CreateOrder(ctx context.Context, req *entity.OrderRequest) (*entity.OrderResponse, error)
Execute(ctx context.Context, req *entity.OrderExecuteRequest) (*entity.ExecuteOrderResponse, error) Execute(ctx context.Context, req *entity.OrderExecuteRequest) (*entity.ExecuteOrderResponse, error)
ProcessCallback(ctx context.Context, req *entity.CallbackRequest) 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 { type OSSService interface {