package com.mfsys.uco.controller; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; import com.mfsys.uco.UCOURI; import com.mfsys.uco.dto.*; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Base64; import java.util.List; @RestController @RequiredArgsConstructor public class UserController { @PostMapping(UCOURI.VIEW_BALANCE) public ViewBalanceResponseModel viewBalance(@RequestBody ViewBalanceRequestModel viewBalanceRequestModel) { ViewBalanceResponseModel viewBalanceResponseModel = new ViewBalanceResponseModel(); viewBalanceResponseModel.setMbmBkmsbalance("100.00"); return viewBalanceResponseModel; } @GetMapping(UCOURI.FETCH_DEPOSITACCOUNTS) public List getDepositAccounts( @RequestParam String porOrgacode, @RequestParam String custcode, @RequestParam String pctcstycode) { List accounts = new ArrayList<>(); DepositAccount account = new DepositAccount(); account.setPorOrgacode(porOrgacode); account.setMbmBkmsnumber("123456789"); account.setPcrCurrdesc("US Dollars"); account.setPcrCurrCode("USD"); account.setPctCstycode(pctcstycode); account.setMbmBkmstitle("Savings Account"); account.setMbmBkmsbalance(new BigDecimal("1000.00")); account.setMbmBkmsopendate("2021-01-01"); account.setAccountType("SAVINGS"); accounts.add(account); return accounts; } @GetMapping(UCOURI.FETCH_ACCOUNT_STATEMENT) public List getAccountStatement( @RequestParam String porOrgacode, @RequestParam String mbmBkmsnumber, @RequestParam String sgtGntrvaluedatefrom, @RequestParam String sgtGntrvaluedateto ) { List transactions = new ArrayList<>(); DepositAccountTransaction transaction = new DepositAccountTransaction(); transaction.setTranID("12345"); transaction.setSgtGntrCreatedAt("2024-03-17"); transaction.setSgtGntrNarration("Sample Transaction"); transaction.setSgtGntrvaluedate("2024-03-17"); transaction.setDeposit("100.00"); transaction.setWithdrawal("0.00"); transaction.setStatus("approved"); transaction.setSgtGntramt("1000.00"); transactions.add(transaction); return transactions; } @GetMapping(UCOURI.FETCH_ACCOUNT_INQUIRY) public AccountInquiryResponse getAccountInquiry( @RequestParam String acntTypeCode, @RequestParam String acntTypeValue) { return new AccountInquiryResponse("Nabeel Dce"); } @PostMapping(UCOURI.GET_TRANSACTION_PIN) public TransactionPinResponseModel submitTransaction(@RequestBody TransactionPinRequestModel transactionPinRequestModel) { TransactionPinResponseModel response = new TransactionPinResponseModel(); response.setOtdTranrequestid(123456); response.setPinCode("1234"); return response; } @PostMapping(UCOURI.SUBMIT_TRANSACTION) public TransactionResponseModel submitTransaction(@RequestBody TransactionRequestModel transactionRequestModel) { String mockTranID = "TRAN1234567890"; return new TransactionResponseModel(mockTranID); } @PostMapping(UCOURI.GENERATE_TRANSACTIONS_REPORT) public String generateReport(@RequestBody TransactionHistoryRequest request) { try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { PdfWriter writer = new PdfWriter(baos); PdfDocument pdf = new PdfDocument(writer); Document document = new Document(pdf); document.add(new Paragraph("Account Transaction History Report")); document.add(new Paragraph("Organization Code: " + request.getPorOrgacode())); document.add(new Paragraph("Account Number: " + request.getMbmBkmsnumber())); document.add(new Paragraph("From: " + request.getSgtGntrvaluedatefrom() + " To: " + request.getSgtGntrvaluedateto())); document.close(); return Base64.getEncoder().encodeToString(baos.toByteArray()); } catch (Exception e) { return "Error generating report"; } } }