From c7495b8bffa9a7ee00f73cda96646079df26e741 Mon Sep 17 00:00:00 2001 From: "aditya.siregar" Date: Tue, 30 Jul 2024 19:38:23 +0700 Subject: [PATCH] Update Filter --- internal/entity/auth.go | 1 + internal/entity/partner.go | 9 +++++---- internal/handlers/http/partner/partner.go | 6 ++++-- internal/handlers/request/partner.go | 12 +++++++----- internal/handlers/request/user.go | 7 +++++++ internal/repository/partners/partners.go | 4 ++++ internal/repository/users/user.go | 4 ++++ 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/internal/entity/auth.go b/internal/entity/auth.go index fbeaf3a..a9cc6c6 100644 --- a/internal/entity/auth.go +++ b/internal/entity/auth.go @@ -103,6 +103,7 @@ type UserSearch struct { Name string RoleID int64 PartnerID int64 + SiteID int64 Limit int Offset int } diff --git a/internal/entity/partner.go b/internal/entity/partner.go index 6153f7f..7f0f8e4 100644 --- a/internal/entity/partner.go +++ b/internal/entity/partner.go @@ -75,10 +75,11 @@ func (Partner) TableName() string { } type PartnerSearch struct { - Search string - Name string - Limit int - Offset int + Search string + PartnerID *int64 + Name string + Limit int + Offset int } type PartnerList []*PartnerDB diff --git a/internal/handlers/http/partner/partner.go b/internal/handlers/http/partner/partner.go index 1afc6ee..43d31aa 100644 --- a/internal/handlers/http/partner/partner.go +++ b/internal/handlers/http/partner/partner.go @@ -24,7 +24,7 @@ func (h *Handler) Route(group *gin.RouterGroup, jwt gin.HandlerFunc) { isSuperAdmin := middlewares.SuperAdminMiddleware() route.POST("/", jwt, isSuperAdmin, h.Create) - route.GET("/list", jwt, isSuperAdmin, h.GetAll) + route.GET("/list", jwt, h.GetAll) route.PUT("/:id", jwt, isSuperAdmin, h.Update) route.GET("/:id", jwt, isSuperAdmin, h.GetByID) route.DELETE("/:id", jwt, isSuperAdmin, h.Delete) @@ -140,7 +140,9 @@ func (h *Handler) GetAll(c *gin.Context) { return } - Partners, total, err := h.service.GetAll(c.Request.Context(), req.ToEntity()) + ctx := request.GetMyContext(c) + + Partners, total, err := h.service.GetAll(c.Request.Context(), req.ToEntity(ctx)) if err != nil { response.ErrorWrapper(c, err) return diff --git a/internal/handlers/request/partner.go b/internal/handlers/request/partner.go index fb70c3d..6bfc49a 100644 --- a/internal/handlers/request/partner.go +++ b/internal/handlers/request/partner.go @@ -1,6 +1,7 @@ package request import ( + "furtuna-be/internal/common/mycontext" "furtuna-be/internal/entity" ) @@ -11,12 +12,13 @@ type PartnerParam struct { Offset int `form:"offset" json:"offset" example:"0"` } -func (p *PartnerParam) ToEntity() entity.PartnerSearch { +func (p *PartnerParam) ToEntity(ctx mycontext.Context) entity.PartnerSearch { return entity.PartnerSearch{ - Search: p.Search, - Name: p.Name, - Limit: p.Limit, - Offset: p.Offset, + Search: p.Search, + PartnerID: ctx.GetPartnerID(), + Name: p.Name, + Limit: p.Limit, + Offset: p.Offset, } } diff --git a/internal/handlers/request/user.go b/internal/handlers/request/user.go index d08676e..73e08b8 100644 --- a/internal/handlers/request/user.go +++ b/internal/handlers/request/user.go @@ -45,22 +45,29 @@ type UserParam struct { Name string `form:"name" json:"name" example:"Admin 1"` RoleID int64 `form:"role_id" json:"role_id" example:"1"` PartnerID int64 `form:"partner_id" json:"partner_id" example:"1"` + SiteID int64 `form:"site_id" json:"site_id" example:"1"` Limit int `form:"limit,default=10" json:"limit" example:"10"` Offset int `form:"offset,default=0" json:"offset" example:"0"` } func (p *UserParam) ToEntity(ctx mycontext.Context) entity.UserSearch { partnerID := p.PartnerID + siteID := p.SiteID if !ctx.IsAdmin() { partnerID = *ctx.GetPartnerID() } + if ctx.GetSiteID() != nil { + siteID = *ctx.GetSiteID() + } + return entity.UserSearch{ Search: p.Search, Name: p.Name, RoleID: p.RoleID, PartnerID: partnerID, + SiteID: siteID, Limit: p.Limit, Offset: p.Offset, } diff --git a/internal/repository/partners/partners.go b/internal/repository/partners/partners.go index b0dbfa2..09300c4 100644 --- a/internal/repository/partners/partners.go +++ b/internal/repository/partners/partners.go @@ -93,6 +93,10 @@ func (b *PartnerRepository) GetAll(ctx context.Context, req entity.PartnerSearch query = query.Where("p.name ILIKE ?", "%"+req.Name+"%") } + if req.PartnerID != nil { + query = query.Where("p.id = ?", req.PartnerID) + } + if req.Limit > 0 { query = query.Limit(req.Limit) } diff --git a/internal/repository/users/user.go b/internal/repository/users/user.go index 5d7fd98..a0b186c 100644 --- a/internal/repository/users/user.go +++ b/internal/repository/users/user.go @@ -101,6 +101,10 @@ func (b *UserRepository) GetAllUsers(ctx context.Context, req entity.UserSearch) query = query.Where("ur.partner_id = ? ", req.PartnerID) } + if req.SiteID > 0 { + query = query.Where("ur.site_id = ? ", req.SiteID) + } + // Get the total count without applying the limit and offset. if err := query.Model(&entity.UserDB{}).Count(&total).Error; err != nil { logger.ContextLogger(ctx).Error("error when count users", zap.Error(err))