45 lines
1.2 KiB
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
|
|
}
|