support swish payment account over grpc api

This commit is contained in:
woodser 2025-06-19 16:05:24 -04:00
parent fdf2115f34
commit a75e61314a
No known key found for this signature in database
GPG key ID: 55A10DD48ADEE5EF
5 changed files with 30 additions and 4 deletions

View file

@ -80,7 +80,8 @@ public final class PaymentAccountForm implements PersistablePayload {
VENMO,
PAYSAFE,
WECHAT_PAY,
ALI_PAY;
ALI_PAY,
SWISH;
public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) {
return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name());

View file

@ -755,7 +755,9 @@ public abstract class PaymentAccount implements PersistablePayload {
field.setLabel(Res.get("payment.swift.swiftCode.intermediary"));
break;
case MOBILE_NR:
throw new IllegalArgumentException("Not implemented");
field.setComponent(PaymentAccountFormField.Component.TEXT);
field.setLabel(Res.get("payment.mobile"));
break;
case NATIONAL_ACCOUNT_ID:
throw new IllegalArgumentException("Not implemented");
case PAYID:

View file

@ -17,12 +17,14 @@
package haveno.core.payment;
import haveno.core.api.model.PaymentAccountForm;
import haveno.core.api.model.PaymentAccountFormField;
import haveno.core.locale.TraditionalCurrency;
import haveno.core.locale.TradeCurrency;
import haveno.core.payment.payload.PaymentAccountPayload;
import haveno.core.payment.payload.PaymentMethod;
import haveno.core.payment.payload.SwishAccountPayload;
import haveno.core.payment.validation.SwishValidator;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
@ -33,6 +35,13 @@ public final class SwishAccount extends PaymentAccount {
public static final List<TradeCurrency> SUPPORTED_CURRENCIES = List.of(new TraditionalCurrency("SEK"));
private static final List<PaymentAccountFormField.FieldId> INPUT_FIELD_IDS = List.of(
PaymentAccountFormField.FieldId.ACCOUNT_NAME,
PaymentAccountFormField.FieldId.MOBILE_NR,
PaymentAccountFormField.FieldId.HOLDER_NAME,
PaymentAccountFormField.FieldId.SALT
);
public SwishAccount() {
super(PaymentMethod.SWISH);
setSingleTradeCurrency(SUPPORTED_CURRENCIES.get(0));
@ -50,7 +59,7 @@ public final class SwishAccount extends PaymentAccount {
@Override
public @NonNull List<PaymentAccountFormField.FieldId> getInputFieldIds() {
throw new RuntimeException("Not implemented");
return INPUT_FIELD_IDS;
}
public void setMobileNr(String mobileNr) {
@ -68,4 +77,16 @@ public final class SwishAccount extends PaymentAccount {
public String getHolderName() {
return ((SwishAccountPayload) paymentAccountPayload).getHolderName();
}
@Override
public void validateFormField(PaymentAccountForm form, PaymentAccountFormField.FieldId fieldId, String value) {
switch (fieldId) {
case MOBILE_NR:
processValidationResult(new SwishValidator().validate(value));
break;
default:
super.validateFormField(form, fieldId, value);
break;
}
}
}

View file

@ -371,7 +371,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
VENMO_ID,
PAYSAFE_ID,
WECHAT_PAY_ID,
ALI_PAY_ID);
ALI_PAY_ID,
SWISH_ID);
return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList());
}

View file

@ -1905,6 +1905,7 @@ message PaymentAccountForm {
PAYSAFE = 19;
WECHAT_PAY = 20;
ALI_PAY = 21;
SWISH = 22;
}
FormId id = 1;
repeated PaymentAccountFormField fields = 2;