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") } auto := false if val, ok := data["save_payment_method"]; ok && val != "" { auto, err = strconv.ParseBool(val) if err != nil { return nil, fmt.Errorf("invalid save_payment_method field: %w", err) } } recurrent := false if val, ok := data["recurrent"]; ok && val != "" { recurrent, err = strconv.ParseBool(val) if err != nil { return nil, fmt.Errorf("invalid recurrent field: %w", err) } } 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, Auto: auto, Recurrent: recurrent, } return payment, nil }