treasurer/internal/utils/parse_map.go

45 lines
1.2 KiB
Go

package utils
import (
"encoding/json"
"fmt"
"gitea.pena/PenaSide/treasurer/internal/models"
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
"strconv"
"strings"
)
func MapToCreatePaymentYandexReceipt(data map[string]string) (*models.CreatePayment[yandex.Receipt], error) {
amount, err := strconv.ParseInt(data["amount"], 10, 64)
if err != nil {
return nil, fmt.Errorf("invalid amount: %w", err)
}
var callbackHosts []string
if val, ok := data["callback_host_grpc"]; ok && val != "" {
callbackHosts = strings.Split(val, ",")
}
var requisites yandex.Receipt
if val, ok := data["requisites"]; ok && val != "" {
if err := json.Unmarshal([]byte(val), &requisites); err != nil {
return nil, fmt.Errorf("invalid requisites JSON: %w", err)
}
} else {
return nil, fmt.Errorf("missing requisites field")
}
payment := &models.CreatePayment[yandex.Receipt]{
Type: models.PaymentType(data["type"]),
Currency: data["currency"],
Amount: amount,
CallbackHostGRPC: callbackHosts,
ReturnURL: data["return_url"],
UserID: data["user_id"],
ClientIP: data["client_ip"],
Requisites: requisites,
}
return payment, nil
}