From 774370e148c4dc32ede4ec37c0566def2ccb3b39 Mon Sep 17 00:00:00 2001 From: Raja Nabeel Date: Tue, 19 Mar 2024 11:13:27 +0500 Subject: [PATCH] uco independent service added --- .gitignore | 33 +++++ pom.xml | 114 +++++++++++++++ src/main/java/com/mfsys/uco/UCOURI.java | 15 ++ .../java/com/mfsys/uco/UcoApplication.java | 21 +++ .../mfsys/uco/controller/UserController.java | 111 +++++++++++++++ .../mfsys/uco/dto/AccountInquiryResponse.java | 14 ++ .../com/mfsys/uco/dto/DepositAccount.java | 24 ++++ .../uco/dto/DepositAccountTransaction.java | 21 +++ .../uco/dto/TransactionHistoryRequest.java | 18 +++ .../uco/dto/TransactionPinRequestModel.java | 24 ++++ .../uco/dto/TransactionPinResponseModel.java | 15 ++ .../uco/dto/TransactionRequestModel.java | 19 +++ .../uco/dto/TransactionResponseModel.java | 13 ++ .../uco/dto/ViewBalanceRequestModel.java | 15 ++ .../uco/dto/ViewBalanceResponseModel.java | 14 ++ .../LOGSIN-UCO-END-POINT-BS-PERSPECTIVE.txt | 132 ++++++++++++++++++ src/main/resources/application.yaml | 35 +++++ src/main/resources/postman.txt | 33 +++++ 18 files changed, 671 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/mfsys/uco/UCOURI.java create mode 100644 src/main/java/com/mfsys/uco/UcoApplication.java create mode 100644 src/main/java/com/mfsys/uco/controller/UserController.java create mode 100644 src/main/java/com/mfsys/uco/dto/AccountInquiryResponse.java create mode 100644 src/main/java/com/mfsys/uco/dto/DepositAccount.java create mode 100644 src/main/java/com/mfsys/uco/dto/DepositAccountTransaction.java create mode 100644 src/main/java/com/mfsys/uco/dto/TransactionHistoryRequest.java create mode 100644 src/main/java/com/mfsys/uco/dto/TransactionPinRequestModel.java create mode 100644 src/main/java/com/mfsys/uco/dto/TransactionPinResponseModel.java create mode 100644 src/main/java/com/mfsys/uco/dto/TransactionRequestModel.java create mode 100644 src/main/java/com/mfsys/uco/dto/TransactionResponseModel.java create mode 100644 src/main/java/com/mfsys/uco/dto/ViewBalanceRequestModel.java create mode 100644 src/main/java/com/mfsys/uco/dto/ViewBalanceResponseModel.java create mode 100644 src/main/resources/LOGSIN-UCO-END-POINT-BS-PERSPECTIVE.txt create mode 100644 src/main/resources/application.yaml create mode 100644 src/main/resources/postman.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d708b1a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar +*.iml +*.mnv +*.jar.original +maven-wrapper.properties +maven-wrapper.jar +.\mvn + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* +.idea + +target \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1e6ad3c --- /dev/null +++ b/pom.xml @@ -0,0 +1,114 @@ + + +4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.2 + + +uco +0.0.1-SNAPSHOT +war +UCO-BS +UCO-BS + + 17 + 2023.0.0 + UTF-8 + + + + org.springframework.boot + spring-boot-starter-web + + + com.itextpdf + itext7-core + 7.1.9 + pom + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + com.mfsys + common + 3.2.2 + compile + + + javax.xml.bind + jaxb-api + 2.4.0-b180830.0359 + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + org.projectlombok + lombok + true + + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.mysql + mysql-connector-j + runtime + + + jakarta.validation + jakarta.validation-api + 2.0.1 + + + jakarta.persistence + jakarta.persistence-api + 3.1.0 + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/src/main/java/com/mfsys/uco/UCOURI.java b/src/main/java/com/mfsys/uco/UCOURI.java new file mode 100644 index 0000000..5cc99b7 --- /dev/null +++ b/src/main/java/com/mfsys/uco/UCOURI.java @@ -0,0 +1,15 @@ +package com.mfsys.uco; + +public interface UCOURI { + String VIEW_BALANCE = "/user/viewBalance"; + String FETCH_DEPOSITACCOUNTS = "/depositAccounts"; + String FETCH_ACCOUNT_STATEMENT = "/accountStatement"; + String FETCH_ACCOUNT_INQUIRY = "/accountInquiry"; + String GET_TRANSACTION_PIN = "/transactionPin"; + String SUBMIT_TRANSACTION = "/submitTransaction"; + String GENERATE_TRANSACTIONS_REPORT = "/generateReport"; + String REFRESH_TOKEN = "/auth/refresh-token"; + String CHANGE_PASSWORD = "/user/changePassword"; + String RESET_PASSWORD = "/user/resetPassword"; + String GENERATE_INTERNAL_TOKEN = "/auth/generateInternalToken"; +} diff --git a/src/main/java/com/mfsys/uco/UcoApplication.java b/src/main/java/com/mfsys/uco/UcoApplication.java new file mode 100644 index 0000000..723b5a3 --- /dev/null +++ b/src/main/java/com/mfsys/uco/UcoApplication.java @@ -0,0 +1,21 @@ +package com.mfsys.uco; + +import com.mfsys.comm.constant.MicroserviceBaseURI; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication(scanBasePackages = {"com.mfsys"}) +@EnableDiscoveryClient +public class UcoApplication { + public static void main(String[] args) { + SpringApplication.run(UcoApplication.class, args); + } + @Bean + public WebServerFactoryCustomizer webServerFactoryCustomizer() { + return factory -> factory.setContextPath(MicroserviceBaseURI.UCO); + } +} diff --git a/src/main/java/com/mfsys/uco/controller/UserController.java b/src/main/java/com/mfsys/uco/controller/UserController.java new file mode 100644 index 0000000..e40994b --- /dev/null +++ b/src/main/java/com/mfsys/uco/controller/UserController.java @@ -0,0 +1,111 @@ +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(); + String base64EncodedPdf = Base64.getEncoder().encodeToString(baos.toByteArray()); + return base64EncodedPdf; + } catch (Exception e) { + e.printStackTrace(); + return "Error generating report"; + } + } +} diff --git a/src/main/java/com/mfsys/uco/dto/AccountInquiryResponse.java b/src/main/java/com/mfsys/uco/dto/AccountInquiryResponse.java new file mode 100644 index 0000000..f5ed117 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/AccountInquiryResponse.java @@ -0,0 +1,14 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AccountInquiryResponse { + private String mbmBkmstitle; +} diff --git a/src/main/java/com/mfsys/uco/dto/DepositAccount.java b/src/main/java/com/mfsys/uco/dto/DepositAccount.java new file mode 100644 index 0000000..c897466 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/DepositAccount.java @@ -0,0 +1,24 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DepositAccount { + private String porOrgacode; + private String mbmBkmsnumber; + private String pcrCurrdesc; + private String pcrCurrCode; + private String pctCstycode; + private String mbmBkmstitle; + private BigDecimal mbmBkmsbalance; + private String mbmBkmsopendate; + private String AccountType; +} diff --git a/src/main/java/com/mfsys/uco/dto/DepositAccountTransaction.java b/src/main/java/com/mfsys/uco/dto/DepositAccountTransaction.java new file mode 100644 index 0000000..b6c3877 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/DepositAccountTransaction.java @@ -0,0 +1,21 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DepositAccountTransaction{ + private String tranID; + private String sgtGntrCreatedAt; + private String sgtGntrNarration; + private String sgtGntrvaluedate; + private String deposit; + private String withdrawal; + private String status; + private String sgtGntramt; +} diff --git a/src/main/java/com/mfsys/uco/dto/TransactionHistoryRequest.java b/src/main/java/com/mfsys/uco/dto/TransactionHistoryRequest.java new file mode 100644 index 0000000..03b4eec --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/TransactionHistoryRequest.java @@ -0,0 +1,18 @@ +package com.mfsys.uco.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TransactionHistoryRequest { + private String porOrgacode; + private String mbmBkmsnumber; + private String sgtGntrvaluedatefrom; + private String sgtGntrvaluedateto; + private String type; // Expected to be "pdf" +} diff --git a/src/main/java/com/mfsys/uco/dto/TransactionPinRequestModel.java b/src/main/java/com/mfsys/uco/dto/TransactionPinRequestModel.java new file mode 100644 index 0000000..acedf14 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/TransactionPinRequestModel.java @@ -0,0 +1,24 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TransactionPinRequestModel { + private String porOrgacode; + private String pctCstycode; + private String channelCode; + private String cmpCustcode; + private String drMbmBkmsnumber; + private String crMbmBkmsnumber; + private String sgtGntrnarration; + private double sgtGntramtfc; + private String drCurrencyCode; + private String crCurrencyCode; + private String exchnageRate; +} diff --git a/src/main/java/com/mfsys/uco/dto/TransactionPinResponseModel.java b/src/main/java/com/mfsys/uco/dto/TransactionPinResponseModel.java new file mode 100644 index 0000000..1bc7b5d --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/TransactionPinResponseModel.java @@ -0,0 +1,15 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TransactionPinResponseModel { + private double otdTranrequestid; + private String pinCode; +} diff --git a/src/main/java/com/mfsys/uco/dto/TransactionRequestModel.java b/src/main/java/com/mfsys/uco/dto/TransactionRequestModel.java new file mode 100644 index 0000000..8528df3 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/TransactionRequestModel.java @@ -0,0 +1,19 @@ +package com.mfsys.uco.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TransactionRequestModel { + private String porOrgacode; + private String pctCstycode; + private String channelCode; + private String cmpCustcode; + private String obpPincode; + private String otdTrancomment; + private String otdTranrequestid; +} diff --git a/src/main/java/com/mfsys/uco/dto/TransactionResponseModel.java b/src/main/java/com/mfsys/uco/dto/TransactionResponseModel.java new file mode 100644 index 0000000..747a09c --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/TransactionResponseModel.java @@ -0,0 +1,13 @@ +package com.mfsys.uco.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class TransactionResponseModel { + private String tranID; +} diff --git a/src/main/java/com/mfsys/uco/dto/ViewBalanceRequestModel.java b/src/main/java/com/mfsys/uco/dto/ViewBalanceRequestModel.java new file mode 100644 index 0000000..90d6054 --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/ViewBalanceRequestModel.java @@ -0,0 +1,15 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ViewBalanceRequestModel { + String cmpCustcode; + String mbmBkmsNumber; +} diff --git a/src/main/java/com/mfsys/uco/dto/ViewBalanceResponseModel.java b/src/main/java/com/mfsys/uco/dto/ViewBalanceResponseModel.java new file mode 100644 index 0000000..3a74fba --- /dev/null +++ b/src/main/java/com/mfsys/uco/dto/ViewBalanceResponseModel.java @@ -0,0 +1,14 @@ +package com.mfsys.uco.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ViewBalanceResponseModel { + private String mbmBkmsbalance; +} diff --git a/src/main/resources/LOGSIN-UCO-END-POINT-BS-PERSPECTIVE.txt b/src/main/resources/LOGSIN-UCO-END-POINT-BS-PERSPECTIVE.txt new file mode 100644 index 0000000..018726a --- /dev/null +++ b/src/main/resources/LOGSIN-UCO-END-POINT-BS-PERSPECTIVE.txt @@ -0,0 +1,132 @@ + + +POST=> WhiteListed +SignupStep1RequestModel { + final String username; + final String password; + final String email; + final String phone; + final String userRole; (hard code for now) + final String channelCode; + final String porOrgacode; + final boolean isOtpRequired; +} + +response: +{ +200 +} + +OTP verify request model: + +POST=> WhiteListed +SignupVerifyOtpRequestModel { + final String username; + final String email; + final String phone; + final String channelCode; + final String porOrgacode; + String obpPincode; +} + +Response: { +200 +} + +on success + +POST=> WhiteListed +SignupStep2RequestModel { + final String username; + final String email; + final String phone; + final String name; + final String address; + final String identificationType; + final String identificationNumber; + final boolean isKycAdded; + final String kycType; + final String kycDocumentId1; (Either base64 or separate requset ==> Discussion) + final String kycDocumentId2; (Either base64 or separate requset ==> Discussion) + final String userRole; + final String channelCode; + final String porOrgacode; +} + +user gets persisted in the db +request sent to ciihive for CRM and Deposit +custCode acc number saves in UCO database. +Response {200} + +========================================= + + + + +-----------Login REQ RES ----------- +Request: +POST=> +LoginRequestModel { + final String username/email; + final String password; + final String channelCode; + final boolean isOtpRequired; + final String porOrgacode; +} + +Response: +POST=> +class LoginResponseModel { + String cmpFirstname; + String cmpLastname; + String cmpCuststatus; + String plcLocacode; + String cmpCustlastlogin; + String cmpCustcode; + String userRole; + String jwtToken; + boolean isKycVerified; +} + + + +if opt flag is true then an opt will be sent to user email once done then user can enter the otp and below request will be sent to the uco. + +-----------OTP REQ RES ----------- +POST=> +class LoginVerifyOtpRequestModel { + String cmpUserId / email; + String cmpCustpassword; + String channelCode; + String obpPincode; + String porOrgacode; + String String jwtToken; +} + +if otp gets matched then success else forbidden +response { +200 +} + +view balance request: + +user balance wont be shown in the begning but simply ***** this +if user want to see there balance then +POST=> +class ViewBalanceRequestModel { + String plcLocacode; + String cmpCustcode; + String mbmBkmsNumber; + String jwtToken; +} + +response +class ViewBalanceResponseModel { + String mbmBkmsbalance +} + + +======================= + + + diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..cb89dbb --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,35 @@ +server: + port: 8082 + +spring: + application: + name: UCO-SERVICE + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/uco + username: root + password: root + jpa: + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + dialect: org.hibernate.dialect.MySQLDialect + +eureka: + instance: + prefer-ip-address: true + client: + fetch-registry: true + register-with-eureka: true + service-url: + defaultZone: http://localhost:8761/eureka + +#application: +# security: +# jwt: +# secret-key: 404E635266556A586E3272357538782F413F4428472B4B6250645367566B5970 +# expiration: 86400000 +# refresh-token: +# expiration: 604800000 # 7 days \ No newline at end of file diff --git a/src/main/resources/postman.txt b/src/main/resources/postman.txt new file mode 100644 index 0000000..5d1a821 --- /dev/null +++ b/src/main/resources/postman.txt @@ -0,0 +1,33 @@ +POST: +http://localhost:8888/security/auth/user/register + +{ + "firstname":"nabeel", + "lastname":"ahmad", + "email":"nabeelx64@icloud.com", + "password":"ki11", + "role":"ADMIN" +} + +POST: +login + +http://localhost:8888/security/auth/user/authenticate + +{ + "email":"nabeelx64@icloud.com", + "password":"ki11" +} + +PATCH change password: +http://localhost:8888/security/user/changePassword + +{ + "oldPassword":"ki11", + "newPassword":"11223344", + "email":"nabeelx64@icloud.com" +} + +Get: +UCO test: +http://localhost:8888/uco/hello