Refactored code for faq

This commit is contained in:
rajesh
2024-09-04 19:21:32 +05:30
parent e51c86806a
commit 286baa9c21
15 changed files with 203 additions and 245 deletions

View File

@@ -4,10 +4,10 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.service.FaqService;
import net.gepafin.tendermanagement.service.LookUpDataService; import net.gepafin.tendermanagement.service.LookUpDataService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -38,11 +38,9 @@ import net.gepafin.tendermanagement.repositories.CallTargetAudienceChecklistRepo
import net.gepafin.tendermanagement.repositories.DocumentRepository; import net.gepafin.tendermanagement.repositories.DocumentRepository;
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository; 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.RegionRepository; import net.gepafin.tendermanagement.repositories.RegionRepository;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl;
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;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
@@ -66,10 +64,9 @@ public class CallDao {
@Autowired @Autowired
private RegionRepository regionRepository; private RegionRepository regionRepository;
@Autowired @Autowired
private LookUpDataService lookUpDataService; private LookUpDataService lookUpDataService;
@Autowired
private LookUpDataRepository lookUpDataRepository;
@Autowired @Autowired
private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository;
@@ -77,17 +74,19 @@ public class CallDao {
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private FaqService faqService;
public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) {
UserEntity userEntity = userService.validateUser(userId); UserEntity userEntity = userService.validateUser(userId);
createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId());
CallEntity callEntity = convertToCallEntity(createCallRequest); CallEntity callEntity = convertToCallEntity(createCallRequest);
convertToFaqEntities(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ);
updateFaq(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ);
convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity,
LookUpDataTypeEnum.AIMED_TO); LookUpDataTypeEnum.AIMED_TO);
// createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(),
// Collections.emptyList(), faqEntities, Collections.emptyList());
// createCallResponseBean.setAimedTo(amiedTo);
// createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1);
CallResponse createCallResponseBean = getCallResponseBean(callEntity); CallResponse createCallResponseBean = getCallResponseBean(callEntity);
createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1);
return createCallResponseBean; return createCallResponseBean;
@@ -149,7 +148,7 @@ public class CallDao {
private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq, private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq,
CallEntity callEntity, LookUpDataTypeEnum type) { CallEntity callEntity, LookUpDataTypeEnum type) {
EvaluationCriteriaEntity criteriaEntity = null; EvaluationCriteriaEntity criteriaEntity = null;
LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(criteriaReq, type); LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(criteriaReq, type);
if (criteriaReq.getId() != null && criteriaReq.getId() > 0) { if (criteriaReq.getId() != null && criteriaReq.getId() > 0) {
criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId()) criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId())
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
@@ -201,11 +200,11 @@ public class CallDao {
return documentEntity; return documentEntity;
} }
public List<FaqEntity> convertToFaqEntities(List<FaqReq> faqReqList, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) { public List<FaqEntity> updateFaq(List<FaqReq> faqReqList, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) {
if (faqReqList == null) { if (faqReqList == null) {
return null; return null;
} }
List<FaqEntity> existingFaqEntities = faqRepository.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue()); List<FaqEntity> existingFaqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId());
List<Long> incomingIds = faqReqList.stream() List<Long> incomingIds = faqReqList.stream()
.map(FaqReq::getId) .map(FaqReq::getId)
.filter(id -> id != null && id > 0) .filter(id -> id != null && id > 0)
@@ -214,42 +213,12 @@ public class CallDao {
.filter(entity -> !incomingIds.contains(entity.getId())) .filter(entity -> !incomingIds.contains(entity.getId()))
.forEach(this::softDeleteFaq); .forEach(this::softDeleteFaq);
List<FaqEntity> faqEntities = faqReqList.stream() List<FaqEntity> faqEntities = faqReqList.stream()
.map(req -> convertToFaqEntity(req, callEntity, userEntity, type)) .map(req -> faqService.createOrUpdateFaqEntity(req, callEntity, userEntity, type))
.collect(Collectors.toList()); .collect(Collectors.toList());
faqRepository.saveAll(faqEntities);
return faqEntities; return faqEntities;
} }
public FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity,LookUpDataTypeEnum type) {
FaqEntity faqEntity = new FaqEntity();
LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(faqReq, type);
validateFaqEntity(faqReq.getQuestion());
faqEntity.setUser(userEntity);
faqEntity.setIsVisible(false);
faqEntity.setLookupData(lookupDataEntity);
if (faqReq.getIsVisible() != null) {
faqEntity.setIsVisible(faqReq.getIsVisible());
}
faqEntity.setQuestionShort(faqReq.getQuestionShort());
faqEntity.setQuestion(faqReq.getQuestion());
if (faqReq.getResponse() != null || faqReq.getResponseShort() != null) {
faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
}
faqEntity.setResponseShort(faqReq.getResponseShort());
faqEntity.setResponse(faqReq.getResponse());
faqEntity.setCall(callEntity);
faqEntity.setIsDeleted(false);
return faqEntity;
}
public void validateFaqEntity(String question) {
if (!StringUtils.hasText(question)) {
throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.QUESTION_NOT_EMPTY_MSG));
}
}
public void validateDocumentEntity(Long documentId) { public void validateDocumentEntity(Long documentId) {
if (documentId == null || documentId < 1) { if (documentId == null || documentId < 1) {
throw new CustomValidationException(Status.VALIDATION_ERROR, throw new CustomValidationException(Status.VALIDATION_ERROR,
@@ -264,26 +233,6 @@ public class CallDao {
} }
} }
// public void validateCallEntity(CreateCallRequestStep1 createCallRequest) {
// if (createCallRequest.getRegionId() == null) {
// throw new CustomValidationException(Status.VALIDATION_ERROR,
// Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG));
// }
//
// if (createCallRequest.getAmount().compareTo(BigDecimal.ZERO) <= 0
// || createCallRequest.getAmountMax().compareTo(BigDecimal.ZERO) <= 0) {
// throw new CustomValidationException(Status.VALIDATION_ERROR,
// Translator.toLocale(GepafinConstant.AMOUNT_GREATER_THAN_ZERO_MSG));
// }
// if (createCallRequest.getStartDate().toLocalDate().isBefore(LocalDate.now())
// || createCallRequest.getEndDate().toLocalDate().isBefore(LocalDate.now()) || createCallRequest
// .getStartDate().toLocalDate().isAfter(createCallRequest.getEndDate().toLocalDate())) {
// throw new CustomValidationException(Status.VALIDATION_ERROR,
// Translator.toLocale(GepafinConstant.INVALID_DATE_MSG));
// }
//
// }
public CallResponse convertToCallResponseBean(CallEntity callEntity) { public CallResponse convertToCallResponseBean(CallEntity callEntity) {
CallResponse createCallResponseBean = new CallResponse(); CallResponse createCallResponseBean = new CallResponse();
createCallResponseBean.setId(callEntity.getId()); createCallResponseBean.setId(callEntity.getId());
@@ -332,26 +281,9 @@ public class CallDao {
return responseBean; return responseBean;
} }
public FaqResponseBean convertToFaqResponseBean(FaqEntity entity) {
FaqResponseBean responseBean = new FaqResponseBean();
responseBean.setId(entity.getId());
responseBean.setLookUpDataId(entity.getLookupData().getId());
responseBean.setValue(entity.getLookupData().getValue());
responseBean.setTitle(entity.getLookupData().getTitle());
responseBean.setQuestionShort(entity.getQuestionShort());
responseBean.setResponseShort(entity.getResponseShort());
responseBean.setResponse(entity.getResponse());
responseBean.setQuestion(entity.getQuestion());
responseBean.setUserId(entity.getUser().getId());
responseBean.setIsVisible(entity.getIsVisible());
responseBean.setCreatedDate(entity.getCreatedDate());
responseBean.setUpdatedDate(entity.getUpdatedDate());
return responseBean;
}
public CallResponse assembleCreateCallResponseBean(CallEntity callEntity, public CallResponse assembleCreateCallResponseBean(CallEntity callEntity,
List<EvaluationCriteriaEntity> evaluationCriteriaEntities, List<DocumentEntity> documentEntities, List<EvaluationCriteriaEntity> evaluationCriteriaEntities, List<DocumentEntity> documentEntities,
List<FaqEntity> faqEntities, List<DocumentEntity> images) { List<DocumentEntity> images) {
CallResponse callResponseBean = convertToCallResponseBean(callEntity); CallResponse callResponseBean = convertToCallResponseBean(callEntity);
@@ -361,15 +293,12 @@ public class CallDao {
List<DocumentResponseBean> documentResponseBeans = documentEntities.stream() List<DocumentResponseBean> documentResponseBeans = documentEntities.stream()
.map(this::convertToDocumentResponseBean).collect(Collectors.toList()); .map(this::convertToDocumentResponseBean).collect(Collectors.toList());
List<FaqResponseBean> faqResponseBeans = faqEntities.stream().map(this::convertToFaqResponseBean)
.collect(Collectors.toList());
List<DocumentResponseBean> imagesResponseBean = images.stream().map(this::convertToDocumentResponseBean) List<DocumentResponseBean> imagesResponseBean = images.stream().map(this::convertToDocumentResponseBean)
.collect(Collectors.toList()); .collect(Collectors.toList());
CallResponse createCallResponseBean = callResponseBean; CallResponse createCallResponseBean = callResponseBean;
createCallResponseBean.setCriteria(evaluationCriteriaResponseBeans); createCallResponseBean.setCriteria(evaluationCriteriaResponseBeans);
createCallResponseBean.setDocs(documentResponseBeans); createCallResponseBean.setDocs(documentResponseBeans);
createCallResponseBean.setFaq(faqResponseBeans);
createCallResponseBean.setImages(imagesResponseBean); createCallResponseBean.setImages(imagesResponseBean);
return createCallResponseBean; return createCallResponseBean;
} }
@@ -380,7 +309,7 @@ public class CallDao {
return null; return null;
} }
List<LookUpDataEntity> lookUpDataEntities = lookUpData.stream() List<LookUpDataEntity> lookUpDataEntities = lookUpData.stream()
.map(req -> convertLookUpDataRequestIntoLookUpDataEntity(req, type)).collect(Collectors.toList()); .map(req -> lookUpDataService.getOrCreateLookUpDataEntity(req, type)).collect(Collectors.toList());
return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities); return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities);
} }
@@ -401,21 +330,6 @@ public class CallDao {
return lookUpDataResponses; return lookUpDataResponses;
} }
private LookUpDataEntity convertLookUpDataRequestIntoLookUpDataEntity(LookUpDataReq req,
LookUpDataEntity.LookUpDataTypeEnum type) {
if (req.getLookUpDataId() == null || req.getLookUpDataId().equals(0l)) {
LookUpDataEntity newEntity = new LookUpDataEntity();
newEntity.setValue(req.getValue());
newEntity.setType(type.getValue());
lookUpDataService.validateLookUpDataEntity(newEntity);
return lookUpDataRepository.save(newEntity);
}
return lookUpDataRepository.findById(req.getLookUpDataId())
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG)));
}
public LookUpDataResponse convertToLookUpDataResponseBean( public LookUpDataResponse convertToLookUpDataResponseBean(
CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) {
LookUpDataResponse lookUpDataResponse = new LookUpDataResponse(); LookUpDataResponse lookUpDataResponse = new LookUpDataResponse();
@@ -528,62 +442,17 @@ public class CallDao {
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); updateLookUpData(callEntity, updateCallRequest.getAimedTo(), LookUpDataTypeEnum.AIMED_TO);
updateFaq(callEntity, updateCallRequest.getFaq(), userEntity, LookUpDataTypeEnum.FAQ); updateFaq(updateCallRequest.getFaq(), callEntity, userEntity, LookUpDataTypeEnum.FAQ);
CallResponse createCallResponseBean = getCallResponseBean(callEntity); CallResponse 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, LookUpDataTypeEnum type) {
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, type));
}
private void softDeleteFaq(FaqEntity faqEntity) { private void softDeleteFaq(FaqEntity faqEntity) {
faqEntity.setIsDeleted(true); faqEntity.setIsDeleted(true);
faqRepository.save(faqEntity); faqRepository.save(faqEntity);
} }
private void createOrUpdateFaq(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) {
FaqEntity faqEntity = null;
LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(faqReq, type);
if (isExistingFaq(faqReq)) {
faqEntity = faqRepository.findById(faqReq.getId())
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
} else {
faqEntity = new FaqEntity();
faqEntity.setCall(callEntity);
faqEntity.setUser(userEntity);
faqEntity.setLookupData(lookupDataEntity);
faqEntity.setIsVisible(false);
faqEntity.setIsDeleted(false);
}
if (Boolean.FALSE.equals(faqEntity.getLookupData().getId().equals(lookupDataEntity.getId()))) {
faqEntity.setLookupData(lookupDataEntity);
}
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) { private void updateLookUpData(CallEntity callEntity, List<LookUpDataReq> lookupDataReqList, LookUpDataTypeEnum type) {
if (lookupDataReqList == null) { if (lookupDataReqList == null) {
return; return;
@@ -601,7 +470,7 @@ public class CallDao {
private void createOrUpdateCallTargetAudienceChecklist(LookUpDataReq lookUpDataReq, CallEntity callEntity, private void createOrUpdateCallTargetAudienceChecklist(LookUpDataReq lookUpDataReq, CallEntity callEntity,
LookUpDataTypeEnum type) { LookUpDataTypeEnum type) {
CallTargetAudienceChecklistEntity checklistEntity = null; CallTargetAudienceChecklistEntity checklistEntity = null;
LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(lookUpDataReq, type); LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(lookUpDataReq, type);
if (lookUpDataReq.getId() != null && lookUpDataReq.getId() > 0) { if (lookUpDataReq.getId() != null && lookUpDataReq.getId() > 0) {
checklistEntity = callTargetAudienceChecklistRepository.findById(lookUpDataReq.getId()) checklistEntity = callTargetAudienceChecklistRepository.findById(lookUpDataReq.getId())
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
@@ -656,7 +525,6 @@ public class CallDao {
DocumentTypeEnum.DOCUMENT.getValue()); DocumentTypeEnum.DOCUMENT.getValue());
List<DocumentEntity> imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), List<DocumentEntity> imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(),
DocumentTypeEnum.IMAGES.getValue()); DocumentTypeEnum.IMAGES.getValue());
List<FaqEntity> faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId());
List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream()
.map(this::convertToLookUpDataResponseBean).toList(); .map(this::convertToLookUpDataResponseBean).toList();
@@ -668,7 +536,8 @@ public class CallDao {
.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue());
CallResponse createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, CallResponse createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities,
documentEntities, faqEntities, imageEntities); documentEntities, imageEntities);
createCallResponseBean.setFaq(faqService.getFaqByCallId(callEntity.getId()));
createCallResponseBean.setAimedTo(amiedTo); createCallResponseBean.setAimedTo(amiedTo);
createCallResponseBean.setCheckList(checkList); createCallResponseBean.setCheckList(checkList);
return createCallResponseBean; return createCallResponseBean;

View File

@@ -6,18 +6,22 @@ import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.request.FaqReq;
import net.gepafin.tendermanagement.model.response.FaqResponseBean; import net.gepafin.tendermanagement.model.response.FaqResponseBean;
import net.gepafin.tendermanagement.repositories.FaqRepository; import net.gepafin.tendermanagement.repositories.FaqRepository;
import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.CallService;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.LookUpDataService;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
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;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Component @Component
public class FaqDao { public class FaqDao {
@@ -25,77 +29,92 @@ public class FaqDao {
@Autowired @Autowired
private FaqRepository faqRepository; private FaqRepository faqRepository;
@Autowired
private UserService userService;
@Autowired
private CallDao callDao;
@Autowired @Autowired
private CallService callService; private CallService callService;
public FaqResponseBean createFaq(FaqReq faqRequest, Long userId, Long callId) { @Autowired
private LookUpDataService lookUpDataService;
public FaqResponseBean createFaq(FaqReq faqRequest, UserEntity userEntity, Long callId) {
FaqEntity entity = new FaqEntity(); FaqEntity entity = new FaqEntity();
CallEntity callEntity = callService.validateCall(callId); CallEntity callEntity = callService.validateCall(callId);
; entity = createOrUpdateFaqEntity(faqRequest, callEntity, userEntity,
UserEntity userEntity = userService.validateUser(userId);
entity = callDao.convertToFaqEntity(faqRequest, callEntity, userEntity,
LookUpDataEntity.LookUpDataTypeEnum.FAQ); LookUpDataEntity.LookUpDataTypeEnum.FAQ);
faqRepository.save(entity); faqRepository.save(entity);
return convertFaqEntityToResponseBean(entity); return convertToFaqResponseBean(entity);
} }
public FaqResponseBean getFaqById(Long id) { public FaqResponseBean getFaqById(Long id) {
return faqRepository.findById(id).map(this::convertFaqEntityToResponseBean) return convertToFaqResponseBean(validateFaq(id));
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
} }
public FaqResponseBean updateFaq(Long id, FaqReq faqRequest, Long userId) { public FaqResponseBean updateFaq(Long id, FaqReq faqRequest, UserEntity userEntity) {
FaqEntity entity = faqRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, FaqEntity entity = validateFaq(id);
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); faqRequest.setId(entity.getId());
updateFaqEntity(entity, faqRequest, userId, entity.getCall()); createOrUpdateFaqEntity(faqRequest, entity.getCall(), userEntity, LookUpDataEntity.LookUpDataTypeEnum.FAQ);
faqRepository.save(entity); return convertToFaqResponseBean(entity);
return convertFaqEntityToResponseBean(entity);
} }
public void deleteFaq(Long id) { public void deleteFaq(Long id) {
FaqEntity entity = faqRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, FaqEntity faqEntity = validateFaq(id);
faqEntity.setIsDeleted(Boolean.TRUE);
faqRepository.save(faqEntity);
}
public FaqEntity validateFaq(Long id) {
return faqRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
faqRepository.deleteById(entity.getId());
} }
private FaqResponseBean convertFaqEntityToResponseBean(FaqEntity entity) { public List<FaqResponseBean> getFaqByCallId(Long callId) {
FaqResponseBean response = new FaqResponseBean(); callService.validateCall(callId);
response.setId(entity.getId()); return faqRepository.findByCallIdAndIsDeletedFalse(callId).stream().map(this::convertToFaqResponseBean)
response.setUserId(entity.getUser().getId()); .toList();
response.setIsVisible(entity.getIsVisible());
response.setUpdatedDate(entity.getUpdatedDate());
response.setCreatedDate(entity.getCreatedDate());
response.setQuestionShort(entity.getQuestionShort());
response.setQuestion(entity.getQuestion());
response.setResponseShort(entity.getResponseShort());
response.setResponse(entity.getResponse());
response.setResponseDate(entity.getResponseDate());
return response;
} }
private void updateFaqEntity(FaqEntity faqEntity, FaqReq faqReq, Long userId, CallEntity callEntity) {
faqEntity.setQuestion(faqReq.getQuestion()); public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity,
UserEntity userEntity = userService.validateUser(userId); LookUpDataTypeEnum type) {
faqEntity.setUser(userEntity); FaqEntity faqEntity = null;
faqEntity.setIsVisible(true); if (isExistingFaq(faqReq)) {
if (faqReq.getIsVisible() != null) { faqEntity = faqRepository.findByIdAndCallIdAndIsDeletedFalse(faqReq.getId(), callEntity.getId())
faqEntity.setIsVisible(faqReq.getIsVisible()); .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
} else {
lookUpDataService.getOrCreateLookUpDataEntity(faqReq, type);
faqEntity = new FaqEntity();
faqEntity.setCall(callEntity);
faqEntity.setUser(userEntity);
faqEntity.setIsVisible(false);
faqEntity.setIsDeleted(false);
} }
faqEntity.setQuestionShort(faqReq.getQuestionShort()); if (faqReq.getResponse() != null && (faqEntity.getResponse() == null
faqEntity.setQuestion(faqReq.getQuestion()); || Boolean.FALSE.equals(faqReq.getResponse().equals(faqEntity.getResponse())))) {
if (faqReq.getResponse() != null || faqReq.getResponseShort() != null) {
faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
} }
faqEntity.setResponseShort(faqReq.getResponseShort()); setIfUpdated(faqEntity::getTitle, faqEntity::setTitle, faqReq.getTitle());
faqEntity.setResponse(faqReq.getResponse()); setIfUpdated(faqEntity::getValue, faqEntity::setValue, faqReq.getValue());
faqEntity.setCall(callEntity); setIfUpdated(faqEntity::getResponse, faqEntity::setResponse, faqReq.getResponse());
setIfUpdated(faqEntity::getIsVisible, faqEntity::setIsVisible, faqReq.getIsVisible());
return faqRepository.save(faqEntity);
} }
private boolean isExistingFaq(FaqReq faqReq) {
return faqReq.getId() != null && faqReq.getId() > 0;
}
public FaqResponseBean convertToFaqResponseBean(FaqEntity entity) {
FaqResponseBean responseBean = new FaqResponseBean();
responseBean.setId(entity.getId());
responseBean.setUserId(entity.getUser().getId());
responseBean.setTitle(entity.getTitle());
responseBean.setValue(entity.getValue());
responseBean.setResponse(entity.getResponse());
responseBean.setResponseDate(entity.getResponseDate());
responseBean.setIsVisible(entity.getIsVisible());
responseBean.setCreatedDate(entity.getCreatedDate());
responseBean.setUpdatedDate(entity.getUpdatedDate());
return responseBean;
}
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.LookUpDataReq;
import net.gepafin.tendermanagement.model.request.LookUpDataRequest; import net.gepafin.tendermanagement.model.request.LookUpDataRequest;
import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean; import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean;
import net.gepafin.tendermanagement.repositories.LookUpDataRepository; import net.gepafin.tendermanagement.repositories.LookUpDataRepository;
@@ -83,5 +84,22 @@ public class LookUpDataDao {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public LookUpDataEntity getOrCreateLookUpDataEntity(LookUpDataReq req,
LookUpDataEntity.LookUpDataTypeEnum type) {
if (req.getLookUpDataId() == null || req.getLookUpDataId().equals(0l)) {
LookUpDataEntity newEntity = new LookUpDataEntity();
newEntity.setTitle(req.getTitle());
newEntity.setValue(req.getValue());
newEntity.setResponse(req.getResponse());
newEntity.setType(type.getValue());
validateLookUpDataEntity(newEntity);
return lookUpDataRepository.save(newEntity);
}
return lookUpDataRepository.findById(req.getLookUpDataId())
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG)));
}
} }

