Created call api's in 2 steps and for update call

This commit is contained in:
rajesh
2024-08-28 01:52:25 +05:30
parent e7fa11f35e
commit 22e72f6cd4
20 changed files with 287 additions and 119 deletions

View File

@@ -4,8 +4,8 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired; 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.FaqRepository;
import net.gepafin.tendermanagement.repositories.LookUpDataRepository; import net.gepafin.tendermanagement.repositories.LookUpDataRepository;
import net.gepafin.tendermanagement.repositories.RegionRepository; 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.util.DateTimeUtil;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
@@ -77,17 +77,18 @@ public class CallDao {
private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository;
@Autowired @Autowired
private UserRepository userRepository; private UserService userService;
public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) {
CreateCallResponseBean createCallResponseBean = null;
CallEntity callEntity = convertToCallEntity(createCallRequest); CallEntity callEntity = convertToCallEntity(createCallRequest);
List<FaqEntity> faqEntities = convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId);
List<LookUpDataResponse> amiedTo = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity,
LookUpDataTypeEnum.AIMED_TO); LookUpDataTypeEnum.AIMED_TO);
createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(), // createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(),
Collections.emptyList(), faqEntities, Collections.emptyList()); // Collections.emptyList(), faqEntities, Collections.emptyList());
createCallResponseBean.setAimedTo(amiedTo); // createCallResponseBean.setAimedTo(amiedTo);
// createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1);
CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity);
createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1);
return createCallResponseBean; return createCallResponseBean;
@@ -118,62 +119,87 @@ public class CallDao {
} }
public List<EvaluationCriteriaEntity> convertToEvaluationCriteriaEntities( public List<EvaluationCriteriaEntity> convertToEvaluationCriteriaEntities(
List<EvaluationCriteriaReq> criteriaReqList, CallEntity callEntity) { List<EvaluationCriteriaReq> criteriaReqList, CallEntity callEntity, LookUpDataTypeEnum type) {
if (criteriaReqList == null) {
return null;
}
List<EvaluationCriteriaEntity> existingCriteria = evaluationCriteriaRepository.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue());
List<Long> 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<EvaluationCriteriaEntity> evaluationCriteriaEntities = criteriaReqList.stream() List<EvaluationCriteriaEntity> evaluationCriteriaEntities = criteriaReqList.stream()
.map(req -> convertToEvaluationCriteriaEntity(req, callEntity)).collect(Collectors.toList()); .map(req -> convertToEvaluationCriteriaEntity(req, callEntity, type)).collect(Collectors.toList());
evaluationCriteriaRepository.saveAll(evaluationCriteriaEntities); evaluationCriteriaRepository.saveAll(evaluationCriteriaEntities);
return evaluationCriteriaEntities; return evaluationCriteriaEntities;
} }
private void softDeleteEvaluationCriteria(EvaluationCriteriaEntity evaluationCriteriaEntity) {
evaluationCriteriaEntity.setIsDeleted(true);
evaluationCriteriaRepository.save(evaluationCriteriaEntity);
}
private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq, private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq,
CallEntity callEntity) { CallEntity callEntity, LookUpDataTypeEnum type) {
EvaluationCriteriaEntity criteriaEntity = new EvaluationCriteriaEntity(); EvaluationCriteriaEntity criteriaEntity = null;
LookUpDataEntity lookUpDataEntity = getOrCreateLookUpData(criteriaReq, LookUpDataTypeEnum.EVALUATION_CRITERIA); LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(criteriaReq, type);
criteriaEntity.setLookupData(lookUpDataEntity); if (criteriaReq.getId() == null && criteriaReq.getId().equals(0l)) {
criteriaEntity.setScore(criteriaReq.getScore()); criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId())
criteriaEntity.setCall(callEntity); .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; return criteriaEntity;
} }
private LookUpDataEntity getOrCreateLookUpData(EvaluationCriteriaReq criteriaReq, LookUpDataTypeEnum typeEnum) {
LookUpDataEntity lookUpDataEntity = null; public List<DocumentEntity> convertToDocumentEntities(List<DocumentReq> documentReqList, CallEntity callEntity,
if (criteriaReq.getLookUpDataId() == null || criteriaReq.getLookUpDataId().equals(0l)) { DocumentTypeEnum documentType) {
validateEvolutionCrieteriaEntity(criteriaReq.getValue()); if (documentReqList == null) {
lookUpDataEntity = new LookUpDataEntity(); return null;
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)));
} }
List<DocumentEntity> existingDocuments = documentRepository
.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), documentType.getValue());
return lookUpDataEntity; List<Long> incomingIds = documentReqList.stream().map(DocumentReq::getId).filter(id -> id != null && id > 0)
} .collect(Collectors.toList());
public List<DocumentEntity> convertToDocumentEntities(List<DocumentReq> documentReqList, CallEntity callEntity) { existingDocuments.stream().filter(document -> !incomingIds.contains(document.getId()))
.forEach(this::softDeleteDocument);
List<DocumentEntity> documentEntities = documentReqList.stream() List<DocumentEntity> documentEntities = documentReqList.stream()
.map(req -> convertToDocumentEntity(req, callEntity)).collect(Collectors.toList()); .map(req -> convertToDocumentEntity(req, callEntity)).collect(Collectors.toList());
documentRepository.saveAll(documentEntities); documentRepository.saveAll(documentEntities);
return documentEntities; return documentEntities;
} }
private void softDeleteDocument(DocumentEntity documentEntity) {
documentEntity.setIsDeleted(true);
documentRepository.save(documentEntity);
}
private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) { private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) {
validateDocumentEntity(documentReq.getId(), documentReq.getFileName()); validateDocumentEntity(documentReq.getId());
DocumentEntity documentEntity = documentRepository.findById(documentReq.getId()) DocumentEntity documentEntity = documentRepository.findByIdAndCallIdAndIsDeletedFalse(documentReq.getId(), callEntity.getId())
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)));
// if(documentEntity==null){
// throw ;
// }
// documentEntity.setFileName(documentReq.getFileName());
// documentEntity.setFilePath(documentReq.getUrl());
// documentEntity.setCall(callEntity);
return documentEntity; return documentEntity;
} }
public List<FaqEntity> convertToFaqEntities(List<FaqReq> faqReqList, CallEntity callEntity, Long userId) { public List<FaqEntity> convertToFaqEntities(List<FaqReq> faqReqList, CallEntity callEntity, Long userId) {
if (faqReqList == null) {
return null;
}
List<FaqEntity> faqEntities = faqReqList.stream().map(req -> convertToFaqEntity(req, callEntity, userId)) List<FaqEntity> faqEntities = faqReqList.stream().map(req -> convertToFaqEntity(req, callEntity, userId))
.collect(Collectors.toList()); .collect(Collectors.toList());
faqRepository.saveAll(faqEntities); faqRepository.saveAll(faqEntities);
@@ -183,9 +209,8 @@ public class CallDao {
private FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, Long userId) { private FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, Long userId) {
FaqEntity faqEntity = new FaqEntity(); FaqEntity faqEntity = new FaqEntity();
validateFaqEntity(faqReq.getQuestion()); validateFaqEntity(faqReq.getQuestion());
UserEntity userEntity = userRepository.findById(userId) UserEntity userEntity = userService.validateUser(userId);
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG)));
faqEntity.setUser(userEntity); faqEntity.setUser(userEntity);
faqEntity.setIsVisible(true); faqEntity.setIsVisible(true);
if (faqReq.getIsVisible() != null) { if (faqReq.getIsVisible() != null) {
@@ -199,6 +224,7 @@ public class CallDao {
faqEntity.setResponseShort(faqReq.getResponseShort()); faqEntity.setResponseShort(faqReq.getResponseShort());
faqEntity.setResponse(faqReq.getResponse()); faqEntity.setResponse(faqReq.getResponse());
faqEntity.setCall(callEntity); faqEntity.setCall(callEntity);
faqEntity.setIsDeleted(false);
return faqEntity; return faqEntity;
} }
@@ -209,18 +235,14 @@ public class CallDao {
} }
} }
public void validateDocumentEntity(Long documentId, String name) { public void validateDocumentEntity(Long documentId) {
if (documentId == null) { if (documentId == null) {
throw new CustomValidationException(Status.VALIDATION_ERROR, throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.DOCUMENT_ID_NOT_FOUND)); 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)) { if (!StringUtils.hasText(name)) {
throw new CustomValidationException(Status.VALIDATION_ERROR, throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG));
@@ -335,8 +357,6 @@ public class CallDao {
List<LookUpDataEntity> lookUpDataEntities = lookUpData.stream() List<LookUpDataEntity> lookUpDataEntities = lookUpData.stream()
.map(req -> convertLookUpDataRequestIntoLookUpDataEntity(req, type)).collect(Collectors.toList()); .map(req -> convertLookUpDataRequestIntoLookUpDataEntity(req, type)).collect(Collectors.toList());
lookUpDataRepository.saveAll(lookUpDataEntities);
return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities); return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities);
} }
@@ -348,6 +368,7 @@ public class CallDao {
callTargetAudienceChecklistEntity.setIsValidated(false); callTargetAudienceChecklistEntity.setIsValidated(false);
callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity); callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity);
callTargetAudienceChecklistEntity.setCall(callEntity); callTargetAudienceChecklistEntity.setCall(callEntity);
callTargetAudienceChecklistEntity.setIsDeleted(false);
callTargetAudienceChecklistEntity = callTargetAudienceChecklistRepository callTargetAudienceChecklistEntity = callTargetAudienceChecklistRepository
.save(callTargetAudienceChecklistEntity); .save(callTargetAudienceChecklistEntity);
lookUpDataResponses.add(convertToLookUpDataResponseBean(callTargetAudienceChecklistEntity)); lookUpDataResponses.add(convertToLookUpDataResponseBean(callTargetAudienceChecklistEntity));
@@ -361,7 +382,7 @@ public class CallDao {
LookUpDataEntity newEntity = new LookUpDataEntity(); LookUpDataEntity newEntity = new LookUpDataEntity();
newEntity.setValue(req.getValue()); newEntity.setValue(req.getValue());
newEntity.setType(type.getValue()); newEntity.setType(type.getValue());
return newEntity; return lookUpDataRepository.save(newEntity);
} }
return lookUpDataRepository.findById(req.getLookUpDataId()) return lookUpDataRepository.findById(req.getLookUpDataId())
@@ -388,28 +409,29 @@ public class CallDao {
} }
public CreateCallResponseBean createCallStep2(CreateCallRequestStep2 createCallRequest, Long userId) { public CreateCallResponseBean createCallStep2(CreateCallRequestStep2 createCallRequest, Long userId) {
CreateCallResponseBean createCallResponseBean = null;
CallEntity callEntity = callRepository.findById(createCallRequest.getCallId()) CallEntity callEntity = callRepository.findById(createCallRequest.getCallId())
.orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); Translator.toLocale(GepafinConstant.CALL_NOT_FOUND)));
callEntity.setThreshold(createCallRequest.getThreshold()); setIfUpdated(callEntity::getThreshold, callEntity::setThreshold, createCallRequest.getThreshold());
callEntity.setStatus(createCallRequest.getStatus().getValue());
callRepository.save(callEntity); callRepository.save(callEntity);
List<EvaluationCriteriaEntity> evaluationCriteriaEntities = convertToEvaluationCriteriaEntities( convertToEvaluationCriteriaEntities(createCallRequest.getCriteria(), callEntity, LookUpDataTypeEnum.EVALUATION_CRITERIA);
createCallRequest.getCriteria(), callEntity);
List<DocumentEntity> documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity); convertToDocumentEntities(createCallRequest.getDocs(), callEntity, DocumentTypeEnum.DOCUMENT);
List<DocumentEntity> imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity);
List<LookUpDataResponse> checkList = convertLookUpDataEntities(createCallRequest.getCheckList(), callEntity, convertToDocumentEntities(createCallRequest.getImages(), callEntity, DocumentTypeEnum.IMAGES);
LookUpDataTypeEnum.CHECKLIST);
List<FaqEntity> faqEntities = faqRepository.findByCallId(callEntity.getId()); updateLookUpData(callEntity, createCallRequest.getCheckList(), LookUpDataTypeEnum.CHECKLIST);
List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() // List<FaqEntity> faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId());
.map(this::convertToLookUpDataResponseBean).toList(); // List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository
createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, // .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream()
documentEntities, faqEntities, imageEntities); // .map(this::convertToLookUpDataResponseBean).toList();
createCallResponseBean.setAimedTo(amiedTo); // createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities,
createCallResponseBean.setCheckList(checkList); // documentEntities, faqEntities, imageEntities);
// createCallResponseBean.setAimedTo(amiedTo);
// createCallResponseBean.setCheckList(checkList);
CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity);
createCallResponseBean.setCurrentStep(GepafinConstant.STEP_2); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_2);
return createCallResponseBean; return createCallResponseBean;
} }
@@ -422,10 +444,10 @@ public class CallDao {
Boolean isValid = true; Boolean isValid = true;
if (startDate != null && endDate != null && startDate.isAfter(endDate)) { if (startDate != null && endDate != null && startDate.isAfter(endDate)) {
isValid = false; isValid = false;
} else if (startDate != null && callEntity.getEndDate() != null } else if (startDate != null && endDate == null && callEntity.getEndDate() != null
&& startDate.isAfter(callEntity.getEndDate().toLocalDate())) { && startDate.isAfter(callEntity.getEndDate().toLocalDate())) {
isValid = false; isValid = false;
} else if (endDate != null && callEntity.getStartDate() != null } else if (startDate == null && endDate != null && callEntity.getStartDate() != null
&& callEntity.getStartDate().toLocalDate().isAfter(endDate)) { && callEntity.getStartDate().toLocalDate().isAfter(endDate)) {
isValid = false; isValid = false;
} }
@@ -438,6 +460,7 @@ public class CallDao {
public CreateCallResponseBean updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) { public CreateCallResponseBean updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) {
CallEntity callEntity = getCallById(callId); CallEntity callEntity = getCallById(callId);
UserEntity userEntity = userService.validateUser(userId);
isValidDateRange(updateCallRequest, callEntity); isValidDateRange(updateCallRequest, callEntity);
setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName()); setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName());
setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort, setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort,
@@ -451,27 +474,114 @@ public class CallDao {
setIfUpdated(callEntity::getDocumentationRequested, callEntity::setDocumentationRequested, setIfUpdated(callEntity::getDocumentationRequested, callEntity::setDocumentationRequested,
updateCallRequest.getDocumentationRequested()); updateCallRequest.getDocumentationRequested());
setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi());
updateLookUpData(callEntity, updateCallRequest.getAimedTo(), LookUpDataTypeEnum.AIMED_TO);
updateFaq(callEntity, updateCallRequest.getFaq(), userEntity);
CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity);
createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1);
return createCallResponseBean; return createCallResponseBean;
} }
private void updateFaq(CallEntity callEntity, List<FaqReq> faqReqList, UserEntity userEntity) {
if(faqReqList==null) {
return;
}
List<FaqEntity> existingFaqs = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId());
List<Long> 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<LookUpDataReq> lookupDataReqList, LookUpDataTypeEnum type) {
if (lookupDataReqList == null) {
return;
}
List<CallTargetAudienceChecklistEntity> existingChecklist = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue());
List<Long> 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) { private CreateCallResponseBean getCallResponseBean(CallEntity callEntity) {
List<DocumentEntity> documentEntities = documentRepository.findByCallIdAndType(callEntity.getId(), List<DocumentEntity> documentEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(),
DocumentTypeEnum.DOCUMENT.getValue()); DocumentTypeEnum.DOCUMENT.getValue());
List<DocumentEntity> imageEntities = documentRepository.findByCallIdAndType(callEntity.getId(), List<DocumentEntity> imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(),
DocumentTypeEnum.DOCUMENT.getValue()); DocumentTypeEnum.DOCUMENT.getValue());
List<FaqEntity> faqEntities = faqRepository.findByCallId(callEntity.getId()); List<FaqEntity> faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId());
List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream()
.map(this::convertToLookUpDataResponseBean).toList(); .map(this::convertToLookUpDataResponseBean).toList();
List<LookUpDataResponse> checkList = callTargetAudienceChecklistRepository List<LookUpDataResponse> checkList = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.CHECKLIST.getValue()).stream() .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.CHECKLIST.getValue()).stream()
.map(this::convertToLookUpDataResponseBean).toList(); .map(this::convertToLookUpDataResponseBean).toList();
List<EvaluationCriteriaEntity> evaluationCriteriaEntities = evaluationCriteriaRepository List<EvaluationCriteriaEntity> evaluationCriteriaEntities = evaluationCriteriaRepository
.findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue());
CreateCallResponseBean createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, CreateCallResponseBean createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities,
documentEntities, faqEntities, imageEntities); documentEntities, faqEntities, imageEntities);

