dev add api for payment
Test Workflow / test (push) Successful in 3s

This commit is contained in:
vladp
2026-02-18 18:26:11 +07:00
parent 3d5856d302
commit d7e3afb4dc
8 changed files with 111 additions and 4 deletions
@@ -25,7 +25,8 @@ public class HandlerConfig {
TariffInfoHandler tariffInfoHandler, TariffInfoHandler tariffInfoHandler,
ReferralHandler referralHandler, ReferralHandler referralHandler,
ResetPasswordHandler resetPasswordHandler, ResetPasswordHandler resetPasswordHandler,
DaDataHandler daDataHandler DaDataHandler daDataHandler,
PaymentHandler paymentHandler
) { ) {
Map<Integer, RequestHandler> map = new HashMap<>(); Map<Integer, RequestHandler> map = new HashMap<>();
map.put(20001, login); map.put(20001, login);
@@ -42,6 +43,7 @@ public class HandlerConfig {
map.put(30002, tariffInfoHandler); map.put(30002, tariffInfoHandler);
map.put(30003, referralHandler); map.put(30003, referralHandler);
map.put(30004, daDataHandler); map.put(30004, daDataHandler);
map.put(30005, paymentHandler);
return map; return map;
} }
@@ -0,0 +1,16 @@
package ru.soune.nocopy.dto.payment;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PaymentRequest {
private String email;
private String paymentUuid;
private String action;
}
@@ -0,0 +1,17 @@
package ru.soune.nocopy.dto.payment;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import ru.soune.nocopy.entity.payment.Payment;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PaymentResponse {
List<Payment> payments;
}
@@ -1,5 +1,6 @@
package ru.soune.nocopy.entity.payment; package ru.soune.nocopy.entity.payment;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -53,9 +54,11 @@ public class Payment {
@ManyToOne @ManyToOne
@JoinColumn(name = "user_id", nullable = false) @JoinColumn(name = "user_id", nullable = false)
@JsonIgnore
private User user; private User user;
@ManyToOne @ManyToOne
@JoinColumn(name = "tariff_id") @JoinColumn(name = "tariff_id")
@JsonIgnore
private Tariff tariff; private Tariff tariff;
} }
@@ -0,0 +1,7 @@
package ru.soune.nocopy.exception;
public class PaymentNotFoundException extends RuntimeException {
public PaymentNotFoundException(String message) {
super(message);
}
}
@@ -0,0 +1,45 @@
package ru.soune.nocopy.handler;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import ru.soune.nocopy.dto.BaseRequest;
import ru.soune.nocopy.dto.BaseResponse;
import ru.soune.nocopy.dto.MessageCode;
import ru.soune.nocopy.dto.payment.PaymentRequest;
import ru.soune.nocopy.dto.payment.PaymentResponse;
import ru.soune.nocopy.entity.payment.Payment;
import ru.soune.nocopy.service.payment.PaymentService;
import java.util.List;
@Component
@RequiredArgsConstructor
public class PaymentHandler implements RequestHandler{
private final PaymentService paymentService;
private final ObjectMapper objectMapper;
@Override
public BaseResponse handle(BaseRequest request) throws Exception {
PaymentRequest paymentRequest = objectMapper.convertValue(request.getMessageBody(), PaymentRequest.class);
String action = paymentRequest.getAction();
switch (action) {
case "user_payments":
List<Payment> payments = paymentService.userPayments(paymentRequest.getEmail());
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(), new PaymentResponse(payments));
case "payment_info":
Payment payment = paymentService.paymentInfo(paymentRequest.getPaymentUuid());
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(), new PaymentResponse(List.of(payment)));
}
return null;
}
}
@@ -4,9 +4,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import ru.soune.nocopy.entity.payment.Payment; import ru.soune.nocopy.entity.payment.Payment;
import java.util.List;
import java.util.Optional; import java.util.Optional;
@Repository @Repository
public interface PaymentRepository extends JpaRepository<Payment, String> { public interface PaymentRepository extends JpaRepository<Payment, String> {
Optional<Payment> findByPaymentUuid(String paymentUuid); Optional<Payment> findByPaymentUuid(String paymentUuid);
List<Payment> findByUserId(Long userId);
} }
@@ -10,13 +10,15 @@ import ru.soune.nocopy.entity.tarif.Tariff;
import ru.soune.nocopy.entity.tarif.TariffInfo; import ru.soune.nocopy.entity.tarif.TariffInfo;
import ru.soune.nocopy.entity.tarif.TariffStatus; import ru.soune.nocopy.entity.tarif.TariffStatus;
import ru.soune.nocopy.entity.user.User; import ru.soune.nocopy.entity.user.User;
import ru.soune.nocopy.exception.PaymentNotFoundException;
import ru.soune.nocopy.exception.UserNotFoundException;
import ru.soune.nocopy.repository.PaymentRepository; import ru.soune.nocopy.repository.PaymentRepository;
import ru.soune.nocopy.repository.TariffInfoRepository;
import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.repository.TariffRepository;
import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.repository.UserRepository;
import ru.soune.nocopy.service.tariff.TariffInfoService; import ru.soune.nocopy.service.tariff.TariffInfoService;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@@ -28,8 +30,6 @@ public class PaymentService {
private final TariffRepository tariffRepository; private final TariffRepository tariffRepository;
private final TariffInfoRepository tariffInfoRepository;
private final TariffInfoService tariffInfoService; private final TariffInfoService tariffInfoService;
@Transactional @Transactional
@@ -88,6 +88,21 @@ public class PaymentService {
paymentRepository.save(payment); paymentRepository.save(payment);
} }
public List<Payment> userPayments(String email) {
User user = userRepository.findByEmail(email);
if (user == null) {
throw new UserNotFoundException("User not found");
}
return paymentRepository.findByUserId(user.getId());
}
public Payment paymentInfo(String uuid) {
return paymentRepository.findByPaymentUuid(uuid).orElseThrow(() ->
new PaymentNotFoundException("Payment not found"));
}
private void activateTariffForUser(User user, Tariff tariff) { private void activateTariffForUser(User user, Tariff tariff) {
TariffInfo tariffInfo = new TariffInfo(); TariffInfo tariffInfo = new TariffInfo();
tariffInfo.setStatus(TariffStatus.ACTIVE); tariffInfo.setStatus(TariffStatus.ACTIVE);