View File

@@ -27,22 +27,15 @@ public class FaqEntity extends BaseEntity {
@Column(name = "IS_VISIBLE", nullable = false) @Column(name = "IS_VISIBLE", nullable = false)
private Boolean isVisible; private Boolean isVisible;
@Column(name = "QUESTION_SHORT", length = 255) @Column(name = "TITLE", columnDefinition = "TEXT")
private String questionShort; private String title;
@Column(name = "QUESTION", columnDefinition = "TEXT") @Column(name = "VALUE", columnDefinition = "TEXT")
private String question; private String value;
@Column(name = "RESPONSE_SHORT", length = 255)
private String responseShort;
@Column(name = "RESPONSE", columnDefinition = "TEXT") @Column(name = "RESPONSE", columnDefinition = "TEXT")
private String response; private String response;
@ManyToOne
@JoinColumn(name = "LOOKUP_DATA_ID")
private LookUpDataEntity lookupData;
@Column(name = "RESPONSE_DATE") @Column(name = "RESPONSE_DATE")
private LocalDateTime responseDate; private LocalDateTime responseDate;

View File

@@ -9,7 +9,7 @@ import lombok.Data;
@Data @Data
public class LookUpDataEntity extends BaseEntity{ public class LookUpDataEntity extends BaseEntity{
@Column(name = "TITLE", length = 255, nullable = true) @Column(name = "TITLE", columnDefinition = "TEXT", nullable = true)
private String title; private String title;
@Column(name = "TYPE", length = 255, nullable = false) @Column(name = "TYPE", length = 255, nullable = false)
@@ -18,6 +18,9 @@ public class LookUpDataEntity extends BaseEntity{
@Column(name = "VALUE", columnDefinition = "TEXT", nullable = true) @Column(name = "VALUE", columnDefinition = "TEXT", nullable = true)
private String value; private String value;
@Column(name = "RESPONSE", columnDefinition = "TEXT")
private String response;
public enum LookUpDataTypeEnum { public enum LookUpDataTypeEnum {
CHECKLIST("CHECKLIST"), CHECKLIST("CHECKLIST"),
AIMED_TO("AIMED_TO"), AIMED_TO("AIMED_TO"),

View File

@@ -3,12 +3,8 @@ package net.gepafin.tendermanagement.model.request;
import lombok.Data; import lombok.Data;
@Data @Data
public class FaqReq extends LookUpDataReq{ public class FaqReq extends LookUpDataReq {
private Long id; private Boolean isVisible;
private Boolean isVisible; private String response;
private String questionShort;
private String question;
private String responseShort;
private String response;
} }

View File

@@ -9,5 +9,9 @@ public class LookUpDataReq {
private Long lookUpDataId; private Long lookUpDataId;
private String title;
private String value; private String value;
private String response;
} }

View File

@@ -11,24 +11,14 @@ public class FaqResponseBean extends BaseBean {
private Long userId; private Long userId;
private Boolean isVisible; private String title;
private String questionShort; private String value;
private String question;
private String responseShort;
private String response; private String response;
private LocalDateTime responseDate; private LocalDateTime responseDate;
private Long lookUpDataId; private Boolean isVisible;
private String title;
private String value;
} }

View File

@@ -18,5 +18,6 @@ public interface FaqRepository extends JpaRepository<FaqEntity, Long> {
List<FaqEntity> findByCallIdAndIsDeletedFalse(Long callId); List<FaqEntity> findByCallIdAndIsDeletedFalse(Long callId);
List<FaqEntity> findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type); Optional<FaqEntity> findByIdAndCallIdAndIsDeletedFalse(Long id, Long callId);
} }

View File

@@ -1,5 +1,11 @@
package net.gepafin.tendermanagement.service; package net.gepafin.tendermanagement.service;
import java.util.List;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.request.FaqReq;
import net.gepafin.tendermanagement.model.response.FaqResponseBean; import net.gepafin.tendermanagement.model.response.FaqResponseBean;
@@ -12,4 +18,9 @@ public interface FaqService {
FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest); FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest);
void deleteFaq(HttpServletRequest request, Long id); void deleteFaq(HttpServletRequest request, Long id);
FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity,
LookUpDataTypeEnum type);
List<FaqResponseBean> getFaqByCallId(Long id);
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service;
import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.LookUpDataReq;
import net.gepafin.tendermanagement.model.request.LookUpDataRequest; import net.gepafin.tendermanagement.model.request.LookUpDataRequest;
import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean; import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean;
@@ -21,4 +22,7 @@ public interface LookUpDataService {
List<LookUpDataResponseBean> getLookUpDataByType(List<LookUpDataTypeEnum> type); List<LookUpDataResponseBean> getLookUpDataByType(List<LookUpDataTypeEnum> type);
LookUpDataEntity validateLookUpData(Long lookUpDataId); LookUpDataEntity validateLookUpData(Long lookUpDataId);
LookUpDataEntity getOrCreateLookUpDataEntity(LookUpDataReq req,
LookUpDataEntity.LookUpDataTypeEnum type);
} }

