generated from PenaSide/GolangTemplate
fix ltv linter
This commit is contained in:
parent
0a8f184207
commit
61fb3f4e3a
@ -3,18 +3,20 @@ package repository
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"log"
|
|
||||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors"
|
||||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/fields"
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/fields"
|
||||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
|
||||||
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/service/history"
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/service/history"
|
||||||
mongoWrapper "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/mongo"
|
mongoWrapper "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/mongo"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type HistoryRepositoryDeps struct {
|
type HistoryRepositoryDeps struct {
|
||||||
@ -287,20 +289,20 @@ func (receiver *HistoryRepository) CalculateCustomerLTV(ctx context.Context, fro
|
|||||||
timeFilter["createdAt"] = timeRange
|
timeFilter["createdAt"] = timeRange
|
||||||
}
|
}
|
||||||
pipeline := mongo.Pipeline{
|
pipeline := mongo.Pipeline{
|
||||||
{{"$match", bson.M{"key": models.CustomerHistoryKeyPayCart, "isDeleted": false}}},
|
{{Key: "$match", Value: bson.M{"key": models.CustomerHistoryKeyPayCart, "isDeleted": false}}},
|
||||||
{{"$match", timeFilter}},
|
{{Key: "$match", Value: timeFilter}},
|
||||||
{{"$group", bson.M{
|
{{Key: "$group", Value: bson.M{
|
||||||
"_id": "$userId",
|
"_id": "$userId",
|
||||||
"firstPayment": bson.M{"$min": "$createdAt"},
|
"firstPayment": bson.M{"$min": "$createdAt"},
|
||||||
"lastPayment": bson.M{"$max": "$createdAt"},
|
"lastPayment": bson.M{"$max": "$createdAt"},
|
||||||
}}},
|
}}},
|
||||||
{{"$project", bson.M{
|
{{Key: "$project", Value: bson.M{
|
||||||
"lifeTimeInDays": bson.M{"$divide": []interface{}{
|
"lifeTimeInDays": bson.M{"$divide": []interface{}{
|
||||||
bson.M{"$subtract": []interface{}{bson.M{"$toDate": "$lastPayment"}, bson.M{"$toDate": "$firstPayment"}}},
|
bson.M{"$subtract": []interface{}{bson.M{"$toDate": "$lastPayment"}, bson.M{"$toDate": "$firstPayment"}}},
|
||||||
86400000,
|
86400000,
|
||||||
}},
|
}},
|
||||||
}}},
|
}}},
|
||||||
{{"$group", bson.M{
|
{{Key: "$group", Value: bson.M{
|
||||||
"_id": nil,
|
"_id": nil,
|
||||||
"averageLTV": bson.M{"$avg": "$lifeTimeInDays"},
|
"averageLTV": bson.M{"$avg": "$lifeTimeInDays"},
|
||||||
}}},
|
}}},
|
||||||
@ -316,7 +318,11 @@ func (receiver *HistoryRepository) CalculateCustomerLTV(ctx context.Context, fro
|
|||||||
errors.ErrInternalError,
|
errors.ErrInternalError,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
defer cursor.Close(ctx)
|
defer func() {
|
||||||
|
if err := cursor.Close(ctx); err != nil {
|
||||||
|
receiver.logger.Error("failed to close cursor", zap.Error(err))
|
||||||
|
}
|
||||||
|
}()
|
||||||
var results []struct{ AverageLTV float64 }
|
var results []struct{ AverageLTV float64 }
|
||||||
if err := cursor.All(ctx, &results); err != nil {
|
if err := cursor.All(ctx, &results); err != nil {
|
||||||
receiver.logger.Error("failed to getting result LTV <CalculateCustomerLTV> of <HistoryRepository>",
|
receiver.logger.Error("failed to getting result LTV <CalculateCustomerLTV> of <HistoryRepository>",
|
||||||
|
Loading…
Reference in New Issue
Block a user