diff --git a/internal/repository/promocode_stats.go b/internal/repository/promocode_stats.go index 94467c8..e65c415 100644 --- a/internal/repository/promocode_stats.go +++ b/internal/repository/promocode_stats.go @@ -79,8 +79,9 @@ func (r *StatsRepository) GetStatistics(ctx context.Context, promoCodeID string) return promoCodeStats, nil } -func (r *StatsRepository) GetAllPromoActivations(ctx context.Context) (*codeword_rpc.PromoActivationResp, error) { - pipeline := []bson.M{ +func (r *StatsRepository) GetAllPromoActivations(ctx context.Context, req *codeword_rpc.Time) (*codeword_rpc.PromoActivationResp, error) { + var pipeline []bson.M + pipeline = append(pipeline, []bson.M{ { "$project": bson.M{ "_id": 1, @@ -93,17 +94,29 @@ func (r *StatsRepository) GetAllPromoActivations(ctx context.Context) (*codeword { "$unwind": "$usageArray.v", }, - { - "$group": bson.M{ - "_id": "$_id", - "users": bson.M{"$push": bson.M{ - "UserID": "$usageArray.v.userID", - "Time": "$usageArray.v.time", - }}, + }...) + + if req.To != 0 && req.From != 0 { + pipeline = append(pipeline, bson.M{ + "$match": bson.M{ + "usageArray.v.time": bson.M{ + "$gte": req.From, + "$lte": req.To, + }, }, - }, + }) } + pipeline = append(pipeline, bson.M{ + "$group": bson.M{ + "_id": "$_id", + "users": bson.M{"$push": bson.M{ + "UserID": "$usageArray.v.userID", + "Time": "$usageArray.v.time", + }}, + }, + }) + cursor, err := r.mdb.Aggregate(ctx, pipeline) if err != nil { return nil, err diff --git a/internal/services/promocode_service.go b/internal/services/promocode_service.go index 5633682..fdc8c24 100644 --- a/internal/services/promocode_service.go +++ b/internal/services/promocode_service.go @@ -12,7 +12,6 @@ import ( "fmt" "go.mongodb.org/mongo-driver/bson/primitive" "go.uber.org/zap" - "google.golang.org/protobuf/types/known/emptypb" "time" ) @@ -30,7 +29,7 @@ type PromoCodeRepository interface { type PromoStatsRepository interface { UpdateStatistics(ctx context.Context, req *models.ActivateReq, promoCode *models.PromoCode, userID string) error GetStatistics(ctx context.Context, promoCodeID string) (models.PromoCodeStats, error) - GetAllPromoActivations(ctx context.Context) (*codeword_rpc.PromoActivationResp, error) + GetAllPromoActivations(ctx context.Context, req *codeword_rpc.Time) (*codeword_rpc.PromoActivationResp, error) } type PromoDeps struct { @@ -273,8 +272,8 @@ func (s *PromoCodeService) GetStats(ctx context.Context, req models.PromoStatReq return resp, nil } -func (s *PromoCodeService) GetAllPromoActivations(ctx context.Context, _ *emptypb.Empty) (*codeword_rpc.PromoActivationResp, error) { - result, err := s.statsRepo.GetAllPromoActivations(ctx) +func (s *PromoCodeService) GetAllPromoActivations(ctx context.Context, req *codeword_rpc.Time) (*codeword_rpc.PromoActivationResp, error) { + result, err := s.statsRepo.GetAllPromoActivations(ctx, req) if err != nil { s.logger.Error("error getting all promo activations data", zap.Error(err)) return nil, err