diff --git a/internal/models/history.go b/internal/models/history.go index 9fd7f2f..986b68f 100644 --- a/internal/models/history.go +++ b/internal/models/history.go @@ -7,7 +7,7 @@ type History struct { UserID string `json:"userId" bson:"userId"` Comment string `json:"comment" bson:"comment"` Key string `json:"key" bson:"key"` - RawDetails string `json:"rawDetails" bson:"rawDetails"` + RawDetails any `json:"rawDetails" bson:"rawDetails"` Deleted bool `json:"isDeleted" bson:"isDeleted"` CreatedAt time.Time `json:"createdAt" bson:"createdAt"` UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"` diff --git a/internal/service/callback/payment.go b/internal/service/callback/payment.go index 25bf24a..ff03a8c 100644 --- a/internal/service/callback/payment.go +++ b/internal/service/callback/payment.go @@ -2,6 +2,7 @@ package callback import ( "context" + "fmt" "log" "go.uber.org/zap" @@ -82,22 +83,26 @@ func (receiver *PaymentCallbackService) SuccessEvent(ctx context.Context, event return err } - if _, err := receiver.historyService.CreateHistory(ctx, &models.History{ - UserID: account.UserID, - Comment: event.Message, - Key: event.Key, - }); err != nil { - receiver.logger.Error("failed to create history on of ", zap.Error(err)) - } + go func() { + if _, err := receiver.historyService.CreateHistory(ctx, &models.History{ + UserID: account.UserID, + Comment: event.Message, + Key: event.Key, + RawDetails: fmt.Sprintf("%d%s", event.Amount, event.Currency), + }); err != nil { + receiver.logger.Error("failed to create history on of ", zap.Error(err)) + } + }() return nil } func (receiver *PaymentCallbackService) FailureEvent(ctx context.Context, event *models.PaymentEvent) errors.Error { if _, err := receiver.historyService.CreateHistory(ctx, &models.History{ - UserID: event.UserID, - Comment: event.Message, - Key: event.Key, + UserID: event.UserID, + Comment: event.Message, + Key: event.Key, + RawDetails: fmt.Sprintf("%d%s", event.Amount, event.Currency), }); err != nil { receiver.logger.Error("failed to create history on of ", zap.Error(err)) return err diff --git a/internal/service/cart/cart.go b/internal/service/cart/cart.go index 1d9b2ed..7c3af22 100644 --- a/internal/service/cart/cart.go +++ b/internal/service/cart/cart.go @@ -186,13 +186,16 @@ func (receiver *Service) Pay(ctx context.Context, accessToken string, userID str return nil, err } - if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ - Key: models.CustomerHistoryKeyPayCart, - UserID: account.UserID, - Comment: "Успешная оплата корзины", - }); historyErr != nil { - receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) - } + go func(tariffs []models.Tariff) { + if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ + Key: models.CustomerHistoryKeyPayCart, + UserID: account.UserID, + Comment: "Успешная оплата корзины", + RawDetails: utils.TranslateTariffsArrayToMapPair(tariffs), + }); historyErr != nil { + receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) + } + }(tariffs) // TODO: обработать ошибки при отправке сообщений diff --git a/internal/service/wallet/wallet.go b/internal/service/wallet/wallet.go index 19a89f3..e3a8c50 100644 --- a/internal/service/wallet/wallet.go +++ b/internal/service/wallet/wallet.go @@ -2,6 +2,7 @@ package wallet import ( "context" + "fmt" "log" "go.uber.org/zap" @@ -97,19 +98,21 @@ func (receiver *Service) ReplenishAccountWallet(ctx context.Context, request *mo zap.String("Currency", request.Account.Wallet.Currency), zap.Int64("Money", request.Account.Wallet.Money+request.Cash), zap.Int64("Cash", request.Account.Wallet.Cash+cash), - zap.Bool("Is currensy equal internal", request.Currency == models.InternalCurrencyKey), ) return nil, changeErr } - if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ - Key: models.CustomerHistoryKeyReplenish, - UserID: request.Account.UserID, - Comment: "Успешное пополнение средств (Без конвертации валюты)", - }); historyErr != nil { - receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) - } + go func() { + if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ + Key: models.CustomerHistoryKeyReplenish, + UserID: request.Account.UserID, + Comment: "Успешное пополнение средств (Без конвертации валюты)", + RawDetails: fmt.Sprintf("%d%s", cash, models.InternalCurrencyKey), + }); historyErr != nil { + receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) + } + }() return updatedAccount, nil } @@ -136,7 +139,7 @@ func (receiver *Service) ReplenishAccountWallet(ctx context.Context, request *mo receiver.logger.Error("failed to replenish wallet on of ", zap.Error(err), zap.String("Currency", request.Account.Wallet.Currency), - zap.Int64("Money", request.Account.Wallet.Money+request.Cash), + zap.Int64("Money", request.Account.Wallet.Money+money), zap.Int64("Cash", request.Account.Wallet.Cash+cash), zap.Bool("Is currensy equal internal", request.Currency == models.InternalCurrencyKey), ) @@ -144,13 +147,16 @@ func (receiver *Service) ReplenishAccountWallet(ctx context.Context, request *mo return nil, err } - if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ - Key: models.CustomerHistoryKeyReplenish, - UserID: request.Account.UserID, - Comment: "Успешное пополнение средств (C конвертацией валюты)", - }); historyErr != nil { - receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) - } + go func() { + if _, historyErr := receiver.historyService.CreateHistory(ctx, &models.History{ + Key: models.CustomerHistoryKeyReplenish, + UserID: request.Account.UserID, + Comment: "Успешное пополнение средств (C конвертацией валюты)", + RawDetails: fmt.Sprintf("%d%s", cash, request.Currency), + }); historyErr != nil { + receiver.logger.Error("failed to insert history on of ", zap.Error(historyErr)) + } + }() return updatedAccount, nil } diff --git a/internal/utils/tariff.go b/internal/utils/tariff.go index dbf904e..6f6816b 100644 --- a/internal/utils/tariff.go +++ b/internal/utils/tariff.go @@ -23,3 +23,13 @@ func CalculateCartPurchasesAmount(tariffs []models.Tariff) uint64 { return sum } + +func TranslateTariffsArrayToMapPair(tariffs []models.Tariff) map[string]string { + pair := make(map[string]string, len(tariffs)) + + for _, tariff := range tariffs { + pair[tariff.Name] = tariff.ID + } + + return pair +}