This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class AddBankTransferRequest {
|
||||
|
||||
@NotBlank(message = "Bank name is required")
|
||||
@Size(min = 2, max = 200, message = "Bank name must be between 2 and 200 characters")
|
||||
private String bankName;
|
||||
|
||||
@NotBlank(message = "BIC is required")
|
||||
@Pattern(regexp = "^[0-9]{9}$", message = "BIC must contain 9 digits")
|
||||
private String bic;
|
||||
|
||||
@Pattern(regexp = "^[0-9]{20}$", message = "Correspondent account must contain 20 digits")
|
||||
private String correspondentAccount;
|
||||
|
||||
@NotBlank(message = "Account number is required")
|
||||
@Pattern(regexp = "^[0-9]{20}$", message = "Account number must contain 20 digits")
|
||||
private String accountNumber;
|
||||
|
||||
@NotBlank(message = "Account holder name is required")
|
||||
@Size(min = 3, max = 200, message = "Account holder name must be between 3 and 200 characters")
|
||||
private String accountHolder;
|
||||
|
||||
@Pattern(regexp = "^[0-9]{10}$|^[0-9]{12}$", message = "INN must contain 10 or 12 digits")
|
||||
private String inn;
|
||||
|
||||
@Pattern(regexp = "^[0-9]{9}$", message = "KPP must contain 9 digits")
|
||||
private String kpp;
|
||||
|
||||
@Builder.Default
|
||||
private boolean saveAsDefault = false;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Pattern;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class AddCardRequest {
|
||||
|
||||
@NotBlank(message = "Card number required")
|
||||
@Pattern(regexp = "^[0-9]{16}$", message = "Card number 16 cipher")
|
||||
private String cardNumber;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PayoutMethodDTO {
|
||||
private Long id;
|
||||
private String type;
|
||||
private String displayName;
|
||||
private String maskedDetails;
|
||||
private boolean isDefault;
|
||||
private boolean isVerified;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PayoutMethodResponse {
|
||||
private Long id;
|
||||
private String type;
|
||||
private String displayName;
|
||||
private String maskedDetails;
|
||||
private boolean isDefault;
|
||||
private boolean isVerified;
|
||||
private LocalDateTime createdAt;
|
||||
private String bankName;
|
||||
private String cardBrand;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PayoutMethodTypeDTO {
|
||||
private String code;
|
||||
private String name;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
|
||||
import jakarta.validation.constraints.DecimalMin;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PayoutRequestDTO {
|
||||
|
||||
@NotNull(message = "Sum of pay is required")
|
||||
@DecimalMin(value = "1000.00", message = "Min sum for pay 1000")
|
||||
private BigDecimal amount;
|
||||
|
||||
@NotNull(message = "Способ выплаты обязателен")
|
||||
private Long payoutMethodId;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package ru.soune.nocopy.dto.payout;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import ru.soune.nocopy.entity.payout.PayoutRequest;
|
||||
import ru.soune.nocopy.entity.payout.PayoutRequestStatus;
|
||||
import ru.soune.nocopy.entity.payout.PayoutType;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
|
||||
public class PayoutResponse {
|
||||
private Long id;
|
||||
private BigDecimal amount;
|
||||
private String formattedAmount;
|
||||
private PayoutRequestStatus status;
|
||||
private PayoutType payoutType;
|
||||
private String payoutMethodDisplay;
|
||||
private LocalDateTime createdAt;
|
||||
private String formattedCreatedAt;
|
||||
private LocalDateTime processedAt;
|
||||
private LocalDateTime completedAt;
|
||||
private String transactionId;
|
||||
private String rejectionReason;
|
||||
private boolean canCancel;
|
||||
|
||||
public static PayoutResponse fromEntity(PayoutRequest request) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
|
||||
|
||||
return PayoutResponse.builder()
|
||||
.id(request.getId())
|
||||
.amount(request.getAmount())
|
||||
.formattedAmount(String.format("%.2f ₽", request.getAmount()))
|
||||
.status(request.getStatus())
|
||||
.payoutType(request.getPayoutType())
|
||||
.payoutMethodDisplay(request.getPayoutMethod() != null ?
|
||||
request.getPayoutMethod().getDisplayName() : null)
|
||||
.createdAt(request.getCreatedAt())
|
||||
.formattedCreatedAt(request.getCreatedAt() != null ?
|
||||
request.getCreatedAt().format(formatter) : null)
|
||||
.processedAt(request.getProcessAt())
|
||||
.completedAt(request.getCompletedAt())
|
||||
.rejectionReason(request.getRejectionReason())
|
||||
.canCancel(request.getStatus() == PayoutRequestStatus.PENDING)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user