add check on nil time req

This commit is contained in:
Pavel 2024-04-26 10:39:04 +03:00
parent e5f4768a51
commit 6ca31c1a43
2 changed files with 26 additions and 14 deletions

@ -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

@ -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