diff --git a/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java b/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java index 87e703b..c000833 100644 --- a/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java +++ b/src/main/java/ru/soune/nocopy/configuration/HandlerConfig.java @@ -25,7 +25,8 @@ public class HandlerConfig { TariffInfoHandler tariffInfoHandler, ReferralHandler referralHandler, ResetPasswordHandler resetPasswordHandler, - DaDataHandler daDataHandler + DaDataHandler daDataHandler, + PaymentHandler paymentHandler ) { Map map = new HashMap<>(); map.put(20001, login); @@ -42,6 +43,7 @@ public class HandlerConfig { map.put(30002, tariffInfoHandler); map.put(30003, referralHandler); map.put(30004, daDataHandler); + map.put(30005, paymentHandler); return map; } diff --git a/src/main/java/ru/soune/nocopy/dto/payment/PaymentRequest.java b/src/main/java/ru/soune/nocopy/dto/payment/PaymentRequest.java new file mode 100644 index 0000000..7755dcf --- /dev/null +++ b/src/main/java/ru/soune/nocopy/dto/payment/PaymentRequest.java @@ -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; +} diff --git a/src/main/java/ru/soune/nocopy/dto/payment/PaymentResponse.java b/src/main/java/ru/soune/nocopy/dto/payment/PaymentResponse.java new file mode 100644 index 0000000..86544e3 --- /dev/null +++ b/src/main/java/ru/soune/nocopy/dto/payment/PaymentResponse.java @@ -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 payments; +} diff --git a/src/main/java/ru/soune/nocopy/entity/payment/Payment.java b/src/main/java/ru/soune/nocopy/entity/payment/Payment.java index 720037c..3646fbc 100644 --- a/src/main/java/ru/soune/nocopy/entity/payment/Payment.java +++ b/src/main/java/ru/soune/nocopy/entity/payment/Payment.java @@ -1,5 +1,6 @@ package ru.soune.nocopy.entity.payment; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; @@ -53,9 +54,11 @@ public class Payment { @ManyToOne @JoinColumn(name = "user_id", nullable = false) + @JsonIgnore private User user; @ManyToOne @JoinColumn(name = "tariff_id") + @JsonIgnore private Tariff tariff; } \ No newline at end of file diff --git a/src/main/java/ru/soune/nocopy/exception/PaymentNotFoundException.java b/src/main/java/ru/soune/nocopy/exception/PaymentNotFoundException.java new file mode 100644 index 0000000..3d7f072 --- /dev/null +++ b/src/main/java/ru/soune/nocopy/exception/PaymentNotFoundException.java @@ -0,0 +1,7 @@ +package ru.soune.nocopy.exception; + +public class PaymentNotFoundException extends RuntimeException { + public PaymentNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/soune/nocopy/handler/PaymentHandler.java b/src/main/java/ru/soune/nocopy/handler/PaymentHandler.java new file mode 100644 index 0000000..7842fff --- /dev/null +++ b/src/main/java/ru/soune/nocopy/handler/PaymentHandler.java @@ -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 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; + } +} diff --git a/src/main/java/ru/soune/nocopy/repository/PaymentRepository.java b/src/main/java/ru/soune/nocopy/repository/PaymentRepository.java index 2873fda..d599c4b 100644 --- a/src/main/java/ru/soune/nocopy/repository/PaymentRepository.java +++ b/src/main/java/ru/soune/nocopy/repository/PaymentRepository.java @@ -4,9 +4,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import ru.soune.nocopy.entity.payment.Payment; +import java.util.List; import java.util.Optional; @Repository public interface PaymentRepository extends JpaRepository { Optional findByPaymentUuid(String paymentUuid); + List findByUserId(Long userId); } diff --git a/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java b/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java index b637512..50f00ab 100644 --- a/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java +++ b/src/main/java/ru/soune/nocopy/service/payment/PaymentService.java @@ -10,13 +10,15 @@ import ru.soune.nocopy.entity.tarif.Tariff; import ru.soune.nocopy.entity.tarif.TariffInfo; import ru.soune.nocopy.entity.tarif.TariffStatus; 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.TariffInfoRepository; import ru.soune.nocopy.repository.TariffRepository; import ru.soune.nocopy.repository.UserRepository; import ru.soune.nocopy.service.tariff.TariffInfoService; import java.time.LocalDateTime; +import java.util.List; import java.util.Map; @Service @@ -28,8 +30,6 @@ public class PaymentService { private final TariffRepository tariffRepository; - private final TariffInfoRepository tariffInfoRepository; - private final TariffInfoService tariffInfoService; @Transactional @@ -88,6 +88,21 @@ public class PaymentService { paymentRepository.save(payment); } + public List 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) { TariffInfo tariffInfo = new TariffInfo(); tariffInfo.setStatus(TariffStatus.ACTIVE);