View File

@@ -18,7 +18,6 @@ import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.model.response.DocumentResponseBean;
import net.gepafin.tendermanagement.repositories.DocumentRepository; import net.gepafin.tendermanagement.repositories.DocumentRepository;
import net.gepafin.tendermanagement.service.AmazonS3Service; 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.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
@@ -48,6 +47,7 @@ public class DocumentDao {
documentEntity.setFileName(fileName); documentEntity.setFileName(fileName);
documentEntity.setType(fileType.getValue()); documentEntity.setType(fileType.getValue());
documentEntity.setFilePath(filepath); documentEntity.setFilePath(filepath);
documentEntity.setIsDeleted(false);
documentEntities.add(documentEntity); documentEntities.add(documentEntity);
} catch (IOException e) {} } catch (IOException e) {}
} }
@@ -62,9 +62,8 @@ public class DocumentDao {
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)));
String fileName = Utils.extractFileName(documentEntity.getFilePath()); documentEntity.setIsDeleted(true);
amazonS3Service.delete(fileName); documentRepository.save(documentEntity);
documentRepository.delete(documentEntity);
} }
} }

View File

@@ -149,4 +149,10 @@ public class UserDao {
log.info("Login successful for email: {}", loginReq.getEmail()); log.info("Login successful for email: {}", loginReq.getEmail());
return jwtToken; return jwtToken;
} }
public UserEntity validateUser(Long userId) {
return userRepository.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)));
}
} }

