AcceptPaymentUseCase.java

package com.chronus.application.usecase;

import com.chronus.application.service.EmailNotifier;
import com.chronus.application.service.WhatsAppNotifier;
import com.chronus.domain.entity.Payment;
import com.chronus.domain.exception.InvalidPaymentException;
import com.chronus.domain.repository.PaymentRepository;

/**
 * Input port for accepting a payment.
 */
public class AcceptPaymentUseCase {
    private final PaymentRepository paymentRepository;
    private final EmailNotifier emailNotifier;
    private final WhatsAppNotifier whatsAppNotifier;

    // inyeccion de dependencias por constructor
    public AcceptPaymentUseCase(
            PaymentRepository paymentRepository,
            EmailNotifier emailNotifier,
            WhatsAppNotifier whatsAppNotifier) {
        this.paymentRepository = paymentRepository;
        this.emailNotifier = emailNotifier;
        this.whatsAppNotifier = whatsAppNotifier;
    }

    public void execute(Payment payment) {
        if (paymentRepository.findById(payment.getPaymentId()).isPresent()) {
            throw new InvalidPaymentException("Payment already exists");
        }
        double amount = payment.getAmount().value();
        paymentRepository.save(payment);
        String message = "Pago de " + (int) amount + " aceptado";
        emailNotifier.sendEmail("patient@chronus.com", message);
        whatsAppNotifier.sendWhatsApp("+56900000000", message);
    }
}