From 37bfe691ea64d5e88ea75f49ba6e11a64acef3c5 Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 22 Jan 2025 13:53:35 +0530 Subject: [PATCH 1/5] Implementing pagination in few APIs --- .../constants/GepafinConstant.java | 3 + .../tendermanagement/dao/ApplicationDao.java | 16 +++ .../dao/AssignedApplicationsDao.java | 133 ++++++++++++++++-- .../tendermanagement/dao/NotificationDao.java | 45 ++++++ ...ssignedApplicationPageableRequestBean.java | 15 ++ .../service/AssignedApplicationsService.java | 3 + .../service/NotificationService.java | 7 +- .../impl/AssignedApplicationsServiceImpl.java | 8 ++ .../service/impl/NotificationServiceImpl.java | 5 + .../web/rest/api/AssignedApplicationsApi.java | 18 ++- .../web/rest/api/NotificationApi.java | 18 ++- .../impl/AssignedApplicationsController.java | 12 ++ .../api/impl/NotificationApiController.java | 7 + 13 files changed, 276 insertions(+), 14 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationPageableRequestBean.java diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 34a05ca6..f7f796b5 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -387,5 +387,8 @@ public class GepafinConstant { public static final String APPLICATION_PER_CALL="applicationPerCall"; public static final String APPLICATION_PER_STATUS="applicationPerStatus"; public static final String CALL_EXPIRED="call.expired"; + public static final String PROTOCOL="protocol"; + public static final String PROTOCOL_NUMBER="protocolNumber"; + public static final String NOTE="note"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index ba847ca3..d4f6d3f7 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1493,6 +1493,22 @@ public class ApplicationDao { criteriaBuilder.upper(root.get(GepafinConstant.COMMENTS)), "%" + search.toUpperCase() + "%" ); +// Predicate protocolPredicate = criteriaBuilder.like( +// criteriaBuilder.function( +// "TO_CHAR", +// String.class, +// criteriaBuilder.function("CAST", String.class, root.get(GepafinConstant.PROTOCOL).get(GepafinConstant.PROTOCOL_NUMBER)) +// ), +// "%" + search + "%" +// ); + + Predicate callNamePredicate =criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.CALL).get(GepafinConstant.NAME)), // Adjust field name + "%" + search.toUpperCase() + "%" + ); + +// predicates.add(criteriaBuilder.or(protocolPredicate)); + predicates.add(criteriaBuilder.or(callNamePredicate)); predicates.add(criteriaBuilder.or(titlePredicate)); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index cc281df7..217acd81 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -1,23 +1,20 @@ package net.gepafin.tendermanagement.dao; +import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; -import net.gepafin.tendermanagement.entities.ApplicationEntity; -import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; -import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; -import net.gepafin.tendermanagement.entities.CompanyEntity; -import net.gepafin.tendermanagement.entities.FaqEntity; -import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; -import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; -import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; -import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; -import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; +import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; @@ -32,16 +29,20 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.log; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; +import static org.apache.commons.lang3.StringUtils.isEmpty; @Component public class AssignedApplicationsDao { @@ -257,5 +258,117 @@ public class AssignedApplicationsDao { log.info("Assigned application fetched successfully: {}", response); return response; } + public PageableResponseBean> getAllAssignedApplicationsByPagination(UserEntity user, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean,Long userId) { + Integer pageNo = null; + Integer pageLimit = null; + if (assignedApplicationPageableRequestBean.getGlobalFilters() != null) { + pageNo = assignedApplicationPageableRequestBean.getGlobalFilters().getPage(); + pageLimit = assignedApplicationPageableRequestBean.getGlobalFilters().getLimit(); + } + if (pageLimit == null || pageLimit <= 0) { + pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; + } + if (pageNo == null || pageNo <= 0) { + pageNo = GepafinConstant.DEFAULT_PAGE; + } + Specification spec = searchByPagination( assignedApplicationPageableRequestBean, user,userId); + Page entityPage = assignedApplicationsRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + // Prepare the response + + + List assignedApplicationsResponses = entityPage.getContent().stream() + .map(application -> { + AssignedApplicationsResponse response = convertEntityToResponse(application); + return response; + }) + .collect(Collectors.toList()); + + + + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + pageableResponseBean.setBody(assignedApplicationsResponses); + pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); + pageableResponseBean.setTotalPages(entityPage.getTotalPages()); + pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); + pageableResponseBean.setPageSize(entityPage.getSize()); + + return pageableResponseBean; + } + + public Specification searchByPagination(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, UserEntity userEntity,Long userId) { + return (root, query, criteriaBuilder) -> { + + List predicates = getPredicates(assignedApplicationPageableRequestBean, criteriaBuilder, root, userEntity,userId); + SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true); + + if (assignedApplicationPageableRequestBean.getGlobalFilters() != null + && assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy() != null && + assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals( + isEmpty(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName()))) { + sortBy.setColumnName(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getColumnName()); + sortBy.setSortDesc(true); + if (assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) { + sortBy.setSortDesc(assignedApplicationPageableRequestBean.getGlobalFilters().getSortBy().getSortDesc()); + } + } + + query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName()))); + if (Boolean.FALSE.equals(sortBy.getSortDesc())) { + query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName()))); + } + return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); + }; + } + + + private List getPredicates(AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean, + CriteriaBuilder criteriaBuilder, Root root, UserEntity userEntity,Long userId) { + + Integer year = null; + String search = null; + if (assignedApplicationPageableRequestBean.getGlobalFilters() != null) { + year = assignedApplicationPageableRequestBean.getGlobalFilters().getYear(); + search = assignedApplicationPageableRequestBean.getGlobalFilters().getSearch(); + } + List predicates = new ArrayList<>(); + + Boolean isBeneficiary = validator.checkIsBeneficiary(); + if (userId!=null) { + predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId)); + } + if (year != null && year > 0) { + int filterYear = assignedApplicationPageableRequestBean.getGlobalFilters().getYear(); + +// Create LocalDateTime boundaries for the start and end of the year + LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0); + LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59); + +// Add the range comparison to filter records within the year + predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear)); + + } + // Search in `title` and `message` (if search term is provided) + if (search != null && !search.isEmpty()) { + Predicate titlePredicate = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.NOTE)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(titlePredicate)); + } + + // Filter by `status` (if status list is provided) + if (assignedApplicationPageableRequestBean.getStatus() != null && !assignedApplicationPageableRequestBean.getStatus().isEmpty()) { + List statusValues = assignedApplicationPageableRequestBean.getStatus().stream() + .map(AssignedApplicationEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get(GepafinConstant.STATUS).in(statusValues)); + } + predicates.add(criteriaBuilder.isFalse(root.get(GepafinConstant.IS_DELETED))); + + + + return predicates; + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java index 3944246c..56749190 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/NotificationDao.java @@ -4,6 +4,7 @@ import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Expression; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; @@ -400,4 +401,48 @@ public class NotificationDao { predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userId)); return predicates; } + + public PageableResponseBean> getNotificationsByUserIdAndCompanyIdByPagination(Long userId, Long companyId, NotificationRequestBean notificationRequestBean) { + UserWithCompanyEntity userWithCompany; + if (companyId != null) { + userWithCompany = companyDao.validateUserWithCompny(userId, companyId); + }else { + userWithCompany=null; + } + Integer pageNo = null; + Integer pageLimit = null; + if (notificationRequestBean.getGlobalFilters() != null) { + pageNo = notificationRequestBean.getGlobalFilters().getPage(); + pageLimit = notificationRequestBean.getGlobalFilters().getLimit(); + } + if (pageLimit == null || pageLimit <= 0) { + pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; + } + if (pageNo == null || pageNo <= 0) { + pageNo = GepafinConstant.DEFAULT_PAGE; + } + Specification spec = search(userId, notificationRequestBean); + if(userWithCompany!=null){ + spec = spec.and((root, query, criteriaBuilder) -> + criteriaBuilder.equal(root.get("userWithCompany").get("id"), userWithCompany.getId())); +} + Page entityPage = notificationRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + // Prepare the response + List notificationResponses = entityPage.getContent().stream() + .map(notification -> { + NotificationResponse response = convertNotificationEntityToNotificationResponse(notification); + return response; + }) + .collect(Collectors.toList()); + + + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + pageableResponseBean.setBody(notificationResponses); + pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing + pageableResponseBean.setTotalPages(entityPage.getTotalPages()); + pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); + pageableResponseBean.setPageSize(entityPage.getSize()); + + return pageableResponseBean; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationPageableRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationPageableRequestBean.java new file mode 100644 index 00000000..89b13bd4 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AssignedApplicationPageableRequestBean.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; + +import java.util.List; + +@Data +public class AssignedApplicationPageableRequestBean { + + + private GlobalFilters globalFilters; + + private List status; +} diff --git a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java index 1a73c674..66afcf0b 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/AssignedApplicationsService.java @@ -2,9 +2,11 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; +import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import java.util.List; @@ -19,4 +21,5 @@ public interface AssignedApplicationsService { AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, UpdateAssignedApplicationRequest assignedApplicationsRequest); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id); AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId); + PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/NotificationService.java b/src/main/java/net/gepafin/tendermanagement/service/NotificationService.java index 940d753e..5267e736 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/NotificationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/NotificationService.java @@ -7,7 +7,9 @@ import net.gepafin.tendermanagement.model.request.NotificationReq; import net.gepafin.tendermanagement.model.request.NotificationRequestBean; import net.gepafin.tendermanagement.model.response.NotificationResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; +import net.gepafin.tendermanagement.model.util.Response; import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; import java.util.List; @@ -25,4 +27,7 @@ public interface NotificationService { public List getNotificationsByCompanyIdAndUserId(Long userId, Long companyId, List statuses); PageableResponseBean> getAllNotification(HttpServletRequest request,Long userId, NotificationRequestBean notificationRequestBean); -} + + PageableResponseBean> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java index c820d929..5ac62dc5 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AssignedApplicationsServiceImpl.java @@ -4,9 +4,11 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.AssignedApplicationsDao; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; @@ -61,4 +63,10 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ return assignedApplicationsDao.validateAssignedApplication(assignedApplicationId); } + @Override + public PageableResponseBean> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { + UserEntity user=validator.validateUser(request); + return assignedApplicationsDao.getAllAssignedApplicationsByPagination(user,assignedApplicationPageableRequestBean,userId); + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/NotificationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/NotificationServiceImpl.java index bb9f167d..9bd5603d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/NotificationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/NotificationServiceImpl.java @@ -74,4 +74,9 @@ public class NotificationServiceImpl implements NotificationService { UserEntity userEntity = validator.validateUser(request); return notificationDao.getAllNotification(userId,notificationRequestBean); } + + @Override + public PageableResponseBean> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean) { + return notificationDao.getNotificationsByUserIdAndCompanyIdByPagination(userId,companyId,notificationRequestBean); + } } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java index 144a20f4..b09981e8 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/AssignedApplicationsApi.java @@ -6,9 +6,11 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; +import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -55,7 +57,7 @@ public interface AssignedApplicationsApi { ResponseEntity> deleteAssignedApplication(HttpServletRequest request, @Parameter(description = "The assigned application id", required = true) @PathVariable("id") Long id); - @Operation(summary = "Api to get all assigned applications", + @Operation(summary = "Api to get all assigned applications (deprecated) ", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -96,8 +98,20 @@ public interface AssignedApplicationsApi { @GetMapping(value = "/{id}", produces = "application/json") ResponseEntity> getAssignedApplicationById(HttpServletRequest request, @Parameter(description = "The assigned application id", required = true) @PathVariable(value = "id", required = true) Long id); - + @Operation(summary = "Api to get all assigned applications by pagination", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PostMapping(value = "/pagination", produces = "application/json") + ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, + @Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId, @RequestBody AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean); + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java index 44bc0e84..8cccb46c 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java @@ -87,7 +87,7 @@ public interface NotificationApi { ResponseEntity> deleteNotification(HttpServletRequest request, @Parameter(description = "The notification id", required = true) @PathVariable(value = "id", required = true) Long id); - @Operation(summary = "API to get notifications by user ID and company ID", responses = { @ApiResponse(responseCode = "200", description = "OK"), + @Operation(summary = "API to get notifications by user ID and company ID (deprecated) ", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -110,6 +110,22 @@ public interface NotificationApi { @PostMapping(value = "/user/{userId}/pagination", consumes = "application/json", produces = "application/json") ResponseEntity>>> getAllNotification(HttpServletRequest request,@Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId, @RequestBody NotificationRequestBean notificationRequestBean); + + + + @Operation(summary = "API to get notifications by user ID and company ID by pagination", responses = { @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PostMapping(value = "/user/{userId}/company/{companyId}/notifications/pagination", produces = "application/json") + ResponseEntity>>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, + @Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId, + @Parameter(description = "The company ID", required = true) @PathVariable(value = "companyId") Long companyId, + @RequestBody NotificationRequestBean notificationRequestBean); + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java index 78cc47dd..18c30490 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java @@ -6,10 +6,13 @@ import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.AssignedApplicationPageableRequestBean; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.UpdateAssignedApplicationRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; +import net.gepafin.tendermanagement.model.response.NotificationResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -89,6 +92,15 @@ public class AssignedApplicationsController implements AssignedApplicationsApi { .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); } + @Override + public ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_NOTIFICATION_BY_PAGINATION).build()); + + PageableResponseBean> notificationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY))); + + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/NotificationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/NotificationApiController.java index 549b6517..8de800e1 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/NotificationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/NotificationApiController.java @@ -92,4 +92,11 @@ public class NotificationApiController implements NotificationApi { return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY))); } + @Override + public ResponseEntity>>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, Long userId, Long companyId, NotificationRequestBean notificationRequestBean) { + PageableResponseBean> notificationResponses=notificationService.getNotificationsByUserIdAndCompanyIdByPagination(request, userId,companyId,notificationRequestBean); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY))); + + } + } \ No newline at end of file From 7f388ea8ffa99f64d874ac4c8c179c6b379da48f Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 12 Feb 2025 18:37:42 +0530 Subject: [PATCH 2/5] Updated code --- .../constants/GepafinConstant.java | 7 + .../dao/ApplicationAmendmentRequestDao.java | 120 +++++++++++++ .../tendermanagement/dao/UserActionDao.java | 161 ++++++++++++++++-- .../gepafin/tendermanagement/dao/UserDao.java | 155 +++++++++++++++++ .../enums/UserActionContextEnum.java | 6 +- ...icationAmendmentPaginationRequestBean.java | 14 ++ .../request/UserActionPaginationRequest.java | 21 +++ .../request/UserPaginationRequestBean.java | 17 ++ .../response/SummaryPageResponseBean.java | 2 +- .../repositories/UserRepository.java | 3 +- .../ApplicationAmendmentRequestService.java | 3 + .../service/UserActionService.java | 4 + .../tendermanagement/service/UserService.java | 2 + ...pplicationAmendmentRequestServiceImpl.java | 8 + .../service/impl/UserActionServiceImpl.java | 7 + .../service/impl/UserServiceImpl.java | 7 + .../api/ApplicationAmendmentRequestApi.java | 19 ++- .../web/rest/api/UserActionApi.java | 19 ++- .../web/rest/api/UserApi.java | 20 ++- ...ApplicationAmendmentRequestController.java | 17 +- .../impl/AssignedApplicationsController.java | 7 +- .../api/impl/UserActionApiController.java | 12 ++ .../web/rest/api/impl/UserApiController.java | 14 +- 23 files changed, 614 insertions(+), 31 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentPaginationRequestBean.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/UserActionPaginationRequest.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/UserPaginationRequestBean.java diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index f7f796b5..578924cb 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -390,5 +390,12 @@ public class GepafinConstant { public static final String PROTOCOL="protocol"; public static final String PROTOCOL_NUMBER="protocolNumber"; public static final String NOTE="note"; + public static final String INTERNAL_NOTE="internalNote"; + public static final String ACTION_TYPE="actionType"; + public static final String ACTION_CONTEXT="actionContext"; + public static final String METHOD_TYPE="methodType"; + + + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 2cf5d3ca..280bea4e 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -2,8 +2,10 @@ package net.gepafin.tendermanagement.dao; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; @@ -12,6 +14,7 @@ import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEm import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.*; +import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.util.DateTimeUtil; @@ -25,6 +28,8 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; @@ -37,6 +42,7 @@ import java.util.stream.Collectors; import static java.time.temporal.ChronoUnit.DAYS; import static net.gepafin.tendermanagement.util.Utils.log; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; +import static org.apache.commons.lang3.StringUtils.isEmpty; @Component public class ApplicationAmendmentRequestDao { @@ -1183,4 +1189,118 @@ public class ApplicationAmendmentRequestDao { documentService.deleteFile(documentId); } + public PageableResponseBean> getApplicationAmendmentByPaginnation(Long userId, ApplicationAmendmentPaginationRequestBean applicationAmendmentPaginationRequestBean) { + Integer pageNo = null; + Integer pageLimit = null; + if (applicationAmendmentPaginationRequestBean.getGlobalFilters() != null) { + pageNo = applicationAmendmentPaginationRequestBean.getGlobalFilters().getPage(); + pageLimit = applicationAmendmentPaginationRequestBean.getGlobalFilters().getLimit(); + } + if (pageLimit == null || pageLimit <= 0) { + pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; + } + if (pageNo == null || pageNo <= 0) { + pageNo = GepafinConstant.DEFAULT_PAGE; + } + Specification spec = searchPagination(userId,applicationAmendmentPaginationRequestBean); + Page entityPage = applicationAmendmentRequestRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + + + List applicationResponses = entityPage.getContent().stream() + .map(application -> { + ApplicationAmendmentRequestResponse response = convertEntityToResponse(application,false); + return response; + }) + .collect(Collectors.toList()); + + + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + pageableResponseBean.setBody(applicationResponses); + pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing + pageableResponseBean.setTotalPages(entityPage.getTotalPages()); + pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); + pageableResponseBean.setPageSize(entityPage.getSize()); + + return pageableResponseBean; + } + + public Specification searchPagination(Long userId,ApplicationAmendmentPaginationRequestBean applicationAmendmentPaginationRequestBean) { + return (root, query, criteriaBuilder) -> { + + List predicates = getPredicates(applicationAmendmentPaginationRequestBean, criteriaBuilder, root,userId); + SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true); + + if (applicationAmendmentPaginationRequestBean .getGlobalFilters() != null + && applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy() != null && + applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals( + isEmpty(applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()))) { + sortBy.setColumnName(applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()); + sortBy.setSortDesc(true); + if (applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) { + sortBy.setSortDesc(applicationAmendmentPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc()); + } + } + + query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName()))); + if (Boolean.FALSE.equals(sortBy.getSortDesc())) { + query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName()))); + } + return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); + }; + } + + + private List getPredicates(ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean, + CriteriaBuilder criteriaBuilder, Root root,Long userId) { + + Integer year = null; + String search = null; + if (amendmentPaginationRequestBean.getGlobalFilters() != null) { + year = amendmentPaginationRequestBean.getGlobalFilters().getYear(); + search = amendmentPaginationRequestBean.getGlobalFilters().getSearch(); + } + List predicates = new ArrayList<>(); + + if (year != null && year > 0) { + int filterYear = amendmentPaginationRequestBean.getGlobalFilters().getYear(); + +// Create LocalDateTime boundaries for the start and end of the year + LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0); + LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59); + +// Add the range comparison to filter records within the year + predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear)); + + } + // Search in `title` and `message` (if search term is provided) + if (search != null && !search.isEmpty()) { + Predicate notePredicate = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.NOTE)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(notePredicate)); + Predicate internalNotePredicate = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.INTERNAL_NOTE)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(internalNotePredicate)); + } + + // Filter by `status` (if status list is provided) + if (amendmentPaginationRequestBean.getStatus() != null && !amendmentPaginationRequestBean.getStatus().isEmpty()) { + List statusValues = amendmentPaginationRequestBean.getStatus().stream() + .map(ApplicationAmendmentRequestEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get(GepafinConstant.STATUS).in(statusValues)); + } + if(Boolean.TRUE.equals(validator.checkIsBeneficiary())) { + predicates.add(root.get("applicationEvaluationEntity").get("assignedApplicationsEntity").get("application").get("userId").in(userId)); + } + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + predicates.add(root.get("applicationEvaluationEntity").get("assignedApplicationsEntity").get("userId").in(userId)); + } + + return predicates; + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java index 7cf5472f..a4f0730d 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java @@ -2,15 +2,18 @@ package net.gepafin.tendermanagement.dao; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import jakarta.servlet.http.HttpServletRequest; -import net.gepafin.tendermanagement.entities.RoleActionContextEntity; -import net.gepafin.tendermanagement.entities.UserActionEntity; -import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.entities.*; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; -import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; -import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; -import net.gepafin.tendermanagement.model.response.UserActionResponseBean; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean; +import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; +import net.gepafin.tendermanagement.model.response.*; +import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.repositories.RoleActionContextRepository; import net.gepafin.tendermanagement.repositories.UserActionsRepository; @@ -23,9 +26,12 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import static org.apache.commons.lang3.StringUtils.isEmpty; + @Component public class UserActionDao { @@ -47,10 +53,11 @@ public class UserActionDao { List userActions = getFilterUserActions(userEntity.getId(),timeFilter,actionContext); - return createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed,userActions); + return null; +// createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed,userActions); } - public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed, List userActions){ + public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed,PageableResponseBean> userActions){ SummaryPageResponseBean response = new SummaryPageResponseBean(); response.setRole(user.getRoleEntity().getRoleName()); response.setLastLogin(user.getLastLogin()); @@ -59,9 +66,7 @@ public class UserActionDao { response.setEmail(user.getEmail()); response.setNumberOfLoginAttempts(numberOfLoginAttempts); response.setApplicationsProcessed(applicationsProcessed); - - List userAction = convertEntityToResponse(userActions); - response.setUserActions(userAction); + response.setUserActions(userActions); return response; } @@ -157,4 +162,138 @@ public class UserActionDao { return responseBean; }).collect(Collectors.toList()); } + public SummaryPageResponseBean getUserActionByPagination(UserEntity user, UserActionPaginationRequest userActionPaginationRequest) { + Integer pageNo = null; + Integer pageLimit = null; + if (userActionPaginationRequest.getGlobalFilters() != null) { + pageNo = userActionPaginationRequest.getGlobalFilters().getPage(); + pageLimit = userActionPaginationRequest.getGlobalFilters().getLimit(); + } + if (pageLimit == null || pageLimit <= 0) { + pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; + } + if (pageNo == null || pageNo <= 0) { + pageNo = GepafinConstant.DEFAULT_PAGE; + } + Specification spec = search(userActionPaginationRequest,user); + Page entityPage = userActionsRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + // Prepare the response + Long numberOfLoginAttempts = userActionsRepository.countUserLoginAttempts(user.getId()); + Long applicationsProcessed = assignedApplicationsRepository.countAssignedApplicationsByUserId(user.getId()); + + + List userActionResponseBeans = convertEntityToResponse(entityPage.stream().toList()); + + + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + pageableResponseBean.setBody(userActionResponseBeans); + pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing + pageableResponseBean.setTotalPages(entityPage.getTotalPages()); + pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); + pageableResponseBean.setPageSize(entityPage.getSize()); + + return createSummaryPageResponse(user,numberOfLoginAttempts,applicationsProcessed,pageableResponseBean); + } + public Specification search(UserActionPaginationRequest userActionPaginationRequest,UserEntity userEntity) { + return (root, query, criteriaBuilder) -> { + + List predicates = getPredicates(userActionPaginationRequest, criteriaBuilder, root,userEntity); + SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true); + + if (userActionPaginationRequest .getGlobalFilters() != null + && userActionPaginationRequest.getGlobalFilters().getSortBy() != null && + userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals( + isEmpty(userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName()))) { + sortBy.setColumnName(userActionPaginationRequest.getGlobalFilters().getSortBy().getColumnName()); + sortBy.setSortDesc(true); + if (userActionPaginationRequest.getGlobalFilters().getSortBy().getSortDesc() != null) { + sortBy.setSortDesc(userActionPaginationRequest.getGlobalFilters().getSortBy().getSortDesc()); + } + } + + query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName()))); + if (Boolean.FALSE.equals(sortBy.getSortDesc())) { + query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName()))); + } + return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); + }; + } + + + private List getPredicates(UserActionPaginationRequest userActionPaginationRequest, + CriteriaBuilder criteriaBuilder, Root root,UserEntity userEntity) { + + Integer year = null; + String search = null; + if (userActionPaginationRequest.getGlobalFilters() != null) { + year = userActionPaginationRequest.getGlobalFilters().getYear(); + search = userActionPaginationRequest.getGlobalFilters().getSearch(); + } + List predicates = new ArrayList<>(); + + if (year != null && year > 0) { + int filterYear = userActionPaginationRequest.getGlobalFilters().getYear(); + +// Create LocalDateTime boundaries for the start and end of the year + LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0); + LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59); + +// Add the range comparison to filter records within the year + predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear)); + + } + // Search in `title` and `message` (if search term is provided) + if (search != null && !search.isEmpty()) { + Predicate actionType = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.ACTION_TYPE)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(actionType)); + Predicate actionContext = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.ACTION_CONTEXT)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(actionContext)); + Predicate methodType = criteriaBuilder.like( + criteriaBuilder.upper(root.get(GepafinConstant.METHOD_TYPE)), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(methodType)); + } + + // Filter by `status` (if status list is provided) + if (userActionPaginationRequest.getActionContext() != null && !userActionPaginationRequest.getActionContext().isEmpty()) { + List statusValues = userActionPaginationRequest.getActionContext().stream() + .map(UserActionContextEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get("actionContext").in(statusValues)); + } + if (userActionPaginationRequest.getActionType() != null && !userActionPaginationRequest.getActionType().isEmpty()) { + List statusValues = userActionPaginationRequest.getActionType().stream() + .map(UserActionLogsEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get("actionType").in(statusValues)); + } + + TimePeriodEnum timeRange= userActionPaginationRequest.getTimeFilter(); + if (timeRange != null) { + LocalDateTime startDate = null; + LocalDateTime endDate = LocalDateTime.now(); + + switch (timeRange) { + case LAST_WEEK -> startDate = endDate.minusWeeks(1); + case LAST_QUARTER -> startDate = endDate.minusMonths(3); + case LAST_SEMESTER -> startDate = endDate.minusMonths(6); + case LAST_YEAR -> startDate = endDate.minusYears(1); + } + + if (startDate != null) { + predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startDate, endDate)); + } + } + predicates.add(criteriaBuilder.equal(root.get(GepafinConstant.USER_ID), userEntity.getId())); + + return predicates; + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index 0ffa0b42..7de86017 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -1,5 +1,8 @@ package net.gepafin.tendermanagement.dao; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import net.gepafin.tendermanagement.config.SamlSuccessHandler; @@ -10,6 +13,7 @@ import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.util.JWTToken; +import net.gepafin.tendermanagement.model.util.SortBy; import net.gepafin.tendermanagement.repositories.BeneficiaryRepository; import net.gepafin.tendermanagement.repositories.UserRepository; import net.gepafin.tendermanagement.service.HubService; @@ -28,8 +32,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.domain.Specification; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -37,6 +46,7 @@ import java.util.Map; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; +import static org.apache.commons.lang3.StringUtils.isEmpty; @Component public class UserDao { @@ -596,6 +606,151 @@ public class UserDao { log.info("Total users found with role ID {}: {}", roleIds, userResponseBeans.size()); return userResponseBeans; } + public PageableResponseBean> getUserByPagination(UserPaginationRequestBean userPaginationRequestBean,UserEntity userEntity) { + Integer pageNo = null; + Integer pageLimit = null; + if (userPaginationRequestBean.getGlobalFilters() != null) { + pageNo = userPaginationRequestBean.getGlobalFilters().getPage(); + pageLimit = userPaginationRequestBean.getGlobalFilters().getLimit(); + } + if (pageLimit == null || pageLimit <= 0) { + pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; + } + if (pageNo == null || pageNo <= 0) { + pageNo = GepafinConstant.DEFAULT_PAGE; + } + Specification spec = search(userPaginationRequestBean,userEntity); + Page entityPage = userRepository.findAll(spec, PageRequest.of(pageNo - 1, pageLimit)); + List applicationResponses = entityPage.getContent().stream() + .map(user -> { + UserResponseBean response = convertUserEntityToUserResponse(user); + return response; + }) + .collect(Collectors.toList()); + + + PageableResponseBean> pageableResponseBean = new PageableResponseBean<>(); + pageableResponseBean.setBody(applicationResponses); + pageableResponseBean.setCurrentPage(entityPage.getNumber() + 1); // Page numbers typically start from 0, so add 1 for user-friendly indexing + pageableResponseBean.setTotalPages(entityPage.getTotalPages()); + pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); + pageableResponseBean.setPageSize(entityPage.getSize()); + + return pageableResponseBean; + } + + public Specification search(UserPaginationRequestBean userPaginationRequestBean,UserEntity userEntity) { + return (root, query, criteriaBuilder) -> { + + List predicates = getPredicates(userPaginationRequestBean, criteriaBuilder, root,userEntity); + SortBy sortBy = new SortBy(GepafinConstant.CREATED_DATE, true); + + if (userPaginationRequestBean .getGlobalFilters() != null + && userPaginationRequestBean.getGlobalFilters().getSortBy() != null && + userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName() != null && Boolean.FALSE.equals( + isEmpty(userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()))) { + sortBy.setColumnName(userPaginationRequestBean.getGlobalFilters().getSortBy().getColumnName()); + sortBy.setSortDesc(true); + if (userPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc() != null) { + sortBy.setSortDesc(userPaginationRequestBean.getGlobalFilters().getSortBy().getSortDesc()); + } + } + + query.orderBy(criteriaBuilder.desc(root.get(sortBy.getColumnName()))); + if (Boolean.FALSE.equals(sortBy.getSortDesc())) { + query.orderBy(criteriaBuilder.asc(root.get(sortBy.getColumnName()))); + } + return query.where(criteriaBuilder.and(predicates.toArray(new Predicate[0]))).getRestriction(); + }; + } + + + private List getPredicates(UserPaginationRequestBean userPaginationRequestBean, + CriteriaBuilder criteriaBuilder, Root root,UserEntity user) { + + Integer year = null; + String search = null; + if (userPaginationRequestBean.getGlobalFilters() != null) { + year = userPaginationRequestBean.getGlobalFilters().getYear(); + search = userPaginationRequestBean.getGlobalFilters().getSearch(); + } + List predicates = new ArrayList<>(); + + if (year != null && year > 0) { + int filterYear = userPaginationRequestBean.getGlobalFilters().getYear(); + +// Create LocalDateTime boundaries for the start and end of the year + LocalDateTime startOfYear = LocalDateTime.of(filterYear, 1, 1, 0, 0); + LocalDateTime endOfYear = LocalDateTime.of(filterYear, 12, 31, 23, 59, 59); + +// Add the range comparison to filter records within the year + predicates.add(criteriaBuilder.between(root.get(GepafinConstant.CREATED_DATE), startOfYear, endOfYear)); + + } + // Search in `title` and `message` (if search term is provided) + if (search != null && !search.isEmpty()) { + Predicate predicate = criteriaBuilder.like( + criteriaBuilder.upper(root.get("firstName")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate)); + Predicate predicate1 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("lastName")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate1)); + + Predicate predicate2 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("phoneNumber")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate2)); + + Predicate predicate3 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("organization")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate3)); + + Predicate predicate4 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("address")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate4)); + + Predicate predicate5 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("city")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate5)); + + Predicate predicate6 = criteriaBuilder.like( + criteriaBuilder.upper(root.get("country")), + "%" + search.toUpperCase() + "%" + ); + predicates.add(criteriaBuilder.or(predicate6)); + + + } + + // Filter by `status` (if status list is provided) + if (userPaginationRequestBean.getStatus() != null && !userPaginationRequestBean.getStatus().isEmpty()) { + List statusValues = userPaginationRequestBean.getStatus().stream() + .map(UserStatusEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get(GepafinConstant.STATUS).in(statusValues)); + } + if (userPaginationRequestBean.getRole() != null && !userPaginationRequestBean.getRole().isEmpty()) { + List roleValues = userPaginationRequestBean.getRole().stream() + .map(RoleStatusEnum::name) // Convert enum to string + .toList(); + predicates.add(root.get("roleEntity").get("roleType").in(roleValues)); + } + predicates.add(root.get(GepafinConstant.HUB).get("id").in(user.getHub().getId())); + + return predicates; + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 5cae2da0..83a8c8c8 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -172,7 +172,11 @@ public enum UserActionContextEnum { GET_USER_ACTION("GET_USER_ACTION"), - GET_ACTION_CONTEXT_LABELS("GET_ACTION_CONTEXT_LABELS"); + GET_ACTION_CONTEXT_LABELS("GET_ACTION_CONTEXT_LABELS"), + GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION("GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION"), + GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION("GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION"), + GET_ALL_USER_ACTION_BY_PAGINATION("GET_ALL_USER_ACTION_BY_PAGINATION"), + GET_ALL_USER_BY_PAGINATION("GET_ALL_USER_BY_PAGINATION"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentPaginationRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentPaginationRequestBean.java new file mode 100644 index 00000000..42318247 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentPaginationRequestBean.java @@ -0,0 +1,14 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; + +import java.util.List; + +@Data +public class ApplicationAmendmentPaginationRequestBean { + + private GlobalFilters globalFilters; + + private List status; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UserActionPaginationRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/UserActionPaginationRequest.java new file mode 100644 index 00000000..986cb979 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UserActionPaginationRequest.java @@ -0,0 +1,21 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.TimePeriodEnum; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; + +import java.util.List; + +@Data +public class UserActionPaginationRequest { + + private GlobalFilters globalFilters; + + private TimePeriodEnum timeFilter; + + private List actionContext; + + private List actionType; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UserPaginationRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/UserPaginationRequestBean.java new file mode 100644 index 00000000..89037dc4 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UserPaginationRequestBean.java @@ -0,0 +1,17 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.enums.RoleStatusEnum; +import net.gepafin.tendermanagement.enums.UserStatusEnum; + +import java.util.List; + +@Data +public class UserPaginationRequestBean { + + private GlobalFilters globalFilters; + + private List status; + + private List role; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java index a15a6510..9c1c7585 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java @@ -14,5 +14,5 @@ public class SummaryPageResponseBean { private LocalDateTime registrationDate; private Long numberOfLoginAttempts; private Long applicationsProcessed; - private List userActions; + private PageableResponseBean> userActions; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java index ab00d3e0..9f58ea49 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -10,7 +11,7 @@ import java.util.List; import java.util.Optional; @Repository -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository, JpaSpecificationExecutor { UserEntity findByBeneficiaryId(Long beneficiaryId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java b/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java index 678ff913..f3371296 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/ApplicationAmendmentRequestService.java @@ -4,10 +4,12 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.model.request.ApplicationAmendmentPaginationRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import java.util.List; @@ -26,4 +28,5 @@ public interface ApplicationAmendmentRequestService { public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(HttpServletRequest request, Long applicationAmendmentId, ApplicationAmendmentRequestEnum status); void sendReminderEmail(HttpServletRequest request,Long amendmentId); + PageableResponseBean> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java b/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java index e12bae6a..30eed741 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; @@ -12,4 +13,7 @@ public interface UserActionService { public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List actionContext); public List getActionContextLabels(HttpServletRequest request, Long userId); + + public SummaryPageResponseBean getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest); + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/UserService.java b/src/main/java/net/gepafin/tendermanagement/service/UserService.java index 6a92a667..43e257d6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/UserService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/UserService.java @@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.*; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.util.JWTToken; @@ -47,4 +48,5 @@ public interface UserService { public UserEntity getUserEntityById(Long userId); List getAllUsers(HttpServletRequest request, List roleIds); + PageableResponseBean> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java index e2615a71..212a3041 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationAmendmentRequestServiceImpl.java @@ -8,10 +8,12 @@ import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; +import net.gepafin.tendermanagement.model.request.ApplicationAmendmentPaginationRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; @@ -149,4 +151,10 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm applicationAmendmentRequestDao.sendReminderEmail(amendmentId); } } + + @Override + public PageableResponseBean> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean) { + UserEntity user=validator.validateUser(request); + return applicationAmendmentRequestDao.getApplicationAmendmentByPaginnation(userId,amendmentPaginationRequestBean); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java index 65d692dc..192ebce8 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java @@ -5,6 +5,7 @@ import net.gepafin.tendermanagement.dao.UserActionDao; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.service.UserActionService; @@ -35,4 +36,10 @@ public class UserActionServiceImpl implements UserActionService { UserEntity user = validator.validateUserId(request, userId); return userActionDao.getActionContextLabels(request,user); } + + @Override + public SummaryPageResponseBean getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { + UserEntity user = validator.validateUserId(request, userId); + return userActionDao.getUserActionByPagination(user,userActionPaginationRequest); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java index b959ba61..f8d6aaf6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java @@ -11,6 +11,7 @@ import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UserReq; import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.*; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.util.JWTToken; @@ -130,4 +131,10 @@ public class UserServiceImpl implements UserService { UserEntity user=validator.validateUser(request); return userDao.getAllUsers(user, roleIds); } + + @Override + public PageableResponseBean> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean) { + UserEntity user=validator.validateUser(request); + return userDao.getUserByPagination(userPaginationRequestBean,user); + } } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java index 0918b918..ef921c3a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java @@ -9,11 +9,11 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; -import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; +import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -188,4 +188,17 @@ public interface ApplicationAmendmentRequestApi { @Parameter( required = true) @PathVariable(value = "amendmentId") Long amendmentId); + @Operation(summary = "Api to get all application amendment by pagination", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PostMapping(value = "/user/{userId}/pagination", produces = { "application/json" }) + ResponseEntity>>> getApplicationAmendmentByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, + @RequestBody ApplicationAmendmentPaginationRequestBean userActionPaginationRequest); + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java index 95d0f125..5cf39464 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java @@ -8,15 +8,14 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -46,4 +45,18 @@ public interface UserActionApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "/user/{userId}/action-context", produces = { "application/json" }) ResponseEntity>> getActionContextLabels(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId); + + @Operation(summary = "Api to get all user action by pagination", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PostMapping(value = "/user/{userId}/pagination", produces = { "application/json" }) + ResponseEntity> getUserActionByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, + @RequestBody UserActionPaginationRequest userActionPaginationRequest); + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java index 6dc45bec..2a3afdef 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java @@ -10,6 +10,8 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.*; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; +import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.util.JWTToken; @@ -243,9 +245,21 @@ public interface UserApi { @RequestMapping("favicon.ico") @ResponseBody void returnNoFavicon(); - - - + + @Operation(summary = "Api to get all user by pagination", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) + @PostMapping(value = "/pagination", produces = { "application/json" }) + ResponseEntity>>> getUserByPagination(HttpServletRequest request, + @RequestBody UserPaginationRequestBean userPaginationRequestBean); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java index d4707511..47f87706 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationAmendmentRequestController.java @@ -7,11 +7,9 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; -import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; -import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; -import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -187,4 +185,15 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.REMINDER_EMAIL_SENT_SUCCESS_MSG))); } + @Override + public ResponseEntity>>> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean) { + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_ALL_APPLICATION_AMENDMENT_BY_PAGINATION).build()); + + PageableResponseBean> listPageableResponseBean=applicationAmendmentRequestService.getApplicationAmendmentByPaginnation(request,userId,amendmentPaginationRequestBean); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(listPageableResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_DATA_FOR_AMENDMENT_SUCCESS_MSG))); + + } + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java index 18c30490..c7243199 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/AssignedApplicationsController.java @@ -94,10 +94,11 @@ public class AssignedApplicationsController implements AssignedApplicationsApi { @Override public ResponseEntity>>> getAllAssignedApplicationsByPagination(HttpServletRequest request, Long userId, AssignedApplicationPageableRequestBean assignedApplicationPageableRequestBean) { - loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_NOTIFICATION_BY_PAGINATION).build()); + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_ALL_ASSIGNED_APPLICATION_BY_PAGINATION).build()); - PageableResponseBean> notificationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean); - return ResponseEntity.status(HttpStatus.OK).body(new Response<>(notificationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.NOTIFICATION_FETCHED_SUCCESSFULLY))); + PageableResponseBean> assigenedApplicationResponses=assignedApplicationsService.getAllAssignedApplicationsByPagination(request, userId,assignedApplicationPageableRequestBean); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(assigenedApplicationResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java index c65fbe2f..95c05f5c 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java @@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; @@ -54,5 +55,16 @@ public class UserActionApiController implements UserActionApi { return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(actionContextResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.ACTION_CONTEXT_LABELS_FETCHED_SUCCESSFULLY))); } + + @Override + public ResponseEntity> getUserActionByPaginnation(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_ALL_USER_ACTION_BY_PAGINATION).build()); + + SummaryPageResponseBean userActionResponse= userActionService.getUserActionByPagination(request,userId,userActionPaginationRequest); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY))); + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java index 0d649943..7f36aac1 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java @@ -11,6 +11,7 @@ import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.*; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.util.JWTToken; @@ -247,5 +248,16 @@ public class UserApiController implements UserApi { public void returnNoFavicon() { // Do nothing } - + + @Override + public ResponseEntity>>> getUserByPagination(HttpServletRequest request, UserPaginationRequestBean userPaginationRequestBean) { + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_ALL_USER_BY_PAGINATION).build()); + + PageableResponseBean> users = userService.getUserByPagination(request,userPaginationRequestBean); + + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(users, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_USERS_SUCCESS_MSG))); + + } + } \ No newline at end of file From 3fb9cfa0f55f79bc5618b0c34ce1fbb7d75a7bf2 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 13 Feb 2025 15:48:24 +0530 Subject: [PATCH 3/5] updated code --- .../java/net/gepafin/tendermanagement/dao/UserActionDao.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java index a4f0730d..61c2e153 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java @@ -142,6 +142,7 @@ public class UserActionDao { responseBean.setResponse(action.getResponse()); responseBean.setCreatedDate(action.getCreatedDate()); responseBean.setUpdatedDate(action.getUpdatedDate()); + responseBean.setMethodType(action.getMethodType()); return responseBean; }).collect(Collectors.toList()); } From 48b6b148c04b9ff6a1a074ef7d58bac018738cbb Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 17 Feb 2025 12:50:21 +0530 Subject: [PATCH 4/5] Updated code --- .../gepafin/tendermanagement/web/rest/api/NotificationApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java index 8cccb46c..2af8e846 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/NotificationApi.java @@ -120,7 +120,7 @@ public interface NotificationApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PostMapping(value = "/user/{userId}/company/{companyId}/notifications/pagination", produces = "application/json") + @PostMapping(value = "/user/{userId}/company/{companyId}/pagination", produces = "application/json") ResponseEntity>>> getNotificationsByUserIdAndCompanyIdByPagination(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable(value = "userId") Long userId, @Parameter(description = "The company ID", required = true) @PathVariable(value = "companyId") Long companyId, From 2304e1cc7241b015fe782a6c08dbcb29ff0706ac Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 17 Feb 2025 15:42:11 +0530 Subject: [PATCH 5/5] Updated code --- .../tendermanagement/dao/UserActionDao.java | 14 +++++--------- .../model/response/SummaryPageResponseBean.java | 1 - .../service/UserActionService.java | 6 ++++-- .../service/impl/UserActionServiceImpl.java | 8 +++++--- .../rest/api/ApplicationAmendmentRequestApi.java | 4 ++-- .../web/rest/api/UserActionApi.java | 12 ++++++------ .../tendermanagement/web/rest/api/UserApi.java | 2 +- .../web/rest/api/impl/UserActionApiController.java | 10 ++++++---- 8 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java index a4f0730d..c05cb03e 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserActionDao.java @@ -47,17 +47,14 @@ public class UserActionDao { @Autowired private RoleActionContextRepository roleActionContextRepository; - public SummaryPageResponseBean getUserAction(HttpServletRequest request, UserEntity userEntity, TimePeriodEnum timeFilter, List actionContext){ + public SummaryPageResponseBean getUserAction(HttpServletRequest request, UserEntity userEntity){ Long numberOfLoginAttempts = userActionsRepository.countUserLoginAttempts(userEntity.getId()); Long applicationsProcessed = assignedApplicationsRepository.countAssignedApplicationsByUserId(userEntity.getId()); - List userActions = getFilterUserActions(userEntity.getId(),timeFilter,actionContext); - - return null; -// createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed,userActions); + return createSummaryPageResponse(userEntity,numberOfLoginAttempts,applicationsProcessed); } - public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed,PageableResponseBean> userActions){ + public SummaryPageResponseBean createSummaryPageResponse(UserEntity user, Long numberOfLoginAttempts, Long applicationsProcessed){ SummaryPageResponseBean response = new SummaryPageResponseBean(); response.setRole(user.getRoleEntity().getRoleName()); response.setLastLogin(user.getLastLogin()); @@ -66,7 +63,6 @@ public class UserActionDao { response.setEmail(user.getEmail()); response.setNumberOfLoginAttempts(numberOfLoginAttempts); response.setApplicationsProcessed(applicationsProcessed); - response.setUserActions(userActions); return response; } @@ -162,7 +158,7 @@ public class UserActionDao { return responseBean; }).collect(Collectors.toList()); } - public SummaryPageResponseBean getUserActionByPagination(UserEntity user, UserActionPaginationRequest userActionPaginationRequest) { + public PageableResponseBean> getUserActionByPagination(UserEntity user, UserActionPaginationRequest userActionPaginationRequest) { Integer pageNo = null; Integer pageLimit = null; if (userActionPaginationRequest.getGlobalFilters() != null) { @@ -192,7 +188,7 @@ public class UserActionDao { pageableResponseBean.setTotalRecords(entityPage.getTotalElements()); pageableResponseBean.setPageSize(entityPage.getSize()); - return createSummaryPageResponse(user,numberOfLoginAttempts,applicationsProcessed,pageableResponseBean); + return pageableResponseBean; } public Specification search(UserActionPaginationRequest userActionPaginationRequest,UserEntity userEntity) { return (root, query, criteriaBuilder) -> { diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java index 9c1c7585..a5b9fc19 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/SummaryPageResponseBean.java @@ -14,5 +14,4 @@ public class SummaryPageResponseBean { private LocalDateTime registrationDate; private Long numberOfLoginAttempts; private Long applicationsProcessed; - private PageableResponseBean> userActions; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java b/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java index 30eed741..e051c825 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/UserActionService.java @@ -5,15 +5,17 @@ import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; +import net.gepafin.tendermanagement.model.response.UserActionResponseBean; import java.util.List; public interface UserActionService { - public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List actionContext); + public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId); public List getActionContextLabels(HttpServletRequest request, Long userId); - public SummaryPageResponseBean getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest); + public PageableResponseBean> getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java index 192ebce8..7424c4ac 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/UserActionServiceImpl.java @@ -7,7 +7,9 @@ import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; +import net.gepafin.tendermanagement.model.response.UserActionResponseBean; import net.gepafin.tendermanagement.service.UserActionService; import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; @@ -26,9 +28,9 @@ public class UserActionServiceImpl implements UserActionService { @Override - public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List actionContext) { + public SummaryPageResponseBean getUserAction(HttpServletRequest request, Long userId) { UserEntity user = validator.validateUserId(request, userId); - return userActionDao.getUserAction(request,user,timeFilter,actionContext); + return userActionDao.getUserAction(request,user); } @Override @@ -38,7 +40,7 @@ public class UserActionServiceImpl implements UserActionService { } @Override - public SummaryPageResponseBean getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { + public PageableResponseBean> getUserActionByPagination(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { UserEntity user = validator.validateUserId(request, userId); return userActionDao.getUserActionByPagination(user,userActionPaginationRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java index ef921c3a..7c813073 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationAmendmentRequestApi.java @@ -76,7 +76,7 @@ public interface ApplicationAmendmentRequestApi { @GetMapping(value = "", produces = "application/json") ResponseEntity> getApplicationAmendmentRequestById(HttpServletRequest request,@Parameter(description = "The application amendment id", required = true) @RequestParam(value = "id", required = true) Long id); - @Operation(summary = "Api to get all applications amendment request by preInstructor user Id", + @Operation(summary = "Api to get all applications amendment request by preInstructor user Id (deprecated)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -104,7 +104,7 @@ public interface ApplicationAmendmentRequestApi { @Parameter(description = "The Application Amendment id", required = true) @PathVariable("id") Long id, @Parameter(description = "Assigned Application request object", required = true) @Valid @RequestBody ApplicationAmendmentRequestBean applicationAmendmentRequestBean); - @Operation(summary = "Api to get all applications amendment request by beneficary user Id", + @Operation(summary = "Api to get all applications amendment request by beneficary user Id (deprecated)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java index 5cf39464..6aed00a0 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserActionApi.java @@ -10,7 +10,9 @@ import net.gepafin.tendermanagement.enums.TimePeriodEnum; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; +import net.gepafin.tendermanagement.model.response.UserActionResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; @@ -20,7 +22,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; public interface UserActionApi { - @Operation(summary = "Api to get user action", + @Operation(summary = "Api to get user summary ", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -30,9 +32,7 @@ public interface UserActionApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "/user/{userId}", produces = { "application/json" }) - ResponseEntity> getUserAction(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, - @Parameter(description = "Time Filter") @RequestParam(value = "timeFilter", required = false) TimePeriodEnum timeFilter, - @Parameter(description = "Action Context") @RequestParam(value = "actionContext", required = false) List actionContext); + ResponseEntity> getUserAction(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId); @Operation(summary = "Api to get action context label", responses = { @@ -56,7 +56,7 @@ public interface UserActionApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PostMapping(value = "/user/{userId}/pagination", produces = { "application/json" }) - ResponseEntity> getUserActionByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, - @RequestBody UserActionPaginationRequest userActionPaginationRequest); + ResponseEntity>>> getUserActionByPaginnation(HttpServletRequest request, @Parameter(description = "The user id", required = true) @PathVariable("userId") Long userId, + @RequestBody UserActionPaginationRequest userActionPaginationRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java index 2a3afdef..d9321b20 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/UserApi.java @@ -227,7 +227,7 @@ public interface UserApi { ResponseEntity> validateNewUserToken(HttpServletRequest request, @Parameter(description = "The spid token", required = true) @PathVariable("token") String token); - @Operation(summary = "Api to get all users", + @Operation(summary = "Api to get all users (deprecated)", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java index 95c05f5c..26dfd2b3 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserActionApiController.java @@ -9,7 +9,9 @@ import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.UserActionPaginationRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.ActionContextLabelResponse; +import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.SummaryPageResponseBean; +import net.gepafin.tendermanagement.model.response.UserActionResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.UserActionService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -34,12 +36,12 @@ public class UserActionApiController implements UserActionApi { private LoggingUtil loggingUtil; @Override - public ResponseEntity> getUserAction(HttpServletRequest request, Long userId, TimePeriodEnum timeFilter, List actionContext) { + public ResponseEntity> getUserAction(HttpServletRequest request, Long userId) { /** This code is responsible for creating user action logs for the "get user action" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) .actionContext(UserActionContextEnum.GET_USER_ACTION).build()); - SummaryPageResponseBean userActionResponse= userActionService.getUserAction(request,userId,timeFilter,actionContext); + SummaryPageResponseBean userActionResponse= userActionService.getUserAction(request,userId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY))); } @@ -57,11 +59,11 @@ public class UserActionApiController implements UserActionApi { } @Override - public ResponseEntity> getUserActionByPaginnation(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { + public ResponseEntity>>> getUserActionByPaginnation(HttpServletRequest request, Long userId, UserActionPaginationRequest userActionPaginationRequest) { loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) .actionContext(UserActionContextEnum.GET_ALL_USER_ACTION_BY_PAGINATION).build()); - SummaryPageResponseBean userActionResponse= userActionService.getUserActionByPagination(request,userId,userActionPaginationRequest); + PageableResponseBean> userActionResponse= userActionService.getUserActionByPagination(request,userId,userActionPaginationRequest); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(userActionResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.USER_ACTION_FETCHED_SUCCESSFULLY)));