From 6f421cbd859263bb04ea854656659f7e7e9f9983 Mon Sep 17 00:00:00 2001
From: Mahesh Maney R <mahesh-maney@users.noreply.github.com>
Date: Mon, 21 Aug 2023 17:14:40 +0530
Subject: [PATCH] payment gateway <ManeyMR>.

---
 pom.xml                                       | 12 +++
 .../controller/UserController.java            | 12 +++
 .../upsmf/userManagement/model/Course.java    | 38 ++++++++
 .../upsmf/userManagement/model/Exam.java      | 48 ++++++++++
 .../upsmf/userManagement/model/Institute.java | 33 +++++++
 .../upsmf/userManagement/model/Payment.java   | 33 +++++++
 .../userManagement/model/ResponseDto.java     | 92 +++++++++++++++++++
 .../userManagement/model/ResponseParams.java  | 50 ++++++++++
 .../services/PaymentService.java              | 10 ++
 .../services/impl/PaymentServiceImpl.java     | 44 +++++++++
 .../java/repository/PaymentRepository.java    | 15 +++
 11 files changed, 387 insertions(+)
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Course.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Exam.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Institute.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Payment.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java
 create mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java
 create mode 100644 src/main/java/repository/PaymentRepository.java

diff --git a/pom.xml b/pom.xml
index ac4e5f4..82857eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,18 @@
 			<version>21.1.2</version>
 		</dependency>
 
+		<dependency>
+			<groupId>jakarta.persistence</groupId>
+			<artifactId>jakarta.persistence-api</artifactId>
+			<version>2.2.3</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.data</groupId>
+			<artifactId>spring-data-jpa</artifactId>
+			<version>2.7.14</version>
+		</dependency>
+
 
 	</dependencies>
 	<build>
diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java
index 5f2a65c..28c7b21 100644
--- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java
+++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java
@@ -2,6 +2,9 @@ package com.tarento.upsmf.userManagement.controller;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.tarento.upsmf.userManagement.handler.UserHandler;
+import com.tarento.upsmf.userManagement.model.Payment;
+import com.tarento.upsmf.userManagement.model.ResponseDto;
+import com.tarento.upsmf.userManagement.services.PaymentService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -13,6 +16,9 @@ import java.net.URISyntaxException;
 @RequestMapping(value = "/api/v1/user")
 public class UserController {
 
+    @Autowired
+    PaymentService paymentService;
+
     @Autowired
     private UserHandler userHandler;
 
@@ -61,4 +67,10 @@ public class UserController {
         return userHandler.login(body);
     }
 
+    @PostMapping(value = "/payment")
+    public ResponseEntity<?> payment(@RequestBody Payment payment){
+        ResponseDto response = paymentService.makePayment(payment);
+        return new ResponseEntity<>(response, response.getResponseCode());
+    }
+
 }
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Course.java b/src/main/java/com/tarento/upsmf/userManagement/model/Course.java
new file mode 100644
index 0000000..aef8d3a
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Course.java
@@ -0,0 +1,38 @@
+package com.tarento.upsmf.userManagement.model;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import lombok.*;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "course")
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+public class Course {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private String courseCode;
+    private String courseName;
+    private String description;
+
+    @ManyToOne
+    @JoinColumn(name = "institute_id")
+    @JsonIgnore
+    private Institute institute;
+
+    @OneToMany(mappedBy = "course")
+    @JsonIgnore
+    private List<Exam> exams;
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java b/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java
new file mode 100644
index 0000000..61caedd
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java
@@ -0,0 +1,48 @@
+package com.tarento.upsmf.userManagement.model;
+
+import lombok.*;
+
+import javax.persistence.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "exam")
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+public class Exam {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "exam_cycle_id")
+    private Long examCycleId;  // Link to the ExamCycle entity
+
+    @Column(name = "exam_date")
+    private LocalDate examDate;
+
+    @Column(name = "created_by")
+    private String createdBy;
+
+    @Column(name = "created_on")
+    private LocalDateTime createdOn;
+
+    @Column(name = "modified_by")
+    private String modifiedBy;
+
+    @Column(name = "modified_on")
+    private LocalDateTime modifiedOn;
+
+    @ManyToOne
+    @JoinColumn(name = "course_id")
+    private Course course;
+
+    @Column(name = "obsolete", nullable = false, columnDefinition = "int default 0")
+    private Integer obsolete = 0;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java b/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java
new file mode 100644
index 0000000..a990fb8
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java
@@ -0,0 +1,33 @@
+package com.tarento.upsmf.userManagement.model;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import lombok.*;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "institute")
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+public class Institute {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private String instituteName;
+    private String instituteCode;
+    private String address;
+
+    @OneToMany(mappedBy = "institute")
+    @JsonIgnore
+    private List<Course> courses;
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java
new file mode 100644
index 0000000..37b8f25
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java
@@ -0,0 +1,33 @@
+package com.tarento.upsmf.userManagement.model;
+
+
+import lombok.*;
+
+import javax.persistence.*;
+import javax.persistence.OneToMany.*;
+import java.util.List;
+
+
+
+@Entity
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString(includeFieldNames = true)
+@Builder
+@Table(name = "payment")
+public class Payment {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer feeId;
+
+    private String fullName;
+
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @JoinColumn(name = "fee_id")
+    private List<Exam> exams;
+
+    private Integer noOfExams;
+    private Integer feeAmount;
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java
new file mode 100644
index 0000000..0cf4f4a
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java
@@ -0,0 +1,92 @@
+package com.tarento.upsmf.userManagement.model;
+
+import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+
+
+public class ResponseDto {
+
+    private String id;
+    private String ver;
+    @Getter
+	private String ts;
+    private ResponseParams params;
+    private HttpStatus responseCode;
+
+    private transient Map<String, Object> response = new HashMap<>();
+
+    public ResponseDto() {
+        this.ver = "v1";
+        this.ts = String.valueOf(new Timestamp(System.currentTimeMillis()));
+        this.params = new ResponseParams();
+    }
+
+    public ResponseDto(String id) {
+        this();
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getVer() {
+        return ver;
+    }
+
+    public void setVer(String ver) {
+        this.ver = ver;
+    }
+
+	public void setTs(String ts) {
+        this.ts = ts;
+    }
+
+    public ResponseParams getParams() {
+        return params;
+    }
+
+    public void setParams(ResponseParams params) {
+        this.params = params;
+    }
+
+    public HttpStatus getResponseCode() {
+        return responseCode;
+    }
+
+    public void setResponseCode(HttpStatus responseCode) {
+        this.responseCode = responseCode;
+    }
+
+    public Map<String, Object> getResult() {
+        return response;
+    }
+
+    public void setResult(Map<String, Object> result) {
+        response = result;
+    }
+
+    public Object get(String key) {
+        return response.get(key);
+    }
+
+    public void put(String key, Object vo) {
+        response.put(key, vo);
+    }
+
+    public void putAll(Map<String, Object> map) {
+        response.putAll(map);
+    }
+
+    public boolean containsKey(String key) {
+        return response.containsKey(key);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java
new file mode 100644
index 0000000..407aedf
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java
@@ -0,0 +1,50 @@
+package com.tarento.upsmf.userManagement.model;
+
+public class ResponseParams {
+    private String resmsgid;
+    private String msgid;
+    private String err;
+    private String status;
+    private String errmsg;
+
+    public String getResmsgid() {
+        return resmsgid;
+    }
+
+    public void setResmsgid(String resmsgid) {
+        this.resmsgid = resmsgid;
+    }
+
+    public String getMsgid() {
+        return msgid;
+    }
+
+    public void setMsgid(String msgid) {
+        this.msgid = msgid;
+    }
+
+    public String getErr() {
+        return err;
+    }
+
+    public void setErr(String err) {
+        this.err = err;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getErrmsg() {
+        return errmsg;
+    }
+
+    public void setErrmsg(String errmsg) {
+        this.errmsg = errmsg;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java
new file mode 100644
index 0000000..d5fbbc3
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java
@@ -0,0 +1,10 @@
+package com.tarento.upsmf.userManagement.services;
+
+import com.tarento.upsmf.userManagement.model.Payment;
+import com.tarento.upsmf.userManagement.model.ResponseDto;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface PaymentService {
+    public ResponseDto makePayment(Payment payment);
+}
\ No newline at end of file
diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java
new file mode 100644
index 0000000..786da75
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java
@@ -0,0 +1,44 @@
+package com.tarento.upsmf.userManagement.services.impl;
+
+import com.tarento.upsmf.userManagement.model.Payment;
+import com.tarento.upsmf.userManagement.model.ResponseDto;
+import com.tarento.upsmf.userManagement.services.PaymentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import repository.PaymentRepository;
+
+@Service
+public class PaymentServiceImpl implements PaymentService {
+
+    @Autowired
+    PaymentRepository paymentRepository;
+    @Override
+    public ResponseDto makePayment(Payment payment) {
+
+        ResponseDto response = new ResponseDto("api.payment.make");
+        // Calculate noOfExams based on the number of selected options
+        int noOfExams = payment.getExams().size();
+        // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation)
+        int examFeeAmount = 100; // Example exam fee amount
+        int feeAmount = calculateFee(noOfExams, examFeeAmount);
+        // Set the calculated values in the FeeManage object
+        payment.setNoOfExams(noOfExams);
+        payment.setFeeAmount(feeAmount);
+        // Save the FeeManage object
+        try {
+            Payment result = paymentRepository.save(payment);
+            response.put("message", "Success");
+            response.put("response", "Created.");
+            response.setResponseCode(HttpStatus.OK);
+        } catch (Exception e) {
+            response.put("message", "Error saving fee details");
+            response.put("response", "Failed to create a message");
+            response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+        return response;
+    }
+    public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) {
+        return noOfExams * examFeeAmount;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/repository/PaymentRepository.java b/src/main/java/repository/PaymentRepository.java
new file mode 100644
index 0000000..dea3008
--- /dev/null
+++ b/src/main/java/repository/PaymentRepository.java
@@ -0,0 +1,15 @@
+package repository;
+
+import com.tarento.upsmf.userManagement.model.Payment;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+
+@Repository
+public interface PaymentRepository extends JpaRepository<Payment,Integer> {
+    @Query(value = "SELECT * FROM fee_details f LEFT JOIN exam_details e ON f.fee_id = e.fee_id WHERE f.fee_id = :id", nativeQuery = true)
+    Optional<Payment> findByIdWithExamsNative(@Param("id") Integer id);
+}
\ No newline at end of file
-- 
GitLab