View File

@@ -18,6 +18,9 @@ public class CallTargetAudienceChecklistEntity extends BaseEntity{
@Column(name = "IS_VALIDATED") @Column(name = "IS_VALIDATED")
private Boolean isValidated; private Boolean isValidated;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -1,17 +1,15 @@
package net.gepafin.tendermanagement.entities; 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.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
@Entity @Entity
@Table(name = "DOCUMENT") @Table(name = "DOCUMENT")
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DocumentEntity extends BaseEntity{ public class DocumentEntity extends BaseEntity{
@Column(name = "FILE_NAME", length = 255) @Column(name = "FILE_NAME", length = 255)
private String fileName; private String fileName;
@@ -28,4 +26,8 @@ public class DocumentEntity extends BaseEntity{
@Column(name = "DESCRIPTION", columnDefinition = "TEXT") @Column(name = "DESCRIPTION", columnDefinition = "TEXT")
private String description; private String description;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -1,17 +1,15 @@
package net.gepafin.tendermanagement.entities; 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.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
@Entity @Entity
@Table(name = "EVALUATION_CRITERIA") @Table(name = "EVALUATION_CRITERIA")
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EvaluationCriteriaEntity extends BaseEntity { public class EvaluationCriteriaEntity extends BaseEntity {
@ManyToOne @ManyToOne
@@ -23,6 +21,9 @@ public class EvaluationCriteriaEntity extends BaseEntity {
private LookUpDataEntity lookupData; private LookUpDataEntity lookupData;
@Column(name = "SCORE", nullable = false) @Column(name = "SCORE", nullable = false)
private Integer score; private Long score;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -1,19 +1,19 @@
package net.gepafin.tendermanagement.entities; 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 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 @Entity
@Table(name = "FAQ") @Table(name = "FAQ")
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class FaqEntity extends BaseEntity { public class FaqEntity extends BaseEntity {
@ManyToOne @ManyToOne
@@ -41,6 +41,9 @@ public class FaqEntity extends BaseEntity {
@Column(name = "RESPONSE_DATE") @Column(name = "RESPONSE_DATE")
private LocalDateTime responseDate; private LocalDateTime responseDate;
@Column(name ="IS_DELETED", nullable = false)
private Boolean isDeleted = false;
} }

View File

@@ -4,7 +4,6 @@ import java.util.List;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import net.gepafin.tendermanagement.enums.CallTypeEnum;
@Data @Data
public class CreateCallRequestStep2 { public class CreateCallRequestStep2 {
@@ -24,7 +23,4 @@ public class CreateCallRequestStep2 {
private List<DocumentReq> images; private List<DocumentReq> images;
@NotNull
private CallTypeEnum status;
} }

View File

@@ -5,5 +5,5 @@ import lombok.Data;
@Data @Data
public class EvaluationCriteriaReq extends LookUpDataReq{ public class EvaluationCriteriaReq extends LookUpDataReq{
private Integer score; private Long score;
} }

View File

@@ -5,6 +5,7 @@ import lombok.Data;
@Data @Data
public class FaqReq { public class FaqReq {
private Long id;
private Boolean isVisible; private Boolean isVisible;
private String questionShort; private String questionShort;
private String question; private String question;

View File

@@ -1,12 +1,12 @@
package net.gepafin.tendermanagement.model.request; package net.gepafin.tendermanagement.model.request;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@Data @Data
public class LookUpDataReq { public class LookUpDataReq {
@NotNull private Long id;
private Long lookUpDataId; private Long lookUpDataId;
private String value; private String value;

View File

@@ -7,5 +7,5 @@ import java.time.LocalDateTime;
@Data @Data
public class EvaluationCriteriaResponseBean extends LookUpDataResponse{ public class EvaluationCriteriaResponseBean extends LookUpDataResponse{
private Integer score; private Long score;
} }

View File

@@ -10,7 +10,7 @@ public class FaqResponseBean {
private Long id; private Long id;
private Long userId; private Long userId;
private Boolean isVisible; private Boolean isVisible;

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.repositories; package net.gepafin.tendermanagement.repositories;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@@ -9,6 +10,8 @@ import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity;
@Repository @Repository
public interface CallTargetAudienceChecklistRepository extends JpaRepository<CallTargetAudienceChecklistEntity,Long> { public interface CallTargetAudienceChecklistRepository extends JpaRepository<CallTargetAudienceChecklistEntity,Long> {
Optional<CallTargetAudienceChecklistEntity> findById(Long id);
List<CallTargetAudienceChecklistEntity> findByCallIdAndLookupDataType(Long id, String value); List<CallTargetAudienceChecklistEntity> findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long id, String value);
} }

View File

@@ -2,14 +2,19 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.entities.DocumentEntity;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface DocumentRepository extends JpaRepository<DocumentEntity, Long> { public interface DocumentRepository extends JpaRepository<DocumentEntity, Long> {
Optional<DocumentEntity> findById(Long id);
List<DocumentEntity> findByCallIdAndType(Long callId, String type); List<DocumentEntity> findByCallIdAndTypeAndIsDeletedFalse(Long callId, String type);
Optional<DocumentEntity> findByIdAndCallIdAndIsDeletedFalse(Long id, Long callId);
} }

View File

@@ -3,10 +3,13 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity; import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface EvaluationCriteriaRepository extends JpaRepository<EvaluationCriteriaEntity, Integer> { public interface EvaluationCriteriaRepository extends JpaRepository<EvaluationCriteriaEntity, Integer> {
Optional<EvaluationCriteriaEntity> findById(Long id);
List<EvaluationCriteriaEntity> findByCallIdAndLookupDataType(Long callId, String type); List<EvaluationCriteriaEntity> findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type);
} }

View File

@@ -3,12 +3,15 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.FaqEntity;
import java.util.List; import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface FaqRepository extends JpaRepository<FaqEntity, Integer> { public interface FaqRepository extends JpaRepository<FaqEntity, Integer> {
Optional<FaqEntity> findById(Long id);
List<FaqEntity> findByCallId(Long callId); List<FaqEntity> findByCallIdAndIsDeletedFalse(Long callId);
} }

View File

@@ -1,5 +1,6 @@
package net.gepafin.tendermanagement.service; package net.gepafin.tendermanagement.service;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.model.request.LoginReq; import net.gepafin.tendermanagement.model.request.LoginReq;
import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq;
import net.gepafin.tendermanagement.model.request.UserReq; import net.gepafin.tendermanagement.model.request.UserReq;
@@ -16,4 +17,6 @@ public interface UserService {
void deleteUser(Long userId); void deleteUser(Long userId);
JWTToken login(LoginReq loginReq); JWTToken login(LoginReq loginReq);
UserEntity validateUser(Long userId);
} }

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.service.impl; package net.gepafin.tendermanagement.service.impl;
import net.gepafin.tendermanagement.dao.UserDao; 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.LoginReq;
import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq;
import net.gepafin.tendermanagement.model.request.UserReq; import net.gepafin.tendermanagement.model.request.UserReq;
@@ -49,5 +50,10 @@ public class UserServiceImpl implements UserService {
return userDao.login(loginReq); return userDao.login(loginReq);
} }
@Override
public UserEntity validateUser(Long userId) {
return userDao.validateUser(userId);
}
} }

View File

@@ -410,4 +410,28 @@
</addColumn> </addColumn>
</changeSet> </changeSet>
<changeSet id="27-08-2024_2" author="Rajesh Khore">
<addColumn tableName="FAQ">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="CALL_TARGET_AUDIENCE_CHECKLIST">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="EVALUATION_CRITERIA">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
<addColumn tableName="DOCUMENT">
<column name="is_deleted" type="BOOLEAN" defaultValueBoolean="false">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog> </databaseChangeLog>