From 22e72f6cd4ddff32ebec712570d3cac22fb11610 Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 28 Aug 2024 01:52:25 +0530 Subject: [PATCH] Created call api's in 2 steps and for update call --- .../gepafin/tendermanagement/dao/CallDao.java | 266 +++++++++++++----- .../tendermanagement/dao/DocumentDao.java | 7 +- .../gepafin/tendermanagement/dao/UserDao.java | 6 + .../CallTargetAudienceChecklistEntity.java | 3 + .../entities/DocumentEntity.java | 16 +- .../entities/EvaluationCriteriaEntity.java | 17 +- .../tendermanagement/entities/FaqEntity.java | 21 +- .../model/request/CreateCallRequestStep2.java | 4 - .../model/request/EvaluationCriteriaReq.java | 2 +- .../model/request/FaqReq.java | 1 + .../model/request/LookUpDataReq.java | 4 +- .../EvaluationCriteriaResponseBean.java | 2 +- .../model/response/FaqResponseBean.java | 2 +- ...CallTargetAudienceChecklistRepository.java | 5 +- .../repositories/DocumentRepository.java | 7 +- .../EvaluationCriteriaRepository.java | 5 +- .../repositories/FaqRepository.java | 5 +- .../tendermanagement/service/UserService.java | 3 + .../service/impl/UserServiceImpl.java | 6 + .../db/changelog/db.changelog-1.0.0.xml | 24 ++ 20 files changed, 287 insertions(+), 119 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index a1d7ebbd..80a1e1cc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -4,8 +4,8 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; @@ -44,7 +44,7 @@ import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository; import net.gepafin.tendermanagement.repositories.FaqRepository; import net.gepafin.tendermanagement.repositories.LookUpDataRepository; import net.gepafin.tendermanagement.repositories.RegionRepository; -import net.gepafin.tendermanagement.repositories.UserRepository; +import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -77,17 +77,18 @@ public class CallDao { private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; @Autowired - private UserRepository userRepository; + private UserService userService; public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { - CreateCallResponseBean createCallResponseBean = null; CallEntity callEntity = convertToCallEntity(createCallRequest); - List faqEntities = convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); - List amiedTo = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, + convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); + convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, LookUpDataTypeEnum.AIMED_TO); - createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(), - Collections.emptyList(), faqEntities, Collections.emptyList()); - createCallResponseBean.setAimedTo(amiedTo); +// createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(), +// Collections.emptyList(), faqEntities, Collections.emptyList()); +// createCallResponseBean.setAimedTo(amiedTo); +// createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); + CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; @@ -118,62 +119,87 @@ public class CallDao { } public List convertToEvaluationCriteriaEntities( - List criteriaReqList, CallEntity callEntity) { + List criteriaReqList, CallEntity callEntity, LookUpDataTypeEnum type) { + if (criteriaReqList == null) { + return null; + } + List existingCriteria = evaluationCriteriaRepository.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue()); + + List incomingIds = criteriaReqList.stream().map(EvaluationCriteriaReq::getId) + .filter(id -> id != null && id > 0).collect(Collectors.toList()); + + existingCriteria.stream().filter(criteria -> !incomingIds.contains(criteria.getId())).forEach(this::softDeleteEvaluationCriteria); + List evaluationCriteriaEntities = criteriaReqList.stream() - .map(req -> convertToEvaluationCriteriaEntity(req, callEntity)).collect(Collectors.toList()); + .map(req -> convertToEvaluationCriteriaEntity(req, callEntity, type)).collect(Collectors.toList()); evaluationCriteriaRepository.saveAll(evaluationCriteriaEntities); return evaluationCriteriaEntities; } + + private void softDeleteEvaluationCriteria(EvaluationCriteriaEntity evaluationCriteriaEntity) { + evaluationCriteriaEntity.setIsDeleted(true); + evaluationCriteriaRepository.save(evaluationCriteriaEntity); + } private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq, - CallEntity callEntity) { - EvaluationCriteriaEntity criteriaEntity = new EvaluationCriteriaEntity(); - LookUpDataEntity lookUpDataEntity = getOrCreateLookUpData(criteriaReq, LookUpDataTypeEnum.EVALUATION_CRITERIA); - criteriaEntity.setLookupData(lookUpDataEntity); - criteriaEntity.setScore(criteriaReq.getScore()); - criteriaEntity.setCall(callEntity); + CallEntity callEntity, LookUpDataTypeEnum type) { + EvaluationCriteriaEntity criteriaEntity = null; + LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(criteriaReq, type); + if (criteriaReq.getId() == null && criteriaReq.getId().equals(0l)) { + criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId()) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); + } else { + criteriaEntity = new EvaluationCriteriaEntity(); + criteriaEntity.setCall(callEntity); + criteriaEntity.setLookupData(lookupDataEntity); + criteriaEntity.setIsDeleted(false); + } + setIfUpdated(criteriaEntity::getScore, criteriaEntity::setScore, criteriaReq.getScore()); + if (Boolean.FALSE.equals(criteriaEntity.getLookupData().getId().equals(lookupDataEntity.getId()))) { + criteriaEntity.setLookupData(lookupDataEntity); + } return criteriaEntity; } - private LookUpDataEntity getOrCreateLookUpData(EvaluationCriteriaReq criteriaReq, LookUpDataTypeEnum typeEnum) { - LookUpDataEntity lookUpDataEntity = null; - if (criteriaReq.getLookUpDataId() == null || criteriaReq.getLookUpDataId().equals(0l)) { - validateEvolutionCrieteriaEntity(criteriaReq.getValue()); - lookUpDataEntity = new LookUpDataEntity(); - lookUpDataEntity.setValue(criteriaReq.getValue()); - lookUpDataEntity.setType(typeEnum.getValue()); - lookUpDataRepository.save(lookUpDataEntity); - } else { - lookUpDataEntity = lookUpDataRepository.findById(null) - .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG))); + + public List convertToDocumentEntities(List documentReqList, CallEntity callEntity, + DocumentTypeEnum documentType) { + if (documentReqList == null) { + return null; } + + List existingDocuments = documentRepository + .findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), documentType.getValue()); - return lookUpDataEntity; - } + List incomingIds = documentReqList.stream().map(DocumentReq::getId).filter(id -> id != null && id > 0) + .collect(Collectors.toList()); - public List convertToDocumentEntities(List documentReqList, CallEntity callEntity) { + existingDocuments.stream().filter(document -> !incomingIds.contains(document.getId())) + .forEach(this::softDeleteDocument); List documentEntities = documentReqList.stream() .map(req -> convertToDocumentEntity(req, callEntity)).collect(Collectors.toList()); documentRepository.saveAll(documentEntities); return documentEntities; } + + private void softDeleteDocument(DocumentEntity documentEntity) { + documentEntity.setIsDeleted(true); + documentRepository.save(documentEntity); + } private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) { - validateDocumentEntity(documentReq.getId(), documentReq.getFileName()); - DocumentEntity documentEntity = documentRepository.findById(documentReq.getId()) + validateDocumentEntity(documentReq.getId()); + DocumentEntity documentEntity = documentRepository.findByIdAndCallIdAndIsDeletedFalse(documentReq.getId(), callEntity.getId()) .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); -// if(documentEntity==null){ -// throw ; -// } -// documentEntity.setFileName(documentReq.getFileName()); -// documentEntity.setFilePath(documentReq.getUrl()); -// documentEntity.setCall(callEntity); return documentEntity; } public List convertToFaqEntities(List faqReqList, CallEntity callEntity, Long userId) { + if (faqReqList == null) { + return null; + } List faqEntities = faqReqList.stream().map(req -> convertToFaqEntity(req, callEntity, userId)) .collect(Collectors.toList()); faqRepository.saveAll(faqEntities); @@ -183,9 +209,8 @@ public class CallDao { private FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, Long userId) { FaqEntity faqEntity = new FaqEntity(); validateFaqEntity(faqReq.getQuestion()); - UserEntity userEntity = userRepository.findById(userId) - .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG))); + UserEntity userEntity = userService.validateUser(userId); + faqEntity.setUser(userEntity); faqEntity.setIsVisible(true); if (faqReq.getIsVisible() != null) { @@ -199,6 +224,7 @@ public class CallDao { faqEntity.setResponseShort(faqReq.getResponseShort()); faqEntity.setResponse(faqReq.getResponse()); faqEntity.setCall(callEntity); + faqEntity.setIsDeleted(false); return faqEntity; } @@ -209,18 +235,14 @@ public class CallDao { } } - public void validateDocumentEntity(Long documentId, String name) { + public void validateDocumentEntity(Long documentId) { if (documentId == null) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DOCUMENT_ID_NOT_FOUND)); } - -// if (!StringUtils.hasText(name)) { -// throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); -// } } - public void validateEvolutionCrieteriaEntity(String name) { + public void validateEvaluationCriteriaEntity(String name) { if (!StringUtils.hasText(name)) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); @@ -335,8 +357,6 @@ public class CallDao { List lookUpDataEntities = lookUpData.stream() .map(req -> convertLookUpDataRequestIntoLookUpDataEntity(req, type)).collect(Collectors.toList()); - lookUpDataRepository.saveAll(lookUpDataEntities); - return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities); } @@ -348,6 +368,7 @@ public class CallDao { callTargetAudienceChecklistEntity.setIsValidated(false); callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity); callTargetAudienceChecklistEntity.setCall(callEntity); + callTargetAudienceChecklistEntity.setIsDeleted(false); callTargetAudienceChecklistEntity = callTargetAudienceChecklistRepository .save(callTargetAudienceChecklistEntity); lookUpDataResponses.add(convertToLookUpDataResponseBean(callTargetAudienceChecklistEntity)); @@ -361,7 +382,7 @@ public class CallDao { LookUpDataEntity newEntity = new LookUpDataEntity(); newEntity.setValue(req.getValue()); newEntity.setType(type.getValue()); - return newEntity; + return lookUpDataRepository.save(newEntity); } return lookUpDataRepository.findById(req.getLookUpDataId()) @@ -388,28 +409,29 @@ public class CallDao { } public CreateCallResponseBean createCallStep2(CreateCallRequestStep2 createCallRequest, Long userId) { - CreateCallResponseBean createCallResponseBean = null; CallEntity callEntity = callRepository.findById(createCallRequest.getCallId()) .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); - callEntity.setThreshold(createCallRequest.getThreshold()); - callEntity.setStatus(createCallRequest.getStatus().getValue()); + setIfUpdated(callEntity::getThreshold, callEntity::setThreshold, createCallRequest.getThreshold()); callRepository.save(callEntity); - List evaluationCriteriaEntities = convertToEvaluationCriteriaEntities( - createCallRequest.getCriteria(), callEntity); - List documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity); - List imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity); - List checkList = convertLookUpDataEntities(createCallRequest.getCheckList(), callEntity, - LookUpDataTypeEnum.CHECKLIST); - List faqEntities = faqRepository.findByCallId(callEntity.getId()); - List amiedTo = callTargetAudienceChecklistRepository - .findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() - .map(this::convertToLookUpDataResponseBean).toList(); - createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, - documentEntities, faqEntities, imageEntities); - createCallResponseBean.setAimedTo(amiedTo); - createCallResponseBean.setCheckList(checkList); + convertToEvaluationCriteriaEntities(createCallRequest.getCriteria(), callEntity, LookUpDataTypeEnum.EVALUATION_CRITERIA); + + convertToDocumentEntities(createCallRequest.getDocs(), callEntity, DocumentTypeEnum.DOCUMENT); + + convertToDocumentEntities(createCallRequest.getImages(), callEntity, DocumentTypeEnum.IMAGES); + + updateLookUpData(callEntity, createCallRequest.getCheckList(), LookUpDataTypeEnum.CHECKLIST); + +// List faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); +// List amiedTo = callTargetAudienceChecklistRepository +// .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() +// .map(this::convertToLookUpDataResponseBean).toList(); +// createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, +// documentEntities, faqEntities, imageEntities); +// createCallResponseBean.setAimedTo(amiedTo); +// createCallResponseBean.setCheckList(checkList); + CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_2); return createCallResponseBean; } @@ -422,10 +444,10 @@ public class CallDao { Boolean isValid = true; if (startDate != null && endDate != null && startDate.isAfter(endDate)) { isValid = false; - } else if (startDate != null && callEntity.getEndDate() != null + } else if (startDate != null && endDate == null && callEntity.getEndDate() != null && startDate.isAfter(callEntity.getEndDate().toLocalDate())) { isValid = false; - } else if (endDate != null && callEntity.getStartDate() != null + } else if (startDate == null && endDate != null && callEntity.getStartDate() != null && callEntity.getStartDate().toLocalDate().isAfter(endDate)) { isValid = false; } @@ -438,6 +460,7 @@ public class CallDao { public CreateCallResponseBean updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) { CallEntity callEntity = getCallById(callId); + UserEntity userEntity = userService.validateUser(userId); isValidDateRange(updateCallRequest, callEntity); setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName()); setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort, @@ -451,27 +474,114 @@ public class CallDao { setIfUpdated(callEntity::getDocumentationRequested, callEntity::setDocumentationRequested, updateCallRequest.getDocumentationRequested()); setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); - + updateLookUpData(callEntity, updateCallRequest.getAimedTo(), LookUpDataTypeEnum.AIMED_TO); + updateFaq(callEntity, updateCallRequest.getFaq(), userEntity); CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; } + private void updateFaq(CallEntity callEntity, List faqReqList, UserEntity userEntity) { + if(faqReqList==null) { + return; + } + List existingFaqs = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); + List incomingIds = faqReqList.stream().map(FaqReq::getId).filter(Objects::nonNull).filter(id -> id > 0) + .collect(Collectors.toList()); + existingFaqs.stream().filter(faq -> !incomingIds.contains(faq.getId())).forEach(this::softDeleteFaq); + faqReqList.forEach(faqReq -> createOrUpdateFaq(faqReq, callEntity, userEntity)); + + } + + private void softDeleteFaq(FaqEntity faqEntity) { + faqEntity.setIsDeleted(true); + faqRepository.save(faqEntity); + } + + private void createOrUpdateFaq(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity) { + FaqEntity faqEntity = null; + + if (isExistingFaq(faqReq)) { + faqEntity = faqRepository.findById(faqReq.getId()) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); + } else { + faqEntity = new FaqEntity(); + faqEntity.setCall(callEntity); + faqEntity.setUser(userEntity); + faqEntity.setIsDeleted(false); + } + + setIfUpdated(faqEntity::getQuestionShort, faqEntity::setQuestionShort, faqReq.getQuestionShort()); + setIfUpdated(faqEntity::getQuestion, faqEntity::setQuestion, faqReq.getQuestion()); + setIfUpdated(faqEntity::getResponseShort, faqEntity::setResponseShort, faqReq.getResponseShort()); + setIfUpdated(faqEntity::getResponse, faqEntity::setResponse, faqReq.getResponse()); + setIfUpdated(faqEntity::getIsVisible, faqEntity::setIsVisible, faqReq.getIsVisible()); + faqRepository.save(faqEntity); + } + + private boolean isExistingFaq(FaqReq faqReq) { + return faqReq.getId() != null && faqReq.getId() > 0; + } + + private void updateLookUpData(CallEntity callEntity, List lookupDataReqList, LookUpDataTypeEnum type) { + if (lookupDataReqList == null) { + return; + } + List existingChecklist = callTargetAudienceChecklistRepository + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue()); + List incomingIds = lookupDataReqList.stream().map(LookUpDataReq::getLookUpDataId) + .filter(id -> id != null && id > 0).collect(Collectors.toList()); + existingChecklist.stream().filter(checklist -> !incomingIds.contains(checklist.getLookupData().getId())) + .forEach(this::softDeleteCallTargetAudienceChecklist); + lookupDataReqList + .forEach(lookUpDataReq -> createOrUpdateCallTargetAudienceChecklist(lookUpDataReq, callEntity, type)); + } + + private void createOrUpdateCallTargetAudienceChecklist(LookUpDataReq lookUpDataReq, CallEntity callEntity, + LookUpDataTypeEnum type) { + CallTargetAudienceChecklistEntity checklistEntity = null; + LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(lookUpDataReq, type); + if (lookUpDataReq.getId() != null && lookUpDataReq.getId() > 0) { + checklistEntity = callTargetAudienceChecklistRepository.findById(lookUpDataReq.getId()) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); + + if (Boolean.FALSE.equals(checklistEntity.getLookupData().getId().equals(lookupDataEntity.getId()))) { + checklistEntity.setLookupData(lookupDataEntity); + } + } else { + checklistEntity = new CallTargetAudienceChecklistEntity(); + checklistEntity.setCall(callEntity); + checklistEntity.setLookupData(lookupDataEntity); + checklistEntity.setIsValidated(false); + checklistEntity.setIsDeleted(false); + } + + callTargetAudienceChecklistRepository.save(checklistEntity); + } + + private void softDeleteCallTargetAudienceChecklist( + CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { + callTargetAudienceChecklistEntity.setIsDeleted(true); + callTargetAudienceChecklistRepository.save(callTargetAudienceChecklistEntity); + } + private CreateCallResponseBean getCallResponseBean(CallEntity callEntity) { - List documentEntities = documentRepository.findByCallIdAndType(callEntity.getId(), + List documentEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.DOCUMENT.getValue()); - List imageEntities = documentRepository.findByCallIdAndType(callEntity.getId(), + List imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.DOCUMENT.getValue()); - List faqEntities = faqRepository.findByCallId(callEntity.getId()); + List faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); List amiedTo = callTargetAudienceChecklistRepository - .findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() .map(this::convertToLookUpDataResponseBean).toList(); List checkList = callTargetAudienceChecklistRepository - .findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.CHECKLIST.getValue()).stream() + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.CHECKLIST.getValue()).stream() .map(this::convertToLookUpDataResponseBean).toList(); List evaluationCriteriaEntities = evaluationCriteriaRepository - .findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); + .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); CreateCallResponseBean createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, documentEntities, faqEntities, imageEntities); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java index f9603b70..c5911465 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java @@ -18,7 +18,6 @@ import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.repositories.DocumentRepository; import net.gepafin.tendermanagement.service.AmazonS3Service; -import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -48,6 +47,7 @@ public class DocumentDao { documentEntity.setFileName(fileName); documentEntity.setType(fileType.getValue()); documentEntity.setFilePath(filepath); + documentEntity.setIsDeleted(false); documentEntities.add(documentEntity); } catch (IOException e) {} } @@ -62,9 +62,8 @@ public class DocumentDao { .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); - String fileName = Utils.extractFileName(documentEntity.getFilePath()); - amazonS3Service.delete(fileName); - documentRepository.delete(documentEntity); + documentEntity.setIsDeleted(true); + documentRepository.save(documentEntity); } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index 0393c176..feed67e5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -149,4 +149,10 @@ public class UserDao { log.info("Login successful for email: {}", loginReq.getEmail()); return jwtToken; } + + public UserEntity validateUser(Long userId) { + return userRepository.findById(userId) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/CallTargetAudienceChecklistEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/CallTargetAudienceChecklistEntity.java index be94ee59..6b14df58 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/CallTargetAudienceChecklistEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/CallTargetAudienceChecklistEntity.java @@ -18,6 +18,9 @@ public class CallTargetAudienceChecklistEntity extends BaseEntity{ @Column(name = "IS_VALIDATED") private Boolean isValidated; + + @Column(name ="IS_DELETED", nullable = false) + private Boolean isDeleted = false; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java index 5a15351c..057ca421 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java @@ -1,17 +1,15 @@ package net.gepafin.tendermanagement.entities; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.AllArgsConstructor; -import lombok.Builder; @Entity @Table(name = "DOCUMENT") @Data -@NoArgsConstructor -@AllArgsConstructor -@Builder public class DocumentEntity extends BaseEntity{ @Column(name = "FILE_NAME", length = 255) private String fileName; @@ -28,4 +26,8 @@ public class DocumentEntity extends BaseEntity{ @Column(name = "DESCRIPTION", columnDefinition = "TEXT") private String description; + + @Column(name ="IS_DELETED", nullable = false) + private Boolean isDeleted = false; + } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EvaluationCriteriaEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EvaluationCriteriaEntity.java index f6178779..39b3eb05 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/EvaluationCriteriaEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/EvaluationCriteriaEntity.java @@ -1,17 +1,15 @@ package net.gepafin.tendermanagement.entities; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.AllArgsConstructor; -import lombok.Builder; @Entity @Table(name = "EVALUATION_CRITERIA") @Data -@NoArgsConstructor -@AllArgsConstructor -@Builder public class EvaluationCriteriaEntity extends BaseEntity { @ManyToOne @@ -23,6 +21,9 @@ public class EvaluationCriteriaEntity extends BaseEntity { private LookUpDataEntity lookupData; @Column(name = "SCORE", nullable = false) - private Integer score; + private Long score; + + @Column(name ="IS_DELETED", nullable = false) + private Boolean isDeleted = false; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java index aa521521..d5e47df8 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java @@ -1,19 +1,19 @@ package net.gepafin.tendermanagement.entities; -import jakarta.persistence.*; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.AllArgsConstructor; -import lombok.Builder; - import java.time.LocalDateTime; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.ForeignKey; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.Data; + + @Entity @Table(name = "FAQ") @Data -@NoArgsConstructor -@AllArgsConstructor -@Builder public class FaqEntity extends BaseEntity { @ManyToOne @@ -41,6 +41,9 @@ public class FaqEntity extends BaseEntity { @Column(name = "RESPONSE_DATE") private LocalDateTime responseDate; + + @Column(name ="IS_DELETED", nullable = false) + private Boolean isDeleted = false; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java index d4264977..ca3a6045 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java @@ -4,7 +4,6 @@ import java.util.List; import jakarta.validation.constraints.NotNull; import lombok.Data; -import net.gepafin.tendermanagement.enums.CallTypeEnum; @Data public class CreateCallRequestStep2 { @@ -24,7 +23,4 @@ public class CreateCallRequestStep2 { private List images; - @NotNull - private CallTypeEnum status; - } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationCriteriaReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationCriteriaReq.java index 492463ec..ebc8cbd7 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationCriteriaReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationCriteriaReq.java @@ -5,5 +5,5 @@ import lombok.Data; @Data public class EvaluationCriteriaReq extends LookUpDataReq{ - private Integer score; + private Long score; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java index de9f5225..618c03c0 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java @@ -5,6 +5,7 @@ import lombok.Data; @Data public class FaqReq { + private Long id; private Boolean isVisible; private String questionShort; private String question; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java index 5fe41b41..441d19b6 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java @@ -1,12 +1,12 @@ package net.gepafin.tendermanagement.model.request; -import jakarta.validation.constraints.NotNull; import lombok.Data; @Data public class LookUpDataReq { - @NotNull + private Long id; + private Long lookUpDataId; private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationCriteriaResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationCriteriaResponseBean.java index 95829988..21f60a48 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationCriteriaResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationCriteriaResponseBean.java @@ -7,5 +7,5 @@ import java.time.LocalDateTime; @Data public class EvaluationCriteriaResponseBean extends LookUpDataResponse{ - private Integer score; + private Long score; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java index fdc4be63..57431714 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java @@ -10,7 +10,7 @@ public class FaqResponseBean { private Long id; - private Long userId; + private Long userId; private Boolean isVisible; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java index 8d4912fe..8b2f4859 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.repositories; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -9,6 +10,8 @@ import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; @Repository public interface CallTargetAudienceChecklistRepository extends JpaRepository { + + Optional findById(Long id); - List findByCallIdAndLookupDataType(Long id, String value); + List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long id, String value); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java index 22965f89..fcbc6f8b 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java @@ -2,14 +2,19 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.DocumentEntity; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface DocumentRepository extends JpaRepository { + + Optional findById(Long id); - List findByCallIdAndType(Long callId, String type); + List findByCallIdAndTypeAndIsDeletedFalse(Long callId, String type); + + Optional findByIdAndCallIdAndIsDeletedFalse(Long id, Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java index 3aae5b0d..434428af 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EvaluationCriteriaRepository.java @@ -3,10 +3,13 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface EvaluationCriteriaRepository extends JpaRepository { + + Optional findById(Long id); - List findByCallIdAndLookupDataType(Long callId, String type); + List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java index 7b4b7610..8ecd8535 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java @@ -3,12 +3,15 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.FaqEntity; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface FaqRepository extends JpaRepository { + + Optional findById(Long id); - List findByCallId(Long callId); + List findByCallIdAndIsDeletedFalse(Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/UserService.java b/src/main/java/net/gepafin/tendermanagement/service/UserService.java index 68912240..38df028d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/UserService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/UserService.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.service; +import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.request.LoginReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UserReq; @@ -16,4 +17,6 @@ public interface UserService { void deleteUser(Long userId); JWTToken login(LoginReq loginReq); + + UserEntity validateUser(Long userId); } 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 c6205aae..d5e14972 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/UserServiceImpl.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.service.impl; import net.gepafin.tendermanagement.dao.UserDao; +import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.request.LoginReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UserReq; @@ -49,5 +50,10 @@ public class UserServiceImpl implements UserService { return userDao.login(loginReq); } + + @Override + public UserEntity validateUser(Long userId) { + return userDao.validateUser(userId); + } } \ No newline at end of file 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 11051187..96a4f0b8 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 @@ -410,4 +410,28 @@ + + + + + + + + + + + + + + + + + + + + + + + +