diff --git a/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java index 285702f1..0fde4365 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/BeneficiaryPreferredCallDao.java @@ -77,17 +77,18 @@ public class BeneficiaryPreferredCallDao { // } public void deleteBeneficiaryPreferredCallById(HttpServletRequest request, Long id) { - log.info("Deleting beneficiary preferred call with ID: {}", id); + log.info("Soft deleting beneficiary preferred call with ID: {}", id); BeneficiaryPreferredCallEntity entity = validateBeneficiaryPreferredCall(id); validator.validateUserId(request, entity.getUserId()); - beneficiaryPreferredCallRepository.deleteById(id); - log.info("Beneficiary preferred call deleted with ID: {}", id); + entity.setIsDeleted(true); + beneficiaryPreferredCallRepository.save(entity); + log.info("Beneficiary preferred call soft deleted with ID: {}", id); } public List getAllBeneficiaryPreferredCalls(HttpServletRequest request) { UserEntity userEntity = validator.validateUser(request); log.info("Fetching all beneficiary preferred calls"); - List calls = beneficiaryPreferredCallRepository.findByUserId(userEntity.getId()) + List calls = beneficiaryPreferredCallRepository.findByUserIdAndIsDeletedFalse(userEntity.getId()) .stream() .map(this::convertEntityToResponse) .collect(Collectors.toList()); @@ -97,7 +98,7 @@ public class BeneficiaryPreferredCallDao { private BeneficiaryPreferredCallEntity validateBeneficiaryPreferredCall(Long id) { log.info("Validating beneficiary preferred call with ID: {}", id); - return beneficiaryPreferredCallRepository.findById(id) + return beneficiaryPreferredCallRepository.findByIdAndIsDeletedFalse(id) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.BENEFICIARY_CALL_NOT_FOUND))); } @@ -123,7 +124,7 @@ public class BeneficiaryPreferredCallDao { } public List getBeneficiaryPreferredCallByUserId(UserEntity userEntity, Long companyId) { - List calls = beneficiaryPreferredCallRepository.findByUserIdAndCompanyId(userEntity.getId(), companyId); + List calls = beneficiaryPreferredCallRepository.findByUserIdAndCompanyIdAndIsDeletedFalse(userEntity.getId(), companyId); return calls.stream() .map(this::convertEntityToResponse) .collect(Collectors.toList()); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 39736a57..c9e330d5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -10,12 +10,15 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.model.response.*; +import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.Utils; @@ -26,16 +29,7 @@ import org.springframework.util.StringUtils; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; -import net.gepafin.tendermanagement.entities.CallEntity; -import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; -import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity; -import net.gepafin.tendermanagement.entities.DocumentEntity; -import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity; -import net.gepafin.tendermanagement.entities.FaqEntity; -import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; -import net.gepafin.tendermanagement.entities.RegionEntity; -import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; @@ -45,13 +39,6 @@ import net.gepafin.tendermanagement.model.request.EvaluationCriteriaReq; import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.request.LookUpDataReq; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; -import net.gepafin.tendermanagement.repositories.CallRepository; -import net.gepafin.tendermanagement.repositories.CallTargetAudienceChecklistRepository; -import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository; -import net.gepafin.tendermanagement.repositories.DocumentRepository; -import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository; -import net.gepafin.tendermanagement.repositories.FaqRepository; -import net.gepafin.tendermanagement.repositories.RegionRepository; import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -104,6 +91,9 @@ public class CallDao { @Autowired private S3PathConfig s3PathConfig; + @Autowired + private BeneficiaryPreferredCallRepository beneficiaryPreferredCallRepository; + public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, UserEntity userEntity) { createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); @@ -435,10 +425,22 @@ public class CallDao { Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); } - public CallResponse getCallById(CallEntity callEntity) { - return getCallResponseBean(callEntity); + public CallResponse getCallById(UserEntity user, CallEntity callEntity) { + Long userId = user.getId(); + Long callId = callEntity.getId(); + + BeneficiaryPreferredCallEntity preferredCall = beneficiaryPreferredCallRepository + .findByUserIdAndCallIdInAndIsDeletedFalse(userId, List.of(callId)) + .stream() + .findFirst() + .orElse(null); + CallResponse callResponse = getCallResponseBean(callEntity); + callResponse.setPreferredCallId(preferredCall != null ? preferredCall.getId() : null); + + return callResponse; } + public CallResponse createCallStep2(CallEntity callEntity, CreateCallRequestStep2 createCallRequest, UserEntity user) { validateUpdate(callEntity); setIfUpdated(callEntity::getThreshold, callEntity::setThreshold, createCallRequest.getThreshold()); @@ -652,17 +654,44 @@ public class CallDao { } public List getAllCalls(UserEntity user) { - String type=user.getRoleEntity().getRoleType(); - List callStatusList =CallStatusEnum.getStatusValues(); + String type = user.getRoleEntity().getRoleType(); + List callStatusList = CallStatusEnum.getStatusValues(); + if (Boolean.FALSE.equals(ROLE_SUPER_ADMIN.getValue().equals(type))) { callStatusList = List.of(CallStatusEnum.PUBLISH.getValue()); } + List calls = callRepository.findByStatusInAndHubId(callStatusList, user.getHub().getId()); + List callIds = calls.stream().map(CallEntity::getId).collect(Collectors.toList()); + + Map preferredCallsMap = getBeneficiaryPreferredCallsForUser(user, callIds); + return calls.stream() - .map(this::convertToCallDetailsResponseBean) + .map(call -> { + CallDetailsResponseBean responseBean = convertToCallDetailsResponseBean(call); + String key = user.getId() + "_" + call.getId(); + + BeneficiaryPreferredCallEntity preferredCall = preferredCallsMap.get(key); + Long preferredId = (preferredCall != null && !preferredCall.getIsDeleted()) ? preferredCall.getId() : null; + responseBean.setPreferredCallId(preferredId); + + return responseBean; + }) .collect(Collectors.toList()); } + public Map getBeneficiaryPreferredCallsForUser(UserEntity user, List callIds) { + List beneficiaryPreferredCalls = beneficiaryPreferredCallRepository + .findByUserIdAndCallIdInAndIsDeletedFalse(user.getId(), callIds); + + return beneficiaryPreferredCalls.stream() + .collect(Collectors.toMap( + call -> user.getId() + "_" + call.getCallId(), + call -> call + )); + } + + public CallResponse validateCallData(CallEntity callEntity) { validateUpdate(callEntity); CallResponse callResponseBean = getCallResponseBean(callEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/BeneficiaryPreferredCallEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/BeneficiaryPreferredCallEntity.java index 83fbcc95..7a30c267 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/BeneficiaryPreferredCallEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/BeneficiaryPreferredCallEntity.java @@ -34,4 +34,6 @@ public class BeneficiaryPreferredCallEntity extends BaseEntity{ @Column(name = "STATUS", length = 255) private String status; + @Column(name="IS_DELETED") + private Boolean isDeleted; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java index 6338949e..4028b789 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java @@ -54,4 +54,5 @@ public class CallDetailsResponseBean { private LocalDateTime updatedDate; + private Long preferredCallId; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java index b26460ab..43655e9c 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java @@ -73,6 +73,7 @@ public class CallResponse { private String currentStep; + private Long preferredCallId; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java index dd8d341e..7e01bbc0 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java @@ -6,13 +6,17 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface BeneficiaryPreferredCallRepository extends JpaRepository { - List findByBeneficiaryId(Long beneficiaryId); - List findByUserId(Long userId); + List findByBeneficiaryIdAndIsDeletedFalse(Long beneficiaryId); + List findByUserIdAndIsDeletedFalse(Long userId); @Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall where preferredCall.userId=:userId AND (:companyId is null OR preferredCall.companyId=:companyId)") - List findByUserIdAndCompanyId(@Param("userId") Long userId, @Param("companyId") Long companyId); + List findByUserIdAndCompanyIdAndIsDeletedFalse(@Param("userId") Long userId, @Param("companyId") Long companyId); List findByBeneficiaryIdAndCompanyId(Long beneficiaryId,Long companyId); + public List findByUserIdAndCallIdInAndIsDeletedFalse(Long userId, List callIds); + + Optional findByIdAndIsDeletedFalse(Long id); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java index 8004008b..487745b9 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -57,7 +57,7 @@ public class CallServiceImpl implements CallService { public CallResponse getCallById(HttpServletRequest request, Long callId) { UserEntity user = validator.validateUser(request); CallEntity call = validator.validateUserWithCall(user, callId); - return callDao.getCallById(call); + return callDao.getCallById(user,call); } @Override diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 998e3bb9..15dad70f 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1720,8 +1720,16 @@ + + + + + + + +