PaymentController.java

package dev.ianrobrien.fakebank.payments;

import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import dev.ianrobrien.fakebank.api.PaymentsApi;
import dev.ianrobrien.fakebank.model.PaymentRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

/***
 * Handles HTTP requests, can be useful for validating requests and performing
 * common actions such as reading data from headers or adding a request id
 */
@RestController
@AllArgsConstructor
@Slf4j
public class PaymentController implements PaymentsApi {

  private final PaymentService paymentService;

  /***
   * Initiates a payment between two accounts
   * @param paymentRequest the details of the payment request
   * @return OK if the payment is successful
   */
  @SneakyThrows
  @Override
  public ResponseEntity<Void> initiatePayment(PaymentRequest paymentRequest) {
    log.info("Received initiatePayment request");

    paymentService.initiatePayment(
        paymentRequest.getCreditorAccount(),
        paymentRequest.getDebtorAccount(),
        paymentRequest.getInstructedAmount());

    return ResponseEntity.ok().build();
  }
}