View File

@@ -1,14 +1,19 @@
package net.gepafin.tendermanagement.service.impl; package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.jwt.TokenProvider;
import net.gepafin.tendermanagement.dao.FaqDao; import net.gepafin.tendermanagement.dao.FaqDao;
import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.request.FaqReq;
import net.gepafin.tendermanagement.model.response.FaqResponseBean; import net.gepafin.tendermanagement.model.response.FaqResponseBean;
import net.gepafin.tendermanagement.service.FaqService; import net.gepafin.tendermanagement.service.FaqService;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map; import java.util.List;
@Service @Service
public class FaqServiceImpl implements FaqService { public class FaqServiceImpl implements FaqService {
@@ -17,12 +22,12 @@ public class FaqServiceImpl implements FaqService {
private FaqDao faqDao; private FaqDao faqDao;
@Autowired @Autowired
private TokenProvider tokenProvider; private Validator validator;
@Override @Override
public FaqResponseBean createFaq(HttpServletRequest request,Long callId, FaqReq faqRequest) { public FaqResponseBean createFaq(HttpServletRequest request,Long callId, FaqReq faqRequest) {
Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); UserEntity userEntity = validator.validateUser(request);
return faqDao.createFaq(faqRequest,Long.parseLong(userInfo.get("userId").toString()),callId); return faqDao.createFaq(faqRequest, userEntity,callId);
} }
@Override @Override
@@ -32,13 +37,24 @@ public class FaqServiceImpl implements FaqService {
@Override @Override
public FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest) { public FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest) {
Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); UserEntity userEntity = validator.validateUser(request);
return faqDao.updateFaq(id, faqRequest,Long.parseLong(userInfo.get("userId").toString())); return faqDao.updateFaq(id, faqRequest, userEntity);
} }
@Override @Override
public void deleteFaq(HttpServletRequest request, Long id) { public void deleteFaq(HttpServletRequest request, Long id) {
faqDao.deleteFaq(id); faqDao.deleteFaq(id);
} }
@Override
public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity,
LookUpDataTypeEnum type) {
return faqDao.createOrUpdateFaqEntity(faqReq, callEntity, userEntity, type);
}
@Override
public List<FaqResponseBean> getFaqByCallId(Long callId) {
return faqDao.getFaqByCallId(callId);
}
} }

