74 Commits
Author SHA1 Message Date
Lincpay Tech 38979f0f94 transaction master and payment start record new entity with update 2025-12-23 10:38:59 +05:30
Lincpay Tech 46e50acc88 changed client to mid only 2025-12-22 18:29:24 +05:30
himanshu 95e1c8b45d Merge pull request 'feature/resilience4j' (#43) from feature/resilience4j into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/43
2025-12-22 18:13:18 +05:30
Lincpay Tech 6126bc1d81 resolved the conflicts 2025-12-22 18:10:12 +05:30
Lincpay Tech 5d0f043848 improved bill fetching data is getting saved before making call 2025-12-22 17:12:54 +05:30
Lincpay Tech a4842788c1 removed and added lombook for the login,verify,payment,transaction 2025-12-22 10:32:29 +05:30
Mohd_Arham a9d04ee757 Merge pull request 'feature3-userId-added' (#39) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/39
2025-12-19 12:21:33 +05:30
Mohd-Arham e3fdca6f72 updated code mergin 19-12-25 2025-12-19 12:20:27 +05:30
Mohd-Arham 0197f6951f updated code 2025-12-19 12:15:32 +05:30
Mohd_Arham 7fac2cb590 Merge pull request 'feature/id-length-fix' (#38) from feature/id-length-fix into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/38
2025-12-19 12:00:26 +05:30
Lincpay Tech 596f519d1e ready to go code and improved 2025-12-19 11:48:17 +05:30
Lincpay Tech 705af33f1e merge with develop in local now ready to merge in origin 2025-12-18 23:45:47 +05:30
Lincpay Tech ae298a35f6 delete some colums from payment start record 2025-12-18 23:24:38 +05:30
Lincpay Tech f752ed269f improved the logging and corrected payement start record 2025-12-18 21:57:56 +05:30
Lincpay Tech d34b2e1b84 changed trasaction master saving 2025-12-18 10:20:49 +05:30
Lincpay Tech c8bc6e7f12 half commited 2025-12-17 15:30:33 +05:30
Mohd_Arham 67be2acbc4 Merge pull request 'feature3-userId-added' (#36) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/36
2025-12-17 10:59:48 +05:30
Mohd-Arham d3ae7decc8 updated code 2025-12-17 10:58:26 +05:30
Mohd-Arham a41dca5693 code added on updated 2025-12-17 10:56:34 +05:30
Mohd_Arham 499bb1e995 Merge pull request 'feature/Resilience4j' (#35) from feature/Resilience4j into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/35
2025-12-17 10:55:40 +05:30
Lincpay Tech 4b5f81d0d5 added rate limiter and improved payment start entity 2025-12-17 10:49:39 +05:30
Lincpay Tech 0e747ed2a7 updated entity and removed mid from paymentstartRecord 2025-12-16 16:50:48 +05:30
Lincpay Tech f9ba70414b improved json failed response 2025-12-16 10:58:04 +05:30
Mohd_Arham d133fc0c75 Merge pull request 'feature3-userId-added' (#34) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/34
2025-12-16 09:59:54 +05:30
Mohd-Arham a2f9ee8ed7 added code 2025-12-16 09:59:05 +05:30
Mohd-Arham 98ca620bb4 added code 2025-12-16 09:57:29 +05:30
Lincpay Tech 8ae11f86d4 Merge branch 'develop' of https://git.zeptic.in/himanshu/bbps into develop 2025-12-15 12:26:35 +05:30
Lincpay Tech eeb326a221 improved the error handling and updated link paymentstartrecord and transactionmaster 2025-12-15 12:25:40 +05:30
Mohd_Arham efd6a58b62 Merge pull request 'feature3-userId-added' (#33) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/33
2025-12-12 15:11:02 +05:30
Mohd-Arham 78c0e023d9 update code 2025-12-12 15:09:43 +05:30
Mohd-Arham 28cf0aa98d add requestId in complaint 2025-12-12 15:02:05 +05:30
Lincpay Tech b3c507338e handled connection timeout exception 2025-12-11 18:00:36 +05:30
Lincpay Tech 6079ce48a3 updated audit table accroding to merchant panel 2025-12-11 17:35:26 +05:30
Mohd_Arham 67404c2279 Merge pull request 'feature3-userId-added' (#32) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/32
2025-12-11 16:48:55 +05:30
Mohd-Arham 870c37e7f5 updated code 2025-12-11 16:48:00 +05:30
Mohd-Arham 66a7677917 added user entity enabled 2025-12-11 16:45:22 +05:30
himanshu 2da63b2f11 Merge pull request 'audit-update' (#31) from audit-update into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/31
2025-12-11 11:11:49 +05:30
Lincpay Tech 06cb102aed made spome miniorchanges and remove user details 2025-12-11 11:05:38 +05:30
Mohd-Arham 825e309785 added 2025-12-11 10:50:51 +05:30
Lincpay Tech abf89ce7f0 resolved intitate payment problem 2025-12-10 16:07:57 +05:30
Mohd-Arham eb28221b96 update code added 2025-12-10 12:58:20 +05:30
Lincpay Tech 29bce40c65 removed userdetails table 2025-12-10 11:08:03 +05:30
Lincpay Tech e21039090d entity update with audit 2025-12-10 10:03:15 +05:30
Lincpay Tech 699d8572a9 added retry for the send otp 2025-12-09 19:11:42 +05:30
Mohd_Arham bb0aee2b2b Merge pull request 'update swagger configure' (#30) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/30
2025-12-09 18:32:15 +05:30
Mohd-Arham 13bfd34bbd update swagger configure 2025-12-09 18:30:22 +05:30
Lincpay Tech fb3c5d2e96 make some changes 2025-12-09 15:12:26 +05:30
Lincpay Tech 2c4855d59a added seprate auditable in entity 2025-12-09 10:13:23 +05:30
Mohd_Arham 0e56b4de7b Merge pull request 'feature3-userId-added' (#29) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/29
2025-12-09 10:10:07 +05:30
Mohd-Arham 74e4f86d67 update entity name 2025-12-09 10:08:51 +05:30
Mohd-Arham 896ff1722a updated code entity name 2025-12-08 18:41:12 +05:30
Mohd-Arham 6ea6dc4775 entity add bbps 2025-12-08 17:02:51 +05:30
Lincpay Tech 1cfe331ff1 improved the customerparamrequest to customerparam 2025-12-08 17:00:25 +05:30
Lincpay Tech c25382bd5c added txnid responsein web 2025-12-08 10:43:13 +05:30
Mohd-Arham fe4f653065 add rest client 2025-12-08 10:08:52 +05:30
Mohd-Arham 597f6b10d4 add rest client 2025-12-08 10:07:21 +05:30
Mohd-Arham 7e7b8ae9cf update complaint 2025-12-08 10:05:29 +05:30
Lincpay Tech 1e38efe3c0 imroved webbased datasaved 2025-12-05 11:55:49 +05:30
Mohd_Arham 66fceb95a1 Merge pull request 'feature3-userId-added' (#28) from feature3-userId-added into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/28
2025-12-04 18:42:15 +05:30
Mohd-Arham a28f70d2a9 resolved conflict 2025-12-04 18:41:00 +05:30
Mohd-Arham f15e967e58 04-12-25 2025-12-04 18:37:44 +05:30
Lincpay Tech 693b0b7801 fix untrancked file 2025-12-04 12:18:32 +05:30
Mohd-Arham 812aa3c2ff add validation in request 2025-12-04 12:17:14 +05:30
Lincpay Tech 1ab2768226 Merge remote-tracking branch 'origin/develop' into feature/callbackpaymentintent 2025-12-04 12:03:06 +05:30
Lincpay Tech 08b0689209 shift some constant from bbpsconstant to application properties 2025-12-04 11:54:58 +05:30
Lincpay Tech aea3d0d3a8 imroved the logic of intentpaymentapi 2025-12-04 10:44:25 +05:30
himanshu c0dbf531bd Merge pull request 'open callback with authentication' (#27) from feature/callbackpaymentintent into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/27
2025-12-03 18:17:03 +05:30
Lincpay Tech d88c624d50 open callback with authentication 2025-12-03 18:14:12 +05:30
Mohd-Arham 28708d1d74 updated payment code 2025-12-03 18:13:01 +05:30
Mohd-Arham 003dd9325c user id addded in this code 2025-12-03 17:40:04 +05:30
himanshu 9a9a07875c Merge pull request 'feature/callbackpaymentintent' (#25) from feature/callbackpaymentintent into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/25
2025-12-03 17:36:13 +05:30
Lincpay Tech a210c86bcd Merge branch 'develop' into feature/callbackpaymentintent 2025-12-03 17:31:08 +05:30
Lincpay Tech 78c38e6d74 added pollbackpayment status 2025-12-03 17:29:10 +05:30
Mohd_Arham 58d450b22e Merge pull request 'feature3-shared' (#24) from feature3-shared into develop
Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/24
2025-12-03 11:49:40 +05:30
155 changed files with 3369 additions and 2310 deletions
View File
+14
View File
@@ -45,6 +45,12 @@
</exclusions>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot3</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
@@ -159,6 +165,12 @@
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.1</version>
</dependency>
<!-- Test -->
<dependency>
@@ -174,6 +186,8 @@
<optional>true</optional>
</dependency>
</dependencies>
<build>
@@ -1,42 +0,0 @@
package com.billpaymentservice.bbps.audit;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import jakarta.persistence.Column;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
import lombok.Data;
@Data
@MappedSuperclass
public abstract class Auditable<U> implements Serializable {
private static final long serialVersionUID = 1L;
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date_time")
protected Date createDateTime;
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_date_time")
protected Date updatedDateTime;
@LastModifiedBy
@Column(name = "updated_by")
protected U updatedBy;
@CreatedBy
@Column(name = "create_by")
protected U createdBy;
@Column(name = "is_deleted")
protected boolean isDeleted = false;
}
@@ -11,9 +11,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.billpaymentservice.bbps.entites.UserEntity;
import com.billpaymentservice.bbps.entites.UsersDetails;
import com.billpaymentservice.bbps.repository.UserRepository;
import com.billpaymentservice.bbps.repository.UsersDetailsRepository;
@Service
public class CustomUserDetailsService implements UserDetailsService {
@@ -2,13 +2,14 @@ package com.billpaymentservice.bbps.config;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestClient;
@Configuration
@@ -16,24 +17,31 @@ public class RestClientConfig {
@Bean
public RestClient restClient() throws Exception {
// ✅ Create trust all SSL context
SSLContext sslContext = SSLContext.getInstance("TLS");
// Create Trust-All SSL context
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// ✅ Create RestClient with custom SSL context
// Use JDK's Simple HTTP client with custom SSL context
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);
// Apply SSL context to HttpsURLConnection globally
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
return RestClient.builder()
.requestFactory(new HttpComponentsClientHttpRequestFactory())
.requestFactory(requestFactory)
.build();
}
}
@@ -2,6 +2,7 @@ package com.billpaymentservice.bbps.config;
import java.util.Arrays;
import com.billpaymentservice.bbps.controller.AgentController;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
@@ -18,13 +19,16 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@EnableWebSecurity
public class SecurityConfig {
private final AgentController agentController;
private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
private final JwtFilter jwtFilter;
public SecurityConfig(JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint, JwtFilter jwtFilter) {
public SecurityConfig(JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint, JwtFilter jwtFilter, AgentController agentController) {
this.jwtAuthenticationEntryPoint = jwtAuthenticationEntryPoint;
this.jwtFilter = jwtFilter;
this.agentController = agentController;
}
@Bean
@@ -39,7 +43,9 @@ public class SecurityConfig {
"/swagger-resources/**",
"/webjars/**",
"/error")
.permitAll().requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.permitAll()
.requestMatchers("/payment/callback/startPayment","/complaints/checkTicketStatus")
.permitAll().requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest().authenticated())
.exceptionHandling(ex -> ex.authenticationEntryPoint(jwtAuthenticationEntryPoint))
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
@@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.GeneralResp;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest;
import com.billpaymentservice.bbps.dto.request.BillFetchByClientIdRequest;
@@ -19,6 +18,14 @@ import com.billpaymentservice.bbps.dto.request.FetchBillValidatestRequest;
import com.billpaymentservice.bbps.dto.response.BillDataResponse;
import com.billpaymentservice.bbps.dto.response.FetchBillValidateResponse;
import com.billpaymentservice.bbps.service.AgentService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@RestController
@RequestMapping("/agent")
@@ -31,20 +38,22 @@ public class AgentController {
this.agentService = agentService;
}
/**
* Fetches bill details from external BBPS service
*/
@PostMapping(value = "/requestBillFetch", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/requestBillFetch")
@Operation(summary = "Initiate bill fetch request", description = "This API initiates a bill fetch request for the given customer/biller details.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill fetch request initiated successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> requestBillFetch(@Validated @RequestBody FetchBillRequest fetchBillRequest) {
ResponseModel response = agentService.initiateBillFetch(fetchBillRequest);
return ResponseEntity.ok(response);
}
/**
* Fetches bill details from external BBPS service
*/
@PostMapping(value = "/fetchBillById", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchBillById")
@Operation(summary = "Fetch bill details by bill ID", description = "This API retrieves bill details from the BBPS system using the provided bill ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill details fetched successfully by bill ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchBillById(
@Validated @RequestBody BillFetchByBillIdRequest billFetchByBillIdRequest) {
@@ -52,10 +61,11 @@ public class AgentController {
return ResponseEntity.ok(response);
}
/**
* Fetches bill details validate from external BBPS service
*/
@PostMapping(value = "/requestBillValidate", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/requestBillValidate")
@Operation(summary = "Initiate bill validation request", description = "This API validates customer input and bill details .")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill validation initiated successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> requestBillValidate(
@Validated @RequestBody FetchBillValidatestRequest fetchBillValidateRequest) {
@@ -63,10 +73,11 @@ public class AgentController {
return ResponseEntity.ok(response);
}
/**
* Fetches bill details by bill Id from external BBPS service
*/
@PostMapping(value = "/requestBillValidateByBillId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/requestBillValidateByBillId")
@Operation(summary = "Bill validate by details by bill ID", description = "This API retrieves bill details from BBPS using the provided bill ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill details fetched successfully by bill ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> requestBillByBillId(
@Validated @RequestBody BillFetchByBillIdRequest billRequest) {
@@ -74,32 +85,49 @@ public class AgentController {
return ResponseEntity.ok(response);
}
@PostMapping(value = "/fetchBillByClientReqId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchBillByClientReqId")
@Operation(summary = "Fetch bill details by client request ID", description = "This API fetches bill details using the client-generated request ID (clientReqId).")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill details fetched successfully using client request ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchBillByClientReqId(
@Validated @RequestBody BillFetchByClientIdRequest billFetchByClientIdRequest) {
@Validated @RequestBody BillFetchByClientIdRequest billFetchByClientIdRequest) {
ResponseModel response = agentService.fetchBillByClientReqId(billFetchByClientIdRequest);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/fetchBillValidateByClientReqId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchBillValidateByClientReqId")
@Operation(summary = "Fetch bill details by client request ID", description = "This API retrieves bill details using the client's request ID (clientReqId).")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Bill details fetched successfully using client request ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchBillValidateByClientReqId(
@Validated @RequestBody BillValidateByClientIdRequest billValidateByClientIdRequest) {
@Validated @RequestBody BillValidateByClientIdRequest billValidateByClientIdRequest) {
ResponseModel response = agentService.fetchBillValidateByClientReqId(billValidateByClientIdRequest);
return ResponseEntity.ok(response);
}
@PostMapping(value="/callback/billFetch", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> handleBillFetchCallback(@RequestBody BillDataResponse billDataResponse) {
ResponseModel genralResp=agentService.processBillFetchCallback(billDataResponse);
@PostMapping(value = "/callback/billFetch")
@Operation(summary = "Handle bill fetch callback", description = "This callback API is invoked by BBPS/Biller to send bill fetch response.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Callback received and processed successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> handleBillFetchCallback(@RequestBody BillDataResponse billDataResponse) {
ResponseModel genralResp = agentService.processBillFetchCallback(billDataResponse);
// Return a response indicating successful receipt
return ResponseEntity.ok(genralResp);
}
@PostMapping(value="/callback/billValidate", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> handleBillValidateCallback(@RequestBody FetchBillValidateResponse fetchBillValidateResponse) {
ResponseModel genralResp=agentService.processBillValidateCallback(fetchBillValidateResponse);
@PostMapping(value = "/callback/billValidate")
@Operation(summary = "Handle bill validate callback", description = "This callback API is triggered by BBPS/Biller to send bill validation response.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Callback received and processed successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> handleBillValidateCallback(
@RequestBody FetchBillValidateResponse fetchBillValidateResponse) {
ResponseModel genralResp = agentService.processBillValidateCallback(fetchBillValidateResponse);
// Return a response indicating successful receipt
return ResponseEntity.ok(genralResp);
}
@@ -10,14 +10,18 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.auth.AuthResponse;
import com.billpaymentservice.bbps.dto.response.AuthResponses;
import com.billpaymentservice.bbps.dto.auth.LoginRequest;
import com.billpaymentservice.bbps.dto.auth.OtpSendResponse;
import com.billpaymentservice.bbps.dto.auth.RegisterRequest;
import com.billpaymentservice.bbps.dto.auth.VerifyOtpRequest;
import com.billpaymentservice.bbps.service.AuthService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.extern.slf4j.Slf4j;
@RestController
@@ -32,25 +36,42 @@ public class AuthController {
this.authService = authService;
}
@PostMapping(value = "/sendOtp", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/sendOtp")
@Operation(summary = "Send OTP to user", description = "This API sends an OTP to the user's registered mobile number for authentication.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "OTP sent successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> sendOtp(@Validated @RequestBody LoginRequest request) {
log.info("Received sendOtp request for mobile: {}", request.getMobile());
return ResponseEntity.ok(authService.sendOtp(request));
}
@PostMapping(value = "/verifyOtp", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/verifyOtp")
@Operation(summary = "Verify OTP", description = "This API verifies the OTP entered by the user and validates the authentication flow.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "OTP verified successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> verifyOtp(@Validated @RequestBody VerifyOtpRequest request) {
return ResponseEntity.ok(authService.verifyOtp(request));
}
@PostMapping(value = "/register", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/register")
@Operation(summary = "Register a new user", description = "This API registers a new user into the system by validating the provided registration details.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "User registered successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> register(@Validated @RequestBody RegisterRequest request) {
return ResponseEntity.ok(authService.registerUser(request));
}
@PostMapping("/loginWithoutDecryption")
@Operation(summary = "Login without decryption (Testing Only)", description = "This API is used only for testing purposes. It authenticates the user without decrypting the credentials, typically used when token generation fails or decryption flow is not enabled.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "User authenticated successfully (Testing Only)", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> login(@RequestBody LoginRequest loginRequest) {
return ResponseEntity.ok(authService.authenticateUser(loginRequest));
@@ -16,10 +16,16 @@ import com.billpaymentservice.bbps.dto.request.AllMasterOptionsRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO;
import com.billpaymentservice.bbps.dto.request.GetTicketLatestStausRequest;
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsRequest;
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsTicketsRequest;
import com.billpaymentservice.bbps.service.ComplainService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@RestController
@RequestMapping("/complaints")
@@ -31,19 +37,26 @@ public class ComplainController {
private final ComplainService complainService;
// ✅ Constructor name fixed and variable consistent
public ComplainController(ComplainService complainService) {
this.complainService = complainService;
}
@PostMapping(value = "/addComplainTicket", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/addComplainTicket")
@Operation(summary = "Add complaint ticket", description = "This API creates a new complaint ticket based on the provided request details.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Complaint ticket created successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> addComplain(@Validated @RequestBody ComplaintRequestDTO complainRequestDTO) {
ResponseModel response = complainService.addComplain(complainRequestDTO);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/checkTicketStatus", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/checkTicketStatus")
@Operation(summary = "Fetch latest complaint ticket status", description = "This API retrieves the latest status of a complaint ticket based on the provided ticket ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Complaint ticket status fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getComplaintStatus(
@Validated @RequestBody GetTicketLatestStausRequest request) {
log.info("Received complaint status request for complaintId: {}", request.getTicketId());
@@ -51,7 +64,11 @@ public class ComplainController {
return ResponseEntity.ok(response);
}
@PostMapping(value = "/viewComplainsTicketHistory", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/viewComplainsTicketHistory")
@Operation(summary = "View complaint ticket history", description = "This API retrieves the full complaint history for the provided ticket ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Complaint ticket history fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> viewComplaintHistory(@Validated @RequestBody ComplainStatusRequest request) {
log.info("Received complaint View Complaint History request for ticketId: {}", request.getTicketId());
ResponseModel response = complainService.viewComplaintHistory(request);
@@ -59,6 +76,10 @@ public class ComplainController {
}
@PostMapping("/viewTicketById")
@Operation(summary = "View complaint details by ID", description = "This API retrieves the complaint details for the given complaint ticket ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Complaint details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> viewComplaintById(@Validated @RequestBody ComplainStatusRequest request) {
log.info("Received complaint View Complaint By ID request for complaintId: {}", request.getTicketId());
ResponseModel response = complainService.viewComplaintById(request);
@@ -66,19 +87,33 @@ public class ComplainController {
}
@PostMapping("/allMasterOptions")
@Operation(summary = "Fetch all master options by ID", description = "This API retrieves all master option values based on the provided ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Master options fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getAllStatuses(@Validated @RequestBody AllMasterOptionsRequest request) {
return ResponseEntity.ok(complainService.getAllActiveStatuses(request));
}
@PostMapping("/viewAllComplaints")
public ResponseEntity<ResponseModel> viewAllComplaints(@RequestBody ViewAllComplaintsTicketsRequest request) {
@Operation(summary = "View all complaints by status type", description = "This API retrieves all complaints filtered by the provided status type.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "All complaints fetched successfully based on status type", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> viewAllComplaints(
@Validated @RequestBody ViewAllComplaintsTicketsRequest request) {
log.info("Received request complaint View All Complaints for Status Type={}", request.getStatusType());
ResponseModel response = complainService.ViewAllComplaints(request);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/viewAllComplaintsByUserId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> viewAllComplaintsByUserId(@Validated @RequestBody AllMasterOptionsRequest request) {
@PostMapping(value = "/viewAllComplaintsByUserId")
@Operation(summary = "View all complaints by user ID", description = "This API retrieves all complaint tickets associated with the provided user ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "All complaints fetched successfully by user ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> viewAllComplaintsByUserId(
@Validated @RequestBody AllMasterOptionsRequest request) {
ResponseModel response = complainService.viewAllComplaintsByUserId(request);
return ResponseEntity.ok(response);
}
@@ -16,13 +16,18 @@ import com.billpaymentservice.bbps.dto.request.BillerDetailRequest;
import com.billpaymentservice.bbps.dto.request.ContactMasterRequest;
import com.billpaymentservice.bbps.dto.request.CustomParamRequest;
import com.billpaymentservice.bbps.dto.request.DispositionRequest;
import com.billpaymentservice.bbps.dto.request.LoginRequest;
import com.billpaymentservice.bbps.dto.request.MasterCategoryRequest;
import com.billpaymentservice.bbps.dto.request.MasterRequest;
import com.billpaymentservice.bbps.dto.request.PlanRequest;
import com.billpaymentservice.bbps.dto.response.AuthResponses;
import com.billpaymentservice.bbps.service.MasterDataService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
@RequestMapping("/masterData")
@@ -39,8 +44,12 @@ public class MasterDataController {
this.masterDataService = masterDataService;
}
/** Get Details of the biller by billId **/
@PostMapping(value = "/getBillerDetails", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getBillerDetails")
@Operation(summary = "Fetch biller details", description = "Get biller details by biller id and returns the result")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Biller details fetch successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getBillerDetails(@Valid @RequestBody BillerDetailRequest billerDetailRequest) {
log.info("Received biller details request for billerId: {}", billerDetailRequest.getBillerId());
@@ -48,32 +57,41 @@ public class MasterDataController {
return ResponseEntity.ok(masterDataService.getBillerByBillerId(billerDetailRequest));
}
/** Get Master Contact **/
@PostMapping(value = "/getContactMasterResponse", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getContactMasterResponse")
@Operation(summary = "Fetch contact master data", description = "Fetch contact master and returns the response")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Fetch contact master response fetch successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getContactMaster(
@Validated @RequestBody ContactMasterRequest contactMasterRequest) {
return ResponseEntity.ok(masterDataService.getContactMaster(contactMasterRequest));
}
@PostMapping(value = "/getDispostionDetail", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getDispostionDetail")
@Operation(summary = "Fetch disposition details", description = "Fetch disposition details for a given ticket and return the response")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Disposition details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
public ResponseEntity<ResponseModel> getDispostionDetail(
@Validated @RequestBody DispositionRequest dispositionDetailRequest) {
return ResponseEntity.ok(masterDataService.getDispositionDetails(dispositionDetailRequest));
}
@PostMapping(value = "/getTicketDispositions", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getTicketDispositions")
@Operation(summary = "Fetch ticket disposition details", description = "Fetch ticket disposition details for a given ticket and return the response")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Ticket disposition details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
public ResponseEntity<ResponseModel> getTicketDispositions(
@Validated @RequestBody DispositionRequest dispositionDetailRequest) {
return ResponseEntity.ok(masterDataService.getTicketDispositions(dispositionDetailRequest));
}
/**
* Get CustomerParam by billerId.The parameter is different from the data we are
* getting in the billerDetail
**/
@PostMapping(value = "/getCustomerParamDetails", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getCustomerParamDetails")
@Operation(summary = "Fetch customer parameter details by biller ID", description = "API fetches the customer parameter configuration based on the provided biller ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Customer parameter details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getCustomerParamDetails(
@Validated @RequestBody CustomParamRequest customerParamRequest) {
@@ -82,68 +100,68 @@ public class MasterDataController {
return ResponseEntity.ok(masterDataService.getCustomerParamByBillerId(customerParamRequest));
}
/**
* Get All Master Data .The parameter is different from the data we are getting
* Made By Arham in the MasterRequest
**/
@PostMapping("/getAllMastersData")
@Operation(summary = "Fetch all master data", description = "API retrieves all the master data based on the provided .")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Master data fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseModel fetchMasterData(@Validated @RequestBody MasterRequest masterRequest) {
return masterDataService.getMasterData(masterRequest);
}
/**
* POST Master CategoryResponseList Wise API Fetch CategoryResponseList Wise
* from BBPS URL Made By Arham
**/
@PostMapping(value = "/getMasterCategoryWise", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/getMasterCategoryWise")
@Operation(summary = "Fetch master data category-wise", description = "API retrieves master data based on the selected category.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Category-wise master data fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getMasterDataCategoryWise(
@Valid @RequestBody MasterCategoryRequest masterRequest) {
return ResponseEntity.ok(masterDataService.fetchMasterDataCategoryWise(masterRequest));
}
/**
* POST Customer Param Groups API Fetch CategoryResponseList Wise from BBPS URL
* Made By Arham
**/
@PostMapping(value = "/customerParamGroupsByBillerId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/customerParamGroupsByBillerId")
@Operation(summary = "Fetch customer parameter groups by biller ID", description = "API retrieves all customer parameter groups configured for the specified biller ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Customer parameter groups fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getCustomerParamGroup(
@Validated @RequestBody BillerDetailRequest requestModel) {
return ResponseEntity.ok(masterDataService.fetchCustomerParamGroup(requestModel));
}
/**
* POST Fetch All AMount Options By Biller Id API Fetch CategoryResponseList
* Wise from BBPS URL Made By Arham
**/
@PostMapping(value = "/fetchAmountOptionsByBillerId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchAmountOptionsByBillerId")
@Operation(summary = "Fetch all master amount options by biller ID", description = "API retrieves all the master amount options configured for the given biller ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Master amount options fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchAllMasterAmountOptionsByBillerId(
@Validated @RequestBody BillerDetailRequest requestModel) {
return ResponseEntity.ok(masterDataService.fetchAllMasterAmountOption(requestModel));
}
/**
* POST Fetch All AMount Options By Biller Id API Fetch CategoryResponseList
* Wise from BBPS URL Made By Arham
**/
@PostMapping(value = "/fetchAllPlanCategoriesByBillerId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchAllPlanCategoriesByBillerId")
@Operation(summary = "Fetch plan categories by biller ID", description = "API retrieves all plan categories available for the specified biller ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Plan categories fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchPlanCategories(@Validated @RequestBody BillerDetailRequest requestModel) {
return ResponseEntity.ok(masterDataService.fetchPlanCategorie(requestModel));
}
/**
* POST Fetch Initiating Channel API Fetch CategoryResponseList Wise from BBPS
* URL Made By Arham
**/
@PostMapping(value = "/initiatingChannel", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/initiatingChannel")
@Operation(summary = "Fetch initiating channel details by biller ID", description = "API retrieves initiating channel information configured for the specified biller ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Initiating channel details fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> initiatingChannel(@Validated @RequestBody BillerDetailRequest requestModel) {
return ResponseEntity.ok(masterDataService.fetchInitiatingChannel(requestModel));
}
/**
* POST Fetch All AMount Options By Biller Id API Fetch CategoryResponseList
* Wise from BBPS Made By Arham URL
**/
@PostMapping(value = "/fetchPlanByCategoryName", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/fetchPlanByCategoryName")
@Operation(summary = "Fetch plans by category name", description = "API retrieves all available plans for the specified category name.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Plans fetched successfully based on category name", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> fetchPlanByCategory(@Validated @RequestBody PlanRequest requestModel) {
return ResponseEntity.ok(masterDataService.fetchPlanByCategories(requestModel));
}
@@ -12,10 +12,16 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.BillPaymentRequest;
import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest;
import com.billpaymentservice.bbps.dto.request.TrasactionStatusByClientReqIdRequest;
import com.billpaymentservice.bbps.dto.response.TransactionStatusResponse;
import com.billpaymentservice.bbps.service.PaymentService;
import com.billpaymentservice.bbps.service.PaymentStartService;
import com.billpaymentservice.bbps.dto.request.PaymentStartUserRequest;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@RestController
@RequestMapping("/agent/payment")
@@ -28,21 +34,27 @@ public class PaymentController {
private final PaymentService paymentService;
private final PaymentStartService paymentStartService;
// New constructor used by Spring to inject both services
public PaymentController(PaymentService paymentService, PaymentStartService paymentStartService) {
this.paymentService = paymentService;
this.paymentStartService = paymentStartService;
}
@PostMapping(value = "/intiatePayment", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/intiatePayment")
@Operation(summary = "Initiate payment request", description = "This API initiates the payment process for the provided bill payment request.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Payment initiated successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> requestBillFetch(
@Validated @RequestBody BillPaymentRequest billPaymentRequest) {
@RequestBody BillPaymentRequest billPaymentRequest) {
ResponseModel response = paymentService.initiatePayment(billPaymentRequest);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/checkTransactionStatus", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/checkTransactionStatus")
@Operation(summary = "Check transaction status", description = "This API checks the current status of a bill payment transaction using transactionId or clientReqId.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Transaction status fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> checkTransactionStatus(
@Validated @RequestBody TransactionStatusRequest transactionStatusRequest) {
@@ -50,7 +62,11 @@ public class PaymentController {
return ResponseEntity.ok(response);
}
@PostMapping(value = "/checkTransactionStatusByClientReqId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/checkTransactionStatusByClientReqId")
@Operation(summary = "Check transaction status by client request ID", description = "This API checks the payment transaction status using the client-generated request ID (clientReqId).")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Transaction status fetched successfully using clientReqId", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> checkTransactionStatusByClientReqId(
@Validated @RequestBody TrasactionStatusByClientReqIdRequest transactionStatusRequest) {
@@ -58,8 +74,4 @@ public class PaymentController {
return ResponseEntity.ok(response);
}
}
@@ -0,0 +1,42 @@
package com.billpaymentservice.bbps.controller;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.PollBackRequest;
import com.billpaymentservice.bbps.service.PollBackService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@RequestMapping("/payment")
@RestController
public class PaymentPollBackController {
private final PollBackService pollBackService;
public PaymentPollBackController(PollBackService pollBackService) {
this.pollBackService = pollBackService;
}
@PostMapping(value = "/pollback")
@Operation(summary = "Process poll-back request", description = "This API handles the poll-back request from biller.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Poll Back processed successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> startIntentPayment(@Validated @RequestBody PollBackRequest pollBackRequest) {
ResponseModel response = pollBackService.managePollBack(pollBackRequest);
return ResponseEntity.ok(response);
}
}
@@ -12,9 +12,17 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.PaymentStartUserRequest;
import com.billpaymentservice.bbps.dto.request.CallbackRequest;
import com.billpaymentservice.bbps.dto.request.PaymentStartUserRequest;
import com.billpaymentservice.bbps.service.PaymentStartService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
@RestController
@RequestMapping("/payment")
@@ -25,14 +33,23 @@ public class PaymentStartController {
this.paymentStartService = paymentStartService;
}
@PostMapping(value = "/startWebPayment", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> startWebPayment(@Validated @RequestBody PaymentStartUserRequest paymentStartUserRequest) {
@PostMapping(value = "/startWebPayment")
@Operation(summary = "Start web payment process", description = "This API initiates the payment process for a web-based transaction using user and bill details.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Payment process started successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> startWebPayment(
@Validated @RequestBody PaymentStartUserRequest paymentStartUserRequest) {
ResponseModel response = paymentStartService.startWebPayment(paymentStartUserRequest);
return ResponseEntity.ok(response);
}
ResponseModel response = paymentStartService.startWebPayment(paymentStartUserRequest);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/callback/startPayment", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/callback/startPayment")
@Operation(summary = "Handle start payment callback", description = "This callback API is invoked by the payment gateway/BBPS to confirm the payment initiation status.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Start Payment Callback handled successfully", content = @Content(mediaType = "application/json")) })
@ApiDocCommonResponses
public ResponseEntity<Map<String, String>> handleCallback(@RequestBody CallbackRequest callbackRequest) {
ResponseModel resp = paymentStartService.handleStartCallback(callbackRequest);
Map<String, String> result = new HashMap<>();
@@ -41,13 +58,16 @@ public class PaymentStartController {
return ResponseEntity.ok(result);
}
@PostMapping(value = "/startIntentPayment", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> startIntentPayment(@Validated @RequestBody PaymentStartUserRequest paymentStartUserRequest) {
if (this.paymentStartService == null) {
// Defensive: if bean not injected, return failure
return ResponseEntity.badRequest().body(new ResponseModel("PaymentStartService not available", "FAILED", 400, null));
}
ResponseModel response = paymentStartService.startIntentPayment(paymentStartUserRequest);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/startIntentPayment")
@Operation(summary = "Start intent payment process", description = "This API initiates the intent-based payment process for a user.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Intent payment started successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))), })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> startIntentPayment(
@Validated @RequestBody PaymentStartUserRequest paymentStartUserRequest) {
ResponseEntity.badRequest().body(new ResponseModel("PaymentStartService not available", "FAILED", 400, null));
ResponseModel response = paymentStartService.startIntentPayment(paymentStartUserRequest);
return ResponseEntity.ok(response);
}
}
@@ -13,7 +13,14 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.PaymentHistoryByTxnRequest;
import com.billpaymentservice.bbps.dto.request.PaymentHistoryRequest;
import com.billpaymentservice.bbps.service.TxnHistoryService;
import com.billpaymentservice.bbps.util.ApiDocCommonResponses;
import com.billpaymentservice.bbps.util.BBPSConstant;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.extern.slf4j.Slf4j;
@RestController
@@ -29,7 +36,11 @@ public class TxnHistoryController {
}
@PostMapping(value = "/paymentHistoryDetails", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/paymentHistoryDetails")
@Operation(summary = "Get payment history details", description = "This API retrieves the payment history for a user based.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Payment history fetched successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getPaymentHistory(
@Validated @RequestBody PaymentHistoryRequest paymentHistoryRequest) {
@@ -37,7 +48,11 @@ public class TxnHistoryController {
return ResponseEntity.ok(response);
}
@PostMapping(value = "/paymentHistoryByTxnId", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/paymentHistoryByTxnId")
@Operation(summary = "Get payment history by transaction ID", description = "This API retrieves the payment details for a specific transaction using the provided transaction ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = BBPSConstant.OK_STR, description = "Payment history fetched successfully by transaction ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ResponseModel.class))) })
@ApiDocCommonResponses
public ResponseEntity<ResponseModel> getPaymentHistoryByTxnId(
@Validated @RequestBody PaymentHistoryByTxnRequest request) {
@@ -0,0 +1,24 @@
package com.billpaymentservice.bbps.dto;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ComplaintResponseDto {
private String ticketId;
private String ticketType;
private String txnNpciId;
private String status;
private String userId;
private String ticketDesp;
private String ticketDesr;
private List<ComplaintStatusDto> complaintStatusList;
private List<ComplaintHistoryDTO> historyList;
private List<ComplaintStatusDetailsDto> statusDetailsList;
private List<ViewAllComplaintDto> viewAllList;
}
@@ -0,0 +1,18 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ComplaintStatusDetailsDto {
private String ticketStatus;
private String ticketType;
private String txnAmount;
private String billerName;
private String ticketId;
private String totalTxnAmount;
private String billCategory;
}
@@ -0,0 +1,17 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ComplaintStatusDto {
private String ticketId;
private String npciTicketStatus;
private String ticketDespo;
private String createdTime;
private String npciTicketType;
}
@@ -0,0 +1,13 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PaymentPollBackResponse {
private String txnId;
private String orderId;
private String txnStatus;
}
@@ -1,5 +1,6 @@
package com.billpaymentservice.bbps.dto;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -10,6 +11,7 @@ import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
public class Tag {
private String name;
private String value;
private String name;
private String value;
}
@@ -66,9 +66,12 @@ public class TransactionDTO {
private String planType;
// ✅ Date fields as String (for JSON compatibility)
private String creationDate;
private String modifiedDate;
private Long createdEpochDate;
private Long modifiedEpochDate;
@JsonProperty("creationDate")
private String creationDateBank;
@JsonProperty("modifiedDate")
private String modifiedDateBank;
@JsonProperty("createdEpochDate")
private Long createdEpochDateBank;
@JsonProperty("modifiedEpochDate")
private Long modifiedEpochDateBank;
}
@@ -22,8 +22,8 @@ public class TransactionHistoryMasterDTO {
private String billId;
private String userType;
private String userId;
private Double txnAmount;
private Double totalTxnAmount;
private String txnAmount;
private String totalTxnAmount;
private String billerId;
private String billerCategory;
private String billerName;
@@ -33,15 +33,15 @@ public class TransactionHistoryMasterDTO {
private String quickPay;
private String paymentMode;
private String agentPaymentInformation;
private Double custConvFee;
private String custConvFee;
private String currency;
private String status;
private String requestedIp;
private String customerMobNo;
private String macAddress;
private Double splitPayAmount;
private Double couCustConvFee;
private Boolean settlementVerification;
private String splitPayAmount;
private String couCustConvFee;
private String settlementVerification;
private String fundTxnType;
private String reason;
private String amountTags;
@@ -11,7 +11,7 @@ public class TransactionHistoryParticularDetailsDTO {
private String billerName;
private Double totalTxnAmount;
private String totalTxnAmount;
private String bankTxnId;
@@ -0,0 +1,20 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ViewAllComplaintDto {
private String ticketStatus;
private String txnAmount;
private String billerName;
private String ticketId;
private String txnNpciId;
private String ticketType;
private String createdTime;
private String billCategory;
private String totalTxnAmount;
}
@@ -13,19 +13,20 @@ import lombok.Setter;
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AuthResponse {
private boolean success;
private String message;
private boolean userExists;
private UserDto user;
private String token;
private boolean success;
private String message;
private boolean userExists;
private Object user;
private String token;
public AuthResponse(boolean success, String message, boolean userExists, UserDto user) {
this.success = success;
this.message = message;
this.userExists = userExists;
this.user = user;
}
public AuthResponse(boolean success, String message, String token) {
public AuthResponse(boolean success, String message, String token, Object user) {
this.success = success;
this.message = message;
this.token = token;
this.user = user;
}
public AuthResponse(boolean success, String message, String token) {
this.success = success;
this.message = message;
this.token = token;
@@ -1,19 +1,24 @@
package com.billpaymentservice.bbps.dto.auth;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class LoginRequest {
private String mobile;
public LoginRequest() {}
@NotNull(message = "Mobile number cannot be null.")
@Size(min = 10, max = 10, message = "Mobile number must be exactly 10 digits.")
@Pattern(regexp = "^[0-9]{10}$", message = "Mobile number must contain only digits.")
private String mobile;
public LoginRequest(String mobile) {
this.mobile = mobile;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
@@ -1,29 +1,17 @@
package com.billpaymentservice.bbps.dto.auth;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class OtpSendResponse {
private boolean success;
private String message;
public OtpSendResponse() {}
public OtpSendResponse(boolean success, String message) {
this.success = success;
this.message = message;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
@@ -2,15 +2,35 @@ package com.billpaymentservice.bbps.dto.auth;
import com.billpaymentservice.bbps.dto.request.BaseClass;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequest extends BaseClass {
@NotNull(message = "Mobile number cannot be null.")
@Size(min = 10, max = 10, message = "Mobile number must be exactly 10 digits.")
@Pattern(regexp = "^[0-9]{10}$", message = "Mobile number must contain only 10 digits.")
private String mobile;
@NotNull(message = "Name cannot be null.")
@Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters.")
private String name;
@NotNull(message = "Email cannot be null.")
@Email(message = "Email must be a valid email address.")
private String email;
@NotNull(message = "Registration token cannot be null.")
private String registrationToken;
}
@@ -10,7 +10,7 @@ import lombok.Setter;
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
private Long id;
private String userId;
private String mobile;
private String name;
private String email;
@@ -1,30 +1,28 @@
package com.billpaymentservice.bbps.dto.auth;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class VerifyOtpRequest {
private String mobile;
private String otp;
public VerifyOtpRequest() {
}
@NotNull(message = "Mobile number cannot be null.")
@Size(min = 10, max = 10, message = "Mobile number must be exactly 10 digits.")
@Pattern(regexp = "^[0-9]{10}$", message = "Mobile number must contain only digits.")
private String mobile;
public VerifyOtpRequest(String mobile, String otp) {
this.mobile = mobile;
this.otp = otp;
}
@NotNull(message = "OTP cannot be null.")
@Size(min = 6, max = 6, message = "OTP must be exactly 6 digits.")
@Pattern(regexp = "^[0-9]{6}$", message = "OTP must contain only 6 digits.")
private String otp;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getOtp() {
return otp;
}
public void setOtp(String otp) {
this.otp = otp;
}
}
@@ -1,5 +1,7 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -7,4 +9,10 @@ import lombok.Setter;
@Setter
public class AllMasterOptionsRequest extends BaseClass {
private Integer pageNo = 0;
@NotNull(message = "pageEnd is required")
@Min(value = 1, message = "pageEnd must be greater than 0")
private Integer pageSize;
}
@@ -1,6 +1,6 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -12,7 +12,7 @@ import lombok.Setter;
@NoArgsConstructor
public class BillFetchByBillIdRequest extends BaseClass {
@NotNull
@NotBlank(message = "bill id not be null")
private String billId;
}
@@ -1,6 +1,9 @@
package com.billpaymentservice.bbps.dto.request;
import java.util.List;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -8,25 +11,37 @@ import lombok.Setter;
@Setter
public class BillPaymentRequest extends BaseClass {
private String tenantId;
private String refId;
private String billId;
private boolean amountOptions;
private String paymentMode;
private String paymentInformation;
private String billerId;
private String billerName;
private String billerCategory;
private String macAdress;
private String customerMobNo;
private Integer txnAmount;
private String paymentRefId;
private String clientReqId;
private String paymentChannel;
private String refId;
private List<DeviceBlockTagRequest> deviceBlockTags;
private List<CustomerParamTagRequest> customerParamsRequest;
private List<RemitterIdentityRequest> remitterIdentity;
private List<AmountBreakRequest> amountBreakSet;
private String billId;
// Change the field to Boolean (wrapper) type to allow @NotNull validation
private boolean amountOptions; // Changed to Boolean (wrapper type)
private String paymentMode;
private String paymentInformation;
private String billerId;
private String billerName;
private String billerCategory;
private String macAdress;
private String customerMobNo;
private Integer txnAmount; // Changed to @NotNull as it's an Integer (non-nullable)
private String paymentRefId;
private String clientReqId;
private String paymentChannel;
private List<DeviceBlockTagRequest> deviceBlockTags;
private List<CustomerParamTagRequest> customerParams;
private List<RemitterIdentityRequest> remitterIdentity;
private List<AmountBreakRequest> amountBreakSet;
}
@@ -1,5 +1,6 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -10,7 +11,7 @@ import lombok.ToString;
@ToString(callSuper = true)
public class BillerDetailRequest extends BaseClass{
@NotNull
@NotBlank(message = "biller id not be null")
private String billerId;
}
@@ -1,8 +1,13 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
public class CallbackRequest {
@NotBlank(message = "mid is mandatory")
private String mid;
@NotBlank(message = "data is mandatory")
private String data;
@NotBlank(message = "signature is mandatory")
private String signature;
public String getMid() {
@@ -1,7 +1,6 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -1,5 +1,7 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -7,9 +9,16 @@ import lombok.Setter;
@Setter
public class ComplaintRequestDTO extends BaseClass {
private String ticketDescription; // Complaint description that the user enters
private String ticketDisposition; // Complaint disposition
private String ticketDispositionCode; // Type of complaint
private String txnId; // Transaction ID (optional)
@NotBlank(message = "Ticket description cannot be null.")
private String ticketDescription;
@NotBlank(message = "Ticket disposition cannot be null.")
private String ticketDisposition;
@NotBlank(message = "Ticket disposition code cannot be null.")
private String ticketDispositionCode;
@NotBlank(message = "Transaction ID cannot be null.")
private String txnId;
}
@@ -1,6 +1,6 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -14,6 +14,6 @@ import lombok.ToString;
@ToString
public class CustomParamRequest extends BaseClass {
@NotNull
@NotBlank(message = "biller id not be null")
private String billerId;
}
@@ -6,11 +6,13 @@ import com.billpaymentservice.bbps.dto.CustomerParamsRequest;
import com.billpaymentservice.bbps.dto.RemitterIdentity;
import com.billpaymentservice.bbps.dto.Tag;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@AllArgsConstructor
@@ -18,19 +20,29 @@ import lombok.ToString;
@ToString
public class FetchBillRequest extends BaseClass {
// private String tenantId; // M
private String billerId; // M
private String billerName; //M
// private String digiledgeKey; // M
// private String agentId; // M
private String billerCategory; // M
private String clientReqId; // C
private String macAdress; // C
private String customerMobNo; // M
private String remitterName; // O
private String paymentChannel; // M
private List<Tag> deviceBlockTags; // M
private CustomerParamsRequest customerParamsRequest; // M
private List<RemitterIdentity> remitterIdentity; // O
@NotBlank(message = "biller id not be null")
private String billerId;
@NotBlank(message = "biller name not be null")
private String billerName;
@NotBlank(message = "biller category not be null")
private String billerCategory;
private String clientReqId;
private String macAdress;
@NotBlank(message = "customer mob no not be null")
private String customerMobNo;
private String remitterName;
@NotBlank(message = "payment channel not be null")
private String paymentChannel;
private List<Tag> deviceBlockTags;
private CustomerParamsRequest customerParamsRequest;
private List<RemitterIdentity> remitterIdentity;
}
@@ -2,6 +2,7 @@ package com.billpaymentservice.bbps.dto.request;
import com.billpaymentservice.bbps.dto.CustomerParamsRequest;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -14,18 +15,18 @@ import lombok.Setter;
@NoArgsConstructor
public class FetchBillValidatestRequest extends BaseClass {
@NotNull
private String billerId; // Alphanumeric, Unique ID assigned by NPCI
@NotNull
private String billerName; // String, Name of the biller
@NotNull
private String billerCategory; // String, CategoryResponseList of the biller
@NotNull
private String customerMobNo; // String, Mobile of the Customer
@NotBlank(message = "biller id not be null")
private String billerId;
@NotBlank(message = "biller name not be null")
private String billerName;
@NotBlank(message = "biller category not be null")
private String billerCategory;
@NotBlank(message = "biller mob no not be null")
private String customerMobNo;
private String clientReqId;
// Optional Fields
private String macAddress; // Alphanumeric MAC Address of the Agent Server
//private String clientReqId; // String, Unique id provided by the client
private String macAddress;
// private String clientReqId;
private CustomerParamsRequest customerParamsRequest; // Customer parameters for identifying the bill
}
@@ -1,6 +1,7 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -15,7 +16,7 @@ public class MasterCategoryRequest extends BaseClass {
private String billerName;
@NotNull
@NotBlank(message = "category name not be null")
private String category;
private Integer pageNo = 0;
@@ -1,5 +1,7 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -7,4 +9,10 @@ import lombok.Setter;
@Setter
public class PaymentHistoryRequest extends BaseClass {
private Integer pageNo = 0;
@NotNull(message = "pageEnd is required")
@Min(value = 1, message = "pageEnd must be greater than 0")
private Integer pageSize;
}
@@ -2,6 +2,7 @@ package com.billpaymentservice.bbps.dto.request;
import java.io.Serializable;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -13,13 +14,20 @@ import lombok.Setter;
@AllArgsConstructor
// DTO representing the user request payload described by the user
public class PaymentStartUserRequest extends BaseClass implements Serializable {
@NotBlank(message = "amount can not be null")
private String amount;
private String currency;
private String emailId;
@NotBlank(message = "currency can not be null")
String currency;
@NotBlank(message = "customerVpa can not be null")
private String customerVpa;
private String mobileNo;
private String respUrl;
@NotBlank(message = "txnReqType can not be null")
private String txnReqType;
@NotBlank(message = "udf1(Latitude) can not be null")
private String udf1;
@NotBlank(message = "udf2(Longitude) can not be null")
private String udf2;
private String emailId;
private String mobileNo;
private String name;
@@ -1,6 +1,8 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -26,8 +28,9 @@ public class PlanRequest extends BaseClass {
private String circle;
// ✅ Optional pagination parameters
private Integer page;
private Integer page = 0;
@NotNull(message = "pageEnd is required")
@Min(value = 1, message = "pageEnd must be greater than 0")
private Integer pagesize;
}
@@ -0,0 +1,13 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PollBackRequest extends BaseClass {
@NotBlank(message = "order Id not be null")
private String orderId;
}
@@ -1,15 +1,18 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.Min;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ViewAllComplaintsTicketsRequest extends BaseClass{
public class ViewAllComplaintsTicketsRequest extends BaseClass {
private String statusType; // e.g. COMPLAINT_OPEN_SUCCESS
private Integer pageNo; // default 0
private Integer pageSize; // default 10
@Min(value = 0, message = "Page number must be a non-negative integer.")
private Integer pageNo;
@Min(value = 1, message = "Page size must be at least 1.")
private Integer pageSize;
private String ticketType; // default 10
}
@@ -0,0 +1,17 @@
package com.billpaymentservice.bbps.dto.response;
import com.billpaymentservice.bbps.entites.PaymentStartRecord;
import com.billpaymentservice.bbps.entites.TransactionMaster;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PaymentStartWithTransactionDto {
private PaymentStartRecord paymentStartRecord;
private TransactionMaster transactionMaster;
}
@@ -1,6 +1,7 @@
package com.billpaymentservice.bbps.dto.response;
import com.billpaymentservice.bbps.dto.TicketDetailsDTO;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@@ -9,9 +10,13 @@ public class TicketCheckStatusResponse {
private String refId;
private TicketDetailsDTO ticketDetails;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String message;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String remarks;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String status;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String statusCode;
}
@@ -18,7 +18,7 @@ import lombok.ToString;
@Setter
@Entity
@ToString
@Table(name = "additional_info")
@Table(name = "bbps_additional_info")
public class AdditionalInfo {
@Id
@@ -26,11 +26,9 @@ public class AdditionalInfo {
private Long id; // primary key for the table
@Column(name = "param_config_id", nullable = false)
@NotBlank(message = "Param Config ID cannot be blank")
private String paramConfigId;
@Column(name = "param_name", nullable = false)
@NotBlank(message = "Param name cannot be blank")
private String paramName;
@Column(name = "data_type_dao")
@@ -12,10 +12,10 @@ import lombok.Setter;
@Entity
@Table(name = "additional_info_bill")
@Table(name = "bbps_additional_info_bill")
@Getter
@Setter
public class AdditionalInfoBill {
public class AdditionalInfoBill extends Auditable {
@Id
@GeneratedValue
private Long id;
@@ -11,10 +11,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "additional_info_bill_validate")
@Table(name = "bbps_additional_info_bill_validate")
@Getter
@Setter
public class AdditionalInfoBillValidate {
public class AdditionalInfoBillValidate extends Auditable {
@Id
@GeneratedValue
private Long id;
@@ -16,10 +16,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "plan_additional_info")
@Table(name = "bbps_plan_additional_info")
@Getter
@Setter
public class AdditionalInfoPlans {
public class AdditionalInfoPlans extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -10,12 +10,12 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "agent_fund_transfer_Txn_Status")
@Table(name = "bbps_agent_fund_transfer_Txn_Status")
@NoArgsConstructor
@Getter
@Setter
@AllArgsConstructor
public class AgentFundTransfer {
public class AgentFundTransfer extends Auditable {
@Id
@@ -13,8 +13,8 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "agent_fund_transfer")
public class AgentFundTransferEntity {
@Table(name = "bbps_agent_fund_transfer")
public class AgentFundTransferEntity extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -34,4 +34,3 @@ public class AgentFundTransferEntity {
private String txnRefId;
private String fundStatus;
}
@@ -16,10 +16,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "amount_option")
@Table(name = "bbps_amount_option")
@Getter
@Setter
public class AmountOption {
public class AmountOption extends Auditable {
@Id
@Column(name = "amount_option_id")
@@ -2,8 +2,6 @@ package com.billpaymentservice.bbps.entites;
import java.util.List;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
@@ -19,8 +17,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "amount_option_biller_id")
public class AmountOptionByBillerId extends Auditable<String> {
@Table(name = "bbps_amount_option_biller_id")
public class AmountOptionByBillerId extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -12,8 +12,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "amount_option_details")
public class AmountOptionDetails {
@Table(name = "bbps_amount_option_details")
public class AmountOptionDetails extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -35,4 +36,7 @@ public class AmountOptionDetails {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -0,0 +1,79 @@
package com.billpaymentservice.bbps.entites;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import java.lang.reflect.Field;
import java.util.Date;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
public class AuditListener {
@PrePersist
public void prePersist(Object entity) {
Date now = new Date(); // current date + time
// creation fields
setIfNull(entity, "createDateTime", now);
setIfNull(entity, "createdBy", null);
setIfNull(entity, "createdEpochDate", now.getTime());
// default soft delete flag
setAlways(entity, "isDeleted", Boolean.FALSE);
}
@PreUpdate
public void preUpdate(Object entity) {
Date now = new Date();
// update fields
setAlways(entity, "updatedDateTime", now);
setIfNull(entity, "updatedBy", null);
setAlways(entity, "modifiedEpochDate", now.getTime());
}
private void setIfNull(Object entity, String fieldName, Object value) {
try {
Field f = findField(entity.getClass(), fieldName);
if (f == null) return;
boolean accessible = f.canAccess(entity);
f.setAccessible(true);
if (f.get(entity) == null) {
f.set(entity, value);
}
f.setAccessible(accessible);
} catch (Exception ignored) {}
}
private void setAlways(Object entity, String fieldName, Object value) {
try {
Field f = findField(entity.getClass(), fieldName);
if (f == null) return;
boolean accessible = f.canAccess(entity);
f.setAccessible(true);
f.set(entity, value);
f.setAccessible(accessible);
} catch (Exception ignored) {}
}
private Field findField(Class<?> cls, String name) {
Class<?> current = cls;
while (current != null && current != Object.class) {
try {
return current.getDeclaredField(name);
} catch (NoSuchFieldException e) {
current = current.getSuperclass();
}
}
return null;
}
}
@@ -0,0 +1,43 @@
package com.billpaymentservice.bbps.entites;
import java.io.Serializable;
import java.util.Date;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
/**
* Base mapped superclass for audit fields. All JPA entities should extend this
* to get automatic population of createdAt/updatedAt/isDeleted via
* AuditListener.
*/
@MappedSuperclass
@EntityListeners(AuditListener.class)
@Getter
@Setter
public abstract class Auditable implements Serializable {
@Column(name = "create_date_time")
private Date createDateTime;
@Column(name = "updated_date_time")
private Date updatedDateTime;
@Column(name = "create_by")
private String createdBy;
@Column(name = "updated_by")
private String updatedBy;
@Column(name = "created_epoch_date")
private Long createdEpochDate;
@Column(name = "modified_epoch_date")
private Long modifiedEpochDate;
@Column(name = "is_deleted")
private Boolean isDeleted = Boolean.FALSE;
}
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -21,7 +19,7 @@ import lombok.Setter;
@Getter
@Setter
@Table(name = "bbps_master_data")
public class BBPSMastersData extends Auditable<String> {
public class BBPSMastersData extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -17,7 +17,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Builder
@Table(name = "bbps_merchant_validation")
public class BBPSMerchantValidation {
public class BBPSMerchantValidation extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -42,5 +42,5 @@ public class BBPSMerchantValidation {
private String txtId;
private boolean is_deleted;
// Removed local is_deleted field, now handled by Auditable
}
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@@ -17,8 +15,8 @@ import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "Bharat_connect_master")
public class BharatConnectMaster extends Auditable<String> {
@Table(name = "bbps_bharat_connect_master")
public class BharatConnectMaster extends Auditable {
@Id
@Column(name = "org_id", nullable = false, unique = true, length = 50)
@@ -13,8 +13,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "bill_additional_info")
public class BillAdditionalInfo {
@Table(name = "bbps_bill_additional_info")
public class BillAdditionalInfo extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -1,5 +1,6 @@
package com.billpaymentservice.bbps.entites;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
@@ -13,8 +14,8 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "bill_customer_params")
public class BillCustomerParams {
@Table(name = "bbps_bill_customer_params")
public class BillCustomerParams extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -1,4 +1,5 @@
package com.billpaymentservice.bbps.entites;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@@ -11,16 +12,20 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "bill_initiate")
public class BillInitiate {
@Id
@Column(name = "req_id")
private String reqId;
@Table(name = "bbps_bill_initiate")
@Column(name = "bill_id", nullable = false)
private String billId;
public class BillInitiate extends Auditable {
@Id
@Column(name = "req_id")
private String reqId;
@Column(name = "txn_id")
private String txnId;
@Column(name = "bill_id", nullable = false)
private String billId;
@Column(name = "txn_id")
private String txnId;
@Column(name = "client_user_id")
private String clientUserId;
}
@@ -1,8 +1,12 @@
package com.billpaymentservice.bbps.entites;
import java.util.List;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
@@ -15,35 +19,38 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "bill_master")
@Table(name = "bbps_bill_master")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class BillMaster {
public class BillMaster extends Auditable {
@Id
private String billId; // primary key
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String reqId; // client se aaya hua
private String txnId; // system-generated
private String refId;
private String billerId;
private String status;
private String actionType;
private String userId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "biller_response_id")
private BillerResponse billerResponse;
@OneToMany(mappedBy = "billMaster", cascade = CascadeType.ALL)
private List<AdditionalInfoBill> additionalInfo;
@OneToMany(mappedBy = "billMaster", cascade = CascadeType.ALL)
private List<CustomerParamBill> customerParams;
private String creationDate;
private String modifiedDate;
private Long createdEpochDate;
private Long modifiedEpochDate;
// getters and setters
@Column(name = "bill_id", unique = true)
private String billId; // primary key
private String reqId; // client se aaya hua
private String txnId; // system-generated
private String refId;
private String billerId;
private String status;
private String mid;
private String actionType;
private String clientUserId;
private String userId;
@Column(name = "initiator_txn_id")
private String initiatorTxnId;
@Column(name = "checker_txn_id")
private String checkerTxnId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "biller_response_id")
private BillerResponse billerResponse;
@OneToMany(mappedBy = "billMaster", cascade = CascadeType.ALL)
private List<AdditionalInfoBill> additionalInfo;
@OneToMany(mappedBy = "billMaster", cascade = CascadeType.ALL)
private List<CustomerParamBill> customerParams;
}
@@ -1,6 +1,5 @@
package com.billpaymentservice.bbps.entites;
import java.time.LocalDateTime;
import java.util.List;
import jakarta.persistence.CascadeType;
@@ -16,8 +15,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "bill_payment")
public class BillPayment {
@Table(name = "bbps_bill_payment")
public class BillPayment extends Auditable {
@Id
@Column(name = "txn_id")
@@ -53,9 +53,6 @@ public class BillPayment {
@Column(name = "customer_mobile")
private String customerMobNo;
@Column(name = "created_at")
private LocalDateTime createdAt = LocalDateTime.now();
// 🔗 One bill payment has many remitter identities
@OneToMany(mappedBy = "billPayment", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private List<RemitterIdentity> remitterIdentities;
@@ -13,8 +13,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "bill_tag_list")
public class BillTag {
@Table(name = "bbps_bill_tag_list")
public class BillTag extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -1,6 +1,5 @@
package com.billpaymentservice.bbps.entites;
import java.util.List;
import jakarta.persistence.*;
@@ -9,53 +8,60 @@ import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "bill_validation")
@Table(name = "bbps_bill_validation_master")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BillValidation {
public class BillValidation extends Auditable {
@Id
@Column(name = "bill_id", nullable = false, length = 100)
private String billId;
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "ref_id", length = 100)
private String refId;
@Column(name = "bill_id", unique = true)
private String billId;
@Column(name = "biller_id", length = 100)
private String billerId;
private String mid;
@Column(name = "status", length = 100)
private String status;
private String initiatorTxnId;
@Column(name = "action_type", length = 100)
private String actionType;
private String checkerTxnId;
@Column(name = "user_id", length = 100)
private String userId;
@Column(name = "ref_id", length = 100)
private String refId;
@Column(name = "biller_response", columnDefinition = "TEXT")
private String billerResponse;
@Column(name = "biller_id", length = 100)
private String billerId;
@OneToMany(mappedBy = "bill", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<AdditionalInfoBillValidate> additionalInfo;
@Column(name = "status", length = 100)
private String status;
// 👇 Proper nested customer params (OneToMany)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bill")
private List<CustomerParamBillValidation> customerParams;
@Column(name = "action_type", length = 100)
private String actionType;
@Column(name = "plan_info_daos", columnDefinition = "TEXT")
private String planInfoDaos;
@Column(name = "user_id", length = 100)
private String userId;
@Column(name = "creation_date", length = 50)
private String creationDate;
@Column(name = "biller_response", columnDefinition = "TEXT")
private String billerResponse;
@Column(name = "modified_date", length = 50)
private String modifiedDate;
@OneToMany(mappedBy = "bill", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<AdditionalInfoBillValidate> additionalInfo;
@Column(name = "created_epoch_date", length = 50)
private String createdEpochDate;
// 👇 Proper nested customer params (OneToMany)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bill")
private List<CustomerParamBillValidation> customerParams;
@Column(name = "plan_info_daos", columnDefinition = "TEXT")
private String planInfoDaos;
@Column(name = "txn_id")
private String txnId;
@Column(name = "req_id")
private String reqId;
@Column(name = "client_user_id")
private String clientUserId;
@Column(name = "modified_epoch_date", length = 50)
private String modifiedEpochDate;
}
@@ -13,19 +13,17 @@ import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Table(name = "biller_additional_info_payment")
@Table(name = "bbps_biller_additional_info_payment")
@Entity
public class BillerAdditionalInfoPayment {
public class BillerAdditionalInfoPayment extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // primary key for the table
@Column(name = "param_config_id", nullable = false)
@NotBlank(message = "Param Config ID cannot be blank")
private String paramConfigId;
@Column(name = "param_name", nullable = false)
@NotBlank(message = "Param name cannot be blank")
private String paramName;
@Column(name = "data_type_dao")
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
@@ -18,12 +16,12 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "biller_category_icon")
@Table(name = "bbps_biller_category_icon")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class BillerCategoryIcon extends Auditable<String>{
public class BillerCategoryIcon extends Auditable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
@@ -15,12 +13,12 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "biller_category_wise")
@Table(name = "bbps_biller_category_wise")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class BillerCategoryWise extends Auditable<String> {
public class BillerCategoryWise extends Auditable {
@Id
@Column(name = "biller_id")
@@ -59,6 +57,9 @@ public class BillerCategoryWise extends Auditable<String> {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
// One-to-One mapping with icon
@OneToOne(mappedBy = "biller", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private BillerCategoryIcon icon;
@@ -2,12 +2,12 @@ package com.billpaymentservice.bbps.entites;
import java.util.List;
import com.billpaymentservice.bbps.audit.Auditable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
@@ -21,6 +21,7 @@ import lombok.ToString;
@Getter
@Setter
@Entity
@EntityListeners(AuditListener.class)
@ToString(exclude = {
"billerPaymentModes",
"billerPaymentChannels",
@@ -34,9 +35,9 @@ import lombok.ToString;
"billerAdditionalInfoPayments"
})
@Table(name = "biller_details")
@Table(name = "bbps_biller_details")
@JsonIgnoreProperties(ignoreUnknown = true)
public class BillerDetails{
public class BillerDetails extends Auditable {
@Id
@Column(name = "biller_id", length = 14, nullable = false, unique = true)
@@ -45,18 +46,15 @@ public class BillerDetails{
private String billerId;
@Column(name = "biller_name")
@NotBlank(message = "Biller name cannot be blank")
private String billerName;
@Column(name = "biller_alias_name")
private String billerAliasName;
@Column(name = "biller_category_name", nullable = false)
@NotBlank(message = "Biller category name cannot be blank")
@Column(name = "biller_category_name")
private String billerCategoryName;
@Column(name = "biller_mode")
@NotBlank(message = "Biller mode cannot be blank")
private String billerMode;
@Column(name = "biller_accepts_adhoc")
@@ -69,14 +67,12 @@ public class BillerDetails{
private String parentBillerId;
@Column(name = "biller_ownership")
@NotBlank(message = "Biller ownership is required (PSU or Private)")
private String billerOwnerShp;
@Column(name = "biller_coverage")
private String billerCoverage;
@Column(name = "fetch_requirement")
@NotBlank(message = "Fetch requirement is mandatory")
private String fetchRequirement;
@Column(name = "payment_amount_exactness")
@@ -17,14 +17,14 @@ import lombok.ToString;
@Setter
@Entity
@ToString
@Table(name = "biller_plan_response_params")
public class BillerPlanResponseParams {
@Table(name = "bbps_biller_plan_response_params")
public class BillerPlanResponseParams extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // Primary Key
@Column(name = "biller_plan_response_id", nullable = false, unique = true)
@NotBlank(message = "Biller Plan Response ID cannot be blank")
private String billerPlanResponseId;
// ✅ params list — since it's not a separate table, we can store as JSON or text
@Column(name = "params", columnDefinition = "TEXT")
@@ -38,4 +38,3 @@ public class BillerPlanResponseParams {
@JoinColumn(name = "biller_id", nullable = false)
private BillerDetails biller;
}
@@ -11,10 +11,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "biller_response")
@Table(name = "bbps_biller_response")
@Getter
@Setter
public class BillerResponse {
public class BillerResponse extends Auditable {
@Id
@GeneratedValue
@@ -20,8 +20,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "biller_response_params")
public class BillerResponseParams {
@Table(name = "bbps_biller_response_params")
public class BillerResponseParams extends Auditable {
@Id
@Column(name = "biller_response_id", nullable = false, unique = true)
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -12,10 +10,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "category_response_list")
@Table(name = "bbps_category_response_list")
@Getter
@Setter
public class CategoryResponseList extends Auditable<String> {
public class CategoryResponseList extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -30,4 +28,7 @@ public class CategoryResponseList extends Auditable<String> {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -16,10 +16,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "check_client_biller_data")
@Table(name = "bbps_check_client_biller_data")
@Getter
@Setter
public class CheckClientBillerData {
public class CheckClientBillerData extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -10,10 +10,10 @@ import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "check_client_status_req_id")
@Table(name = "bbps_check_client_status_req_id")
@Getter
@Setter
public class CheckClientStatusReqId {
public class CheckClientStatusReqId extends Auditable {
@Id
@Column(name = "bill_id", length = 200)
@@ -34,18 +34,6 @@ public class CheckClientStatusReqId {
@Column(name = "user_id")
private String userId;
@Column(name = "creation_date")
private String creationDate;
@Column(name = "modified_date")
private String modifiedDate;
@Column(name = "created_epoch_date")
private Long createdEpochDate;
@Column(name = "modified_epoch_date")
private Long modifiedEpochDate;
@Column(name = "req_id")
private String reqId;
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -13,11 +11,11 @@ import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "complaints")
@Table(name = "bbps_complaints")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CloseComplaint extends Auditable<String> {
public class CloseComplaint extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -1,21 +1,22 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "complaint_status")
@Table(name = "bbps_complaint_status")
@Getter
@Setter
public class ComplainStatus extends Auditable<String> {
public class ComplainStatus extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -68,4 +69,7 @@ public class ComplainStatus extends Auditable<String> {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -5,11 +5,11 @@ import lombok.Setter;
import lombok.ToString;
@Entity
@Table(name = "complaint_details")
@Table(name = "bbps_complaint_details")
@Getter
@Setter
@ToString
public class ComplaintDetails {
public class ComplaintDetails extends Auditable {
@Id
@Column(name = "complaint_id", nullable = false, unique = true)
@@ -1,12 +1,13 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -14,27 +15,27 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "complaints_history")
@Table(name = "bbps_complaints_history")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ComplaintHistory extends Auditable<String> {
public class ComplaintHistory extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="history_id")
@Column(name = "history_id")
private String historyId;
@Column(name="ticket_id")
@Column(name = "ticket_id")
private String ticketId;
@Column(name="time")
@Column(name = "time")
private String time;
@Column(name="history_status")
@Column(name = "history_status")
private String historyStatus;
@Column(name = "txn_id")
@@ -43,5 +44,8 @@ public class ComplaintHistory extends Auditable<String> {
@Column(name = "req_id")
private String reqId;
@Column(name = "user_id")
private String userId;
}
@@ -1,21 +1,29 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Entity
@Getter
@Setter
@Table(name = "complaint_responses")
public class ComplaintResponseEntity extends Auditable<String> {
@ToString
@Table(name = "bbps_complaint_responses")
public class ComplaintResponseEntity extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -24,6 +32,9 @@ public class ComplaintResponseEntity extends Auditable<String> {
@Column(name = "ref_id")
private String refId;
@Column(name = "request_txn_id")
private String requestTxnId;
@Column(name = "txn_npci_id")
private String txnNpciId;
@@ -66,4 +77,23 @@ public class ComplaintResponseEntity extends Auditable<String> {
@Column(name = "user_id")
private String userId;
@Column(name = "mid")
private String mid;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false)
private Set<ComplainStatus> complaintStatusList = new HashSet<>();
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false)
private Set<ComplaintHistory> historyList = new HashSet<>();
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false)
private Set<ComplaintStatusDetails> statusDetailsList = new HashSet<>();
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false)
private Set<ViewAllComplaintTicketStatusDetails> viewAllList = new HashSet<>();
}
@@ -1,12 +1,13 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@@ -14,8 +15,9 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "view_ticket_status")
public class ComplaintStatusDetails extends Auditable<String>{
@Table(name = "bbps_view_ticket_status")
public class ComplaintStatusDetails extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -27,6 +29,9 @@ public class ComplaintStatusDetails extends Auditable<String>{
@Column(name = "txn_id")
private String systemTxnId;
@Column(name = "user_id")
private String userId;
@Column(name = "total_elements")
private String totalElements;
@@ -84,4 +89,6 @@ public class ComplaintStatusDetails extends Auditable<String>{
@Column(name = "biller_name")
private String billerName;
}
@@ -11,11 +11,11 @@ import lombok.Setter;
import lombok.ToString;
@Entity
@Table(name = "complaint_options_status_master")
@Table(name = "bbps_complaint_options_status_master")
@Getter
@Setter
@ToString
public class ComplaintStatusOptionsMaster {
public class ComplaintStatusOptionsMaster extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -24,7 +24,5 @@ public class ComplaintStatusOptionsMaster {
@Column(name = "status_label_name")
private String statusLabelName;
@Column(name = "is_deleted")
private Boolean isDeleted = false;
// Removed local isDeleted field, now handled by Auditable
}
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -14,12 +12,12 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "contact_master_data")
@Table(name = "bbps_contact_master_data")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ContactMasterData extends Auditable<String> {
public class ContactMasterData extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -33,4 +31,7 @@ public class ContactMasterData extends Auditable<String> {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -14,33 +14,43 @@ import lombok.ToString;
@Setter
@Entity
@ToString
@Table(name = "custom_param")
public class CustomParam {
@Table(name = "bbps_custom_param")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class CustomParam extends Auditable {
@Column(name = "custom_param_name")
private String customParamName;
@Column(name = "data_type")
private String dataType;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "optional")
private Boolean optional;
@Column(name = "custom_param_name")
private String customParamName;
@Column(name = "min_length")
private Integer minLength;
@Column(name = "data_type")
private String dataType;
@Column(name = "max_length")
private Integer maxLength;
@Column(name = "optional")
private Boolean optional;
@Column(name = "regex")
private String regex;
@Column(name = "min_length")
private Integer minLength;
@Column(name = "visibility")
private Boolean visibility;
@Column(name = "max_length")
private Integer maxLength;
@Column(name = "regex")
private String regex;
@Column(name = "visibility")
private Boolean visibility;
@Column(name = "req_id")
private String reqId;
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -22,9 +22,9 @@ import lombok.ToString;
@Getter
@Setter
@Entity
@Table(name = "customer_param")
@Table(name = "bbps_customer_param")
@ToString
public class CustomerParam {
public class CustomerParam extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -12,8 +12,9 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "customer_param_bill")
public class CustomerParamBill {
@Table(name = "bbps_customer_param_bill")
public class CustomerParamBill extends Auditable {
@Id
@GeneratedValue
@@ -6,11 +6,11 @@ import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "customer_params_bill_validate")
@Table(name = "bbps_customer_params_bill_validate")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomerParamBillValidation {
public class CustomerParamBillValidation extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -12,8 +12,9 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "customer_params")
public class CustomerParamDAO {
@Table(name = "bbps_customer_params")
public class CustomerParamDAO extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -2,8 +2,6 @@ package com.billpaymentservice.bbps.entites;
import java.util.List;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
@@ -20,8 +18,10 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "customer_param_group_by_biller_id")
public class CustomerParamGroupById extends Auditable<String> {
@Table(name = "bbps_customer_param_group_by_biller_id")
public class CustomerParamGroupById extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -56,4 +56,6 @@ public class CustomerParamGroupById extends Auditable<String> {
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -21,8 +21,9 @@ import lombok.ToString;
@Setter
@Entity
@ToString
@Table(name = "customer_param_groups")
public class CustomerParamGroups {
@Table(name = "bbps_customer_param_groups")
public class CustomerParamGroups extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -38,4 +39,3 @@ public class CustomerParamGroups {
@OneToMany(mappedBy = "customerParamGroups", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Group> groups;
}
@@ -14,8 +14,9 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "customer_params_transaction")
public class CustomerParamTransaction {
@Table(name = "bbps_customer_params_transaction")
public class CustomerParamTransaction extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -30,4 +31,3 @@ public class CustomerParamTransaction {
@JoinColumn(name = "txn_id", referencedColumnName = "bank_txn_id")
private TransactionMaster transactionMaster;
}
@@ -15,8 +15,9 @@ import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "device_block_tag")
public class DeviceBlockTag {
@Table(name = "bbps_device_block_tag")
public class DeviceBlockTag extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -11,17 +11,26 @@ import lombok.ToString;
@Getter
@Setter
@Entity
@Table(name = "disposition_details")
@Table(name = "bbps_disposition_details")
@ToString
public class DispositionDetails {
public class DispositionDetails extends Auditable {
@Id
@Column(name = "disposition_id", nullable = false, unique = true)
private String dispositionId; // UUID type string
@Id
@Column(name = "disposition_id", nullable = false, unique = true)
private String dispositionId; // UUID type string
@Column(name = "disposition_descr", nullable = false)
private String dispositionDescr;
@Column(name = "disposition_descr", nullable = false)
private String dispositionDescr;
@Column(name = "tenant_id")
private String tenantId;
@Column(name = "tenant_id")
private String tenantId;
@Column(name = "req_id")
private String reqId;
@Column(name = "txn_id")
private String txnId;
@Column(name = "user_id")
private String userId;
}
@@ -1,7 +1,5 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
@@ -18,8 +16,9 @@ import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "fetch_bill_validate_response")
public class FetchBillValidate extends Auditable<String> {
@Table(name = "bbps_fetch_bill_validate_response")
public class FetchBillValidate extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -63,10 +62,10 @@ public class FetchBillValidate extends Auditable<String> {
private String modifiedDate;
@Column(name = "created_epoch_date")
private long createdEpochDate;
private Long createdEpochDate;
@Column(name = "modified_epoch_date")
private long modifiedEpochDate;
private Long modifiedEpochDate;
@Column(name = "request_id")
private String requestId;
@@ -25,8 +25,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "biller_groups")
public class Group {
@Table(name = "bbps_biller_groups")
public class Group extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -14,8 +14,9 @@ import lombok.Setter;
@Getter
@Setter
@Entity
@Table(name = "group_params")
public class GroupParam {
@Table(name = "bbps_group_params")
public class GroupParam extends Auditable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -7,57 +7,62 @@ import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Entity
@Getter @Setter @NoArgsConstructor @ToString
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name = "bbps_inbound_trace_log")
public class InboundTraceLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 🔹 Identifiers
@Column(length = 50, unique = true)
private String requestId; // external requestId (from client)
@Column(length = 35)
private String txnId; // internally generated transaction id
// 🔹 Identifiers
@Column(length = 50, unique = true)
private String requestId; // external requestId (from client)
@Column(length = 35)
private String txnId; // internally generated transaction id
// 🔹 Source & API info
private String orgId; // tumhara org code (like ORG001)
private String mid; // merchant id from request
private String apiName; // e.g. getBillerByBillerId
private String httpMethod; // GET / POST
// 🔹 Source & API info
private String orgId; // tumhara org code (like ORG001)
private String mid; // merchant id from request
private String apiName; // e.g. getBillerByBillerId
private String httpMethod; // GET / POST
// 🔹 Request/Response data
@Column(columnDefinition = "TEXT")
private String requestPayload; // jo external ne bheja
@Column(columnDefinition = "TEXT")
private String responsePayload; // jo tumne wapas bheja
// 🔹 Request/Response data
@Column(columnDefinition = "TEXT")
private String requestPayload; // jo external ne bheja
@Column(columnDefinition = "TEXT")
private String responsePayload; // jo tumne wapas bheja
// 🔹 Status & timing
private String status; // SUCCESS / FAILED
private String responseCode; // like 200, 400 etc.
private LocalDateTime requestTime; // jab request aayi
private LocalDateTime responseTime; // jab response gaya
private LocalDateTime createdAt = LocalDateTime.now();
// 🔹 Status & timing
private String status; // SUCCESS / FAILED
private String responseCode; // like 200, 400 etc.
private LocalDateTime requestTime; // jab request aayi
private LocalDateTime responseTime; // jab response gaya
private LocalDateTime createdAt = LocalDateTime.now();
@Column(length = 255)
private String remark; // error ya note
@Column(length = 255)
private String remark; // error ya note
public InboundTraceLog(String requestId, String txnId, String apiName, String mid,
String orgId, String httpMethod, String requestPayload) {
this.requestId = requestId;
this.txnId = txnId;
this.apiName = apiName;
this.mid = mid;
this.orgId = orgId;
this.httpMethod = httpMethod;
this.requestPayload = requestPayload;
this.requestTime = LocalDateTime.now();
this.createdAt = LocalDateTime.now();
}
public InboundTraceLog(String requestId, String txnId, String apiName, String mid, String orgId, String httpMethod,
String requestPayload) {
this.requestId = requestId;
this.txnId = txnId;
this.apiName = apiName;
this.mid = mid;
this.orgId = orgId;
this.httpMethod = httpMethod;
this.requestPayload = requestPayload;
this.requestTime = LocalDateTime.now();
this.createdAt = LocalDateTime.now();
}
}

Some files were not shown because too many files have changed in this diff Show More