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, VENMO,
PAYSAFE, PAYSAFE,
WECHAT_PAY, WECHAT_PAY,
ALI_PAY; ALI_PAY,
SWISH;
public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) { public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) {
return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name()); 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")); field.setLabel(Res.get("payment.swift.swiftCode.intermediary"));
break; break;
case MOBILE_NR: case MOBILE_NR:
throw new IllegalArgumentException("Not implemented"); field.setComponent(PaymentAccountFormField.Component.TEXT);
field.setLabel(Res.get("payment.mobile"));
break;
case NATIONAL_ACCOUNT_ID: case NATIONAL_ACCOUNT_ID:
throw new IllegalArgumentException("Not implemented"); throw new IllegalArgumentException("Not implemented");
case PAYID: case PAYID:

View file

@ -17,12 +17,14 @@
package haveno.core.payment; package haveno.core.payment;
import haveno.core.api.model.PaymentAccountForm;
import haveno.core.api.model.PaymentAccountFormField; import haveno.core.api.model.PaymentAccountFormField;
import haveno.core.locale.TraditionalCurrency; import haveno.core.locale.TraditionalCurrency;
import haveno.core.locale.TradeCurrency; import haveno.core.locale.TradeCurrency;
import haveno.core.payment.payload.PaymentAccountPayload; import haveno.core.payment.payload.PaymentAccountPayload;
import haveno.core.payment.payload.PaymentMethod; import haveno.core.payment.payload.PaymentMethod;
import haveno.core.payment.payload.SwishAccountPayload; import haveno.core.payment.payload.SwishAccountPayload;
import haveno.core.payment.validation.SwishValidator;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NonNull; 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")); 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() { public SwishAccount() {
super(PaymentMethod.SWISH); super(PaymentMethod.SWISH);
setSingleTradeCurrency(SUPPORTED_CURRENCIES.get(0)); setSingleTradeCurrency(SUPPORTED_CURRENCIES.get(0));
@ -50,7 +59,7 @@ public final class SwishAccount extends PaymentAccount {
@Override @Override
public @NonNull List<PaymentAccountFormField.FieldId> getInputFieldIds() { public @NonNull List<PaymentAccountFormField.FieldId> getInputFieldIds() {
throw new RuntimeException("Not implemented"); return INPUT_FIELD_IDS;
} }
public void setMobileNr(String mobileNr) { public void setMobileNr(String mobileNr) {
@ -68,4 +77,16 @@ public final class SwishAccount extends PaymentAccount {
public String getHolderName() { public String getHolderName() {
return ((SwishAccountPayload) paymentAccountPayload).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, VENMO_ID,
PAYSAFE_ID, PAYSAFE_ID,
WECHAT_PAY_ID, WECHAT_PAY_ID,
ALI_PAY_ID); ALI_PAY_ID,
SWISH_ID);
return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList()); return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList());
} }

View file

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