View File

@@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service.impl;
import net.gepafin.tendermanagement.dao.LookUpDataDao; import net.gepafin.tendermanagement.dao.LookUpDataDao;
import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.model.request.LookUpDataReq;
import net.gepafin.tendermanagement.model.request.LookUpDataRequest; import net.gepafin.tendermanagement.model.request.LookUpDataRequest;
import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean; import net.gepafin.tendermanagement.model.response.LookUpDataResponseBean;
import net.gepafin.tendermanagement.service.LookUpDataService; import net.gepafin.tendermanagement.service.LookUpDataService;
@@ -49,4 +50,10 @@ public class LookUpDataServiceImpl implements LookUpDataService {
public LookUpDataEntity validateLookUpData(Long lookUpDataId) { public LookUpDataEntity validateLookUpData(Long lookUpDataId) {
return lookUpDataDao.validateLookUpData(lookUpDataId); return lookUpDataDao.validateLookUpData(lookUpDataId);
} }
@Override
public LookUpDataEntity getOrCreateLookUpDataEntity(LookUpDataReq req,
LookUpDataEntity.LookUpDataTypeEnum type) {
return lookUpDataDao.getOrCreateLookUpDataEntity(req, type);
}
} }

View File

@@ -2,6 +2,9 @@ package net.gepafin.tendermanagement.util;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.jwt.TokenProvider; import net.gepafin.tendermanagement.config.jwt.TokenProvider;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -13,8 +16,16 @@ public class Validator {
@Autowired @Autowired
private TokenProvider tokenProvider; private TokenProvider tokenProvider;
@Autowired
private UserService userService;
public Map<String, Object> getUserInfoFromToken(HttpServletRequest request) { public Map<String, Object> getUserInfoFromToken(HttpServletRequest request) {
return tokenProvider.getUserInfoAndUserIdFromToken(request); return tokenProvider.getUserInfoAndUserIdFromToken(request);
} }
public UserEntity validateUser(HttpServletRequest request) {
Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request);
return userService.validateUser(Long.parseLong(userInfo.get("userId").toString()));
}
} }

View File

@@ -548,5 +548,21 @@
path="db/dump/update_form_field_data_04_09_2024.sql" /> path="db/dump/update_form_field_data_04_09_2024.sql" />
</changeSet> </changeSet>
<changeSet id="04-09-2024_1" author="Rajesh Khore">
<dropColumn tableName="FAQ" columnName="question_short" />
<dropColumn tableName="FAQ" columnName="question" />
<dropColumn tableName="FAQ" columnName="response_short" />
<dropColumn tableName="FAQ" columnName="lookup_data_id" />
<addColumn tableName="FAQ">
<column name="title" type="TEXT"/>
<column name="value" type="TEXT"/>
</addColumn>
<addColumn tableName="LOOKUP_DATA">
<column name="response" type="TEXT"/>
</addColumn>
<modifyDataType tableName="LOOKUP_DATA" columnName="title" newDataType="TEXT"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>