Add Filter and Total Tempat WIsata
This commit is contained in:
parent
f0f03ec971
commit
44302e043a
@ -29,6 +29,7 @@ type Site struct {
|
|||||||
|
|
||||||
type SiteSearch struct {
|
type SiteSearch struct {
|
||||||
PartnerID *int64
|
PartnerID *int64
|
||||||
|
SiteID *int64
|
||||||
IsAdmin bool
|
IsAdmin bool
|
||||||
Search string
|
Search string
|
||||||
Name string
|
Name string
|
||||||
|
|||||||
@ -150,7 +150,7 @@ func (h *Handler) GetAll(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx := request.GetMyContext(c)
|
ctx := request.GetMyContext(c)
|
||||||
Sites, total, err := h.service.GetAll(c.Request.Context(), req.ToEntity(ctx, ctx.GetPartnerID()))
|
Sites, total, err := h.service.GetAll(c.Request.Context(), req.ToEntity(ctx, ctx.GetPartnerID(), ctx.GetSiteID()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ErrorWrapper(c, err)
|
response.ErrorWrapper(c, err)
|
||||||
return
|
return
|
||||||
@ -252,7 +252,7 @@ func (h *Handler) Count(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx := request.GetMyContext(c)
|
ctx := request.GetMyContext(c)
|
||||||
res, err := h.service.Count(ctx, req.ToEntity(ctx, ctx.GetPartnerID()))
|
res, err := h.service.Count(ctx, req.ToEntity(ctx, ctx.GetPartnerID(), ctx.GetSiteID()))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ErrorWrapper(c, err)
|
response.ErrorWrapper(c, err)
|
||||||
|
|||||||
@ -67,10 +67,11 @@ type SiteParam struct {
|
|||||||
Offset int `form:"offset,default=0"`
|
Offset int `form:"offset,default=0"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *SiteParam) ToEntity(ctx mycontext.Context, partnerID *int64) entity.SiteSearch {
|
func (r *SiteParam) ToEntity(ctx mycontext.Context, partnerID *int64, siteID *int64) entity.SiteSearch {
|
||||||
return entity.SiteSearch{
|
return entity.SiteSearch{
|
||||||
PartnerID: partnerID,
|
PartnerID: partnerID,
|
||||||
IsAdmin: ctx.IsAdmin(),
|
IsAdmin: ctx.IsAdmin(),
|
||||||
|
SiteID: siteID,
|
||||||
Search: r.Search,
|
Search: r.Search,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Limit: r.Limit,
|
Limit: r.Limit,
|
||||||
|
|||||||
@ -188,10 +188,14 @@ func (r *OrderRepository) SumAmount(ctx mycontext.Context, req entity.OrderSearc
|
|||||||
Where("date(created_at) = ?", today).
|
Where("date(created_at) = ?", today).
|
||||||
Where("status = ?", "PAID")
|
Where("status = ?", "PAID")
|
||||||
|
|
||||||
if !req.IsAdmin {
|
if req.PartnerID != nil {
|
||||||
query = query.Where("orders.partner_id = ?", req.PartnerID)
|
query = query.Where("orders.partner_id = ?", req.PartnerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.SiteID != nil {
|
||||||
|
query = query.Where("orders.site_id = ?", req.SiteID)
|
||||||
|
}
|
||||||
|
|
||||||
if err := query.Scan(&amount).Error; err != nil {
|
if err := query.Scan(&amount).Error; err != nil {
|
||||||
logger.ContextLogger(ctx).Error("error when get cash amount", zap.Error(err))
|
logger.ContextLogger(ctx).Error("error when get cash amount", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@ -109,6 +109,7 @@ type User interface {
|
|||||||
GetUserByEmail(ctx context.Context, email string) (*entity.UserDB, error)
|
GetUserByEmail(ctx context.Context, email string) (*entity.UserDB, error)
|
||||||
UpdateUser(ctx context.Context, user *entity.UserDB) (*entity.UserDB, error)
|
UpdateUser(ctx context.Context, user *entity.UserDB) (*entity.UserDB, error)
|
||||||
UpdateUserWithTx(ctx context.Context, tx *gorm.DB, user *entity.UserDB) (*entity.UserDB, error)
|
UpdateUserWithTx(ctx context.Context, tx *gorm.DB, user *entity.UserDB) (*entity.UserDB, error)
|
||||||
|
CountUsersByRoleAndSiteOrPartner(ctx context.Context, roleID int, siteID *int64) (int, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Branch interface {
|
type Branch interface {
|
||||||
|
|||||||
@ -105,6 +105,10 @@ func (r *SiteRepository) GetAll(ctx context.Context, req entity.SiteSearch) (ent
|
|||||||
query = query.Where("partner_id = ?", req.PartnerID)
|
query = query.Where("partner_id = ?", req.PartnerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.SiteID != nil {
|
||||||
|
query = query.Where("id = ?", req.SiteID)
|
||||||
|
}
|
||||||
|
|
||||||
if req.Limit > 0 {
|
if req.Limit > 0 {
|
||||||
query = query.Limit(req.Limit)
|
query = query.Limit(req.Limit)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -207,3 +207,22 @@ func (r *UserRepository) UpdateUserWithTx(ctx context.Context, tx *gorm.DB, user
|
|||||||
func logError(ctx context.Context, action string, err error) {
|
func logError(ctx context.Context, action string, err error) {
|
||||||
logger.ContextLogger(ctx).Error("error when "+action, zap.Error(err))
|
logger.ContextLogger(ctx).Error("error when "+action, zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *UserRepository) CountUsersByRoleAndSiteOrPartner(ctx context.Context, roleID int, siteID *int64) (int, error) {
|
||||||
|
var count int64
|
||||||
|
|
||||||
|
query := r.db.Table("users").
|
||||||
|
Joins("LEFT JOIN user_roles ur ON users.id = ur.user_id").
|
||||||
|
Where("ur.role_id = ?", roleID)
|
||||||
|
|
||||||
|
if siteID != nil {
|
||||||
|
query = query.Where("ur.site_id = ?", siteID)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := query.Count(&count).Error; err != nil {
|
||||||
|
logger.ContextLogger(ctx).Error("error when counting users by role and site/partner", zap.Error(err))
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return int(count), nil
|
||||||
|
}
|
||||||
|
|||||||
@ -4,14 +4,17 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"furtuna-be/internal/common/logger"
|
"furtuna-be/internal/common/logger"
|
||||||
"furtuna-be/internal/common/mycontext"
|
"furtuna-be/internal/common/mycontext"
|
||||||
|
"furtuna-be/internal/constants/role"
|
||||||
"furtuna-be/internal/entity"
|
"furtuna-be/internal/entity"
|
||||||
"furtuna-be/internal/repository"
|
"furtuna-be/internal/repository"
|
||||||
|
"furtuna-be/internal/repository/users"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SiteService struct {
|
type SiteService struct {
|
||||||
repo repository.SiteRepository
|
repo repository.SiteRepository
|
||||||
|
user users.UserRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSiteService(repo repository.SiteRepository) *SiteService {
|
func NewSiteService(repo repository.SiteRepository) *SiteService {
|
||||||
@ -89,6 +92,17 @@ func (s *SiteService) Delete(ctx mycontext.Context, id int64) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SiteService) Count(ctx mycontext.Context, req entity.SiteSearch) (*entity.SiteCount, error) {
|
func (s *SiteService) Count(ctx mycontext.Context, req entity.SiteSearch) (*entity.SiteCount, error) {
|
||||||
|
if req.SiteID != nil {
|
||||||
|
total, err := s.user.CountUsersByRoleAndSiteOrPartner(ctx, int(role.Casheer), req.SiteID)
|
||||||
|
if err != nil {
|
||||||
|
logger.ContextLogger(ctx).Error("error when getting count user", zap.Error(err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &entity.SiteCount{
|
||||||
|
Count: total,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
count, err := s.repo.Count(ctx, req)
|
count, err := s.repo.Count(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.ContextLogger(ctx).Error("error when getting all sites", zap.Error(err))
|
logger.ContextLogger(ctx).Error("error when getting all sites", zap.Error(err))
|
||||||
@ -96,4 +110,4 @@ func (s *SiteService) Count(ctx mycontext.Context, req entity.SiteSearch) (*enti
|
|||||||
}
|
}
|
||||||
|
|
||||||
return count.ToSiteCount(), nil
|
return count.ToSiteCount(), nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user