diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 265061dc..ae87ecf2 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -4,10 +4,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; import net.gepafin.tendermanagement.model.response.*; +import net.gepafin.tendermanagement.service.FaqService; import net.gepafin.tendermanagement.service.LookUpDataService; import org.springframework.beans.factory.annotation.Autowired; 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.EvaluationCriteriaRepository; import net.gepafin.tendermanagement.repositories.FaqRepository; -import net.gepafin.tendermanagement.repositories.LookUpDataRepository; import net.gepafin.tendermanagement.repositories.RegionRepository; import net.gepafin.tendermanagement.service.UserService; 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.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -66,28 +64,29 @@ public class CallDao { @Autowired private RegionRepository regionRepository; + @Autowired private LookUpDataService lookUpDataService; - @Autowired - private LookUpDataRepository lookUpDataRepository; @Autowired private CallTargetAudienceChecklistRepository callTargetAudienceChecklistRepository; @Autowired private UserService userService; + + @Autowired + private FaqService faqService; public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { UserEntity userEntity = userService.validateUser(userId); createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); CallEntity callEntity = convertToCallEntity(createCallRequest); - convertToFaqEntities(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ); + + updateFaq(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ); + convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, 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); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; @@ -149,7 +148,7 @@ public class CallDao { private EvaluationCriteriaEntity convertToEvaluationCriteriaEntity(EvaluationCriteriaReq criteriaReq, CallEntity callEntity, LookUpDataTypeEnum type) { EvaluationCriteriaEntity criteriaEntity = null; - LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(criteriaReq, type); + LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(criteriaReq, type); if (criteriaReq.getId() != null && criteriaReq.getId() > 0) { criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, @@ -201,11 +200,11 @@ public class CallDao { return documentEntity; } - public List convertToFaqEntities(List faqReqList, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) { + public List updateFaq(List faqReqList, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) { if (faqReqList == null) { return null; } - List existingFaqEntities = faqRepository.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue()); + List existingFaqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); List incomingIds = faqReqList.stream() .map(FaqReq::getId) .filter(id -> id != null && id > 0) @@ -214,42 +213,12 @@ public class CallDao { .filter(entity -> !incomingIds.contains(entity.getId())) .forEach(this::softDeleteFaq); List faqEntities = faqReqList.stream() - .map(req -> convertToFaqEntity(req, callEntity, userEntity, type)) + .map(req -> faqService.createOrUpdateFaqEntity(req, callEntity, userEntity, type)) .collect(Collectors.toList()); - faqRepository.saveAll(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) { if (documentId == null || documentId < 1) { 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) { CallResponse createCallResponseBean = new CallResponse(); createCallResponseBean.setId(callEntity.getId()); @@ -332,26 +281,9 @@ public class CallDao { 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, - List evaluationCriteriaEntities, List documentEntities, - List faqEntities, List images) { + List evaluationCriteriaEntities, List documentEntities, + List images) { CallResponse callResponseBean = convertToCallResponseBean(callEntity); @@ -361,15 +293,12 @@ public class CallDao { List documentResponseBeans = documentEntities.stream() .map(this::convertToDocumentResponseBean).collect(Collectors.toList()); - List faqResponseBeans = faqEntities.stream().map(this::convertToFaqResponseBean) - .collect(Collectors.toList()); List imagesResponseBean = images.stream().map(this::convertToDocumentResponseBean) .collect(Collectors.toList()); CallResponse createCallResponseBean = callResponseBean; createCallResponseBean.setCriteria(evaluationCriteriaResponseBeans); createCallResponseBean.setDocs(documentResponseBeans); - createCallResponseBean.setFaq(faqResponseBeans); createCallResponseBean.setImages(imagesResponseBean); return createCallResponseBean; } @@ -380,7 +309,7 @@ public class CallDao { return null; } List lookUpDataEntities = lookUpData.stream() - .map(req -> convertLookUpDataRequestIntoLookUpDataEntity(req, type)).collect(Collectors.toList()); + .map(req -> lookUpDataService.getOrCreateLookUpDataEntity(req, type)).collect(Collectors.toList()); return createCallTargetAudienceCheckList(callEntity, lookUpDataEntities); } @@ -401,21 +330,6 @@ public class CallDao { 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( CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { LookUpDataResponse lookUpDataResponse = new LookUpDataResponse(); @@ -528,62 +442,17 @@ public class CallDao { updateCallRequest.getDocumentationRequested()); setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); 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); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; } - private void updateFaq(CallEntity callEntity, List faqReqList, UserEntity userEntity, LookUpDataTypeEnum type) { - 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, type)); - - } - private void softDeleteFaq(FaqEntity faqEntity) { faqEntity.setIsDeleted(true); 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 lookupDataReqList, LookUpDataTypeEnum type) { if (lookupDataReqList == null) { return; @@ -601,7 +470,7 @@ public class CallDao { private void createOrUpdateCallTargetAudienceChecklist(LookUpDataReq lookUpDataReq, CallEntity callEntity, LookUpDataTypeEnum type) { CallTargetAudienceChecklistEntity checklistEntity = null; - LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(lookUpDataReq, type); + LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(lookUpDataReq, type); if (lookUpDataReq.getId() != null && lookUpDataReq.getId() > 0) { checklistEntity = callTargetAudienceChecklistRepository.findById(lookUpDataReq.getId()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, @@ -656,7 +525,6 @@ public class CallDao { DocumentTypeEnum.DOCUMENT.getValue()); List imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.IMAGES.getValue()); - List faqEntities = faqRepository.findByCallIdAndIsDeletedFalse(callEntity.getId()); List amiedTo = callTargetAudienceChecklistRepository .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() .map(this::convertToLookUpDataResponseBean).toList(); @@ -668,7 +536,8 @@ public class CallDao { .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); CallResponse createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, - documentEntities, faqEntities, imageEntities); + documentEntities, imageEntities); + createCallResponseBean.setFaq(faqService.getFaqByCallId(callEntity.getId())); createCallResponseBean.setAimedTo(amiedTo); createCallResponseBean.setCheckList(checkList); return createCallResponseBean; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java index dcd60c65..482191e3 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java @@ -6,18 +6,22 @@ import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity; 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.response.FaqResponseBean; import net.gepafin.tendermanagement.repositories.FaqRepository; 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.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; + import java.time.LocalDateTime; +import java.util.List; @Component public class FaqDao { @@ -25,77 +29,92 @@ public class FaqDao { @Autowired private FaqRepository faqRepository; - @Autowired - private UserService userService; - - @Autowired - private CallDao callDao; - @Autowired private CallService callService; + + @Autowired + private LookUpDataService lookUpDataService; - public FaqResponseBean createFaq(FaqReq faqRequest, Long userId, Long callId) { + public FaqResponseBean createFaq(FaqReq faqRequest, UserEntity userEntity, Long callId) { FaqEntity entity = new FaqEntity(); CallEntity callEntity = callService.validateCall(callId); - ; - UserEntity userEntity = userService.validateUser(userId); - entity = callDao.convertToFaqEntity(faqRequest, callEntity, userEntity, + entity = createOrUpdateFaqEntity(faqRequest, callEntity, userEntity, LookUpDataEntity.LookUpDataTypeEnum.FAQ); faqRepository.save(entity); - return convertFaqEntityToResponseBean(entity); + return convertToFaqResponseBean(entity); } public FaqResponseBean getFaqById(Long id) { - return faqRepository.findById(id).map(this::convertFaqEntityToResponseBean) - .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); + return convertToFaqResponseBean(validateFaq(id)); } - public FaqResponseBean updateFaq(Long id, FaqReq faqRequest, Long userId) { - FaqEntity entity = faqRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); - updateFaqEntity(entity, faqRequest, userId, entity.getCall()); - faqRepository.save(entity); - return convertFaqEntityToResponseBean(entity); + public FaqResponseBean updateFaq(Long id, FaqReq faqRequest, UserEntity userEntity) { + FaqEntity entity = validateFaq(id); + faqRequest.setId(entity.getId()); + createOrUpdateFaqEntity(faqRequest, entity.getCall(), userEntity, LookUpDataEntity.LookUpDataTypeEnum.FAQ); + return convertToFaqResponseBean(entity); } 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))); - faqRepository.deleteById(entity.getId()); - + } + + public List getFaqByCallId(Long callId) { + callService.validateCall(callId); + return faqRepository.findByCallIdAndIsDeletedFalse(callId).stream().map(this::convertToFaqResponseBean) + .toList(); } - private FaqResponseBean convertFaqEntityToResponseBean(FaqEntity entity) { - FaqResponseBean response = new FaqResponseBean(); - response.setId(entity.getId()); - response.setUserId(entity.getUser().getId()); - 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()); - UserEntity userEntity = userService.validateUser(userId); - faqEntity.setUser(userEntity); - faqEntity.setIsVisible(true); - if (faqReq.getIsVisible() != null) { - faqEntity.setIsVisible(faqReq.getIsVisible()); + + public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, + LookUpDataTypeEnum type) { + FaqEntity faqEntity = null; + if (isExistingFaq(faqReq)) { + faqEntity = faqRepository.findByIdAndCallIdAndIsDeletedFalse(faqReq.getId(), callEntity.getId()) + .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()); - faqEntity.setQuestion(faqReq.getQuestion()); - if (faqReq.getResponse() != null || faqReq.getResponseShort() != null) { + if (faqReq.getResponse() != null && (faqEntity.getResponse() == null + || Boolean.FALSE.equals(faqReq.getResponse().equals(faqEntity.getResponse())))) { faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); } - faqEntity.setResponseShort(faqReq.getResponseShort()); - faqEntity.setResponse(faqReq.getResponse()); - faqEntity.setCall(callEntity); + setIfUpdated(faqEntity::getTitle, faqEntity::setTitle, faqReq.getTitle()); + setIfUpdated(faqEntity::getValue, faqEntity::setValue, faqReq.getValue()); + 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; + } + } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/dao/LookUpDataDao.java b/src/main/java/net/gepafin/tendermanagement/dao/LookUpDataDao.java index 0c700b00..f83d7c76 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/LookUpDataDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/LookUpDataDao.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.entities.LookUpDataEntity; 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.response.LookUpDataResponseBean; import net.gepafin.tendermanagement.repositories.LookUpDataRepository; @@ -82,6 +83,23 @@ public class LookUpDataDao { .map(this::convertLookUpDataEntityToResponseBean) .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))); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java index 04a1c11b..38cd3b2b 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java @@ -27,22 +27,15 @@ public class FaqEntity extends BaseEntity { @Column(name = "IS_VISIBLE", nullable = false) private Boolean isVisible; - @Column(name = "QUESTION_SHORT", length = 255) - private String questionShort; - - @Column(name = "QUESTION", columnDefinition = "TEXT") - private String question; - - @Column(name = "RESPONSE_SHORT", length = 255) - private String responseShort; + @Column(name = "TITLE", columnDefinition = "TEXT") + private String title; + + @Column(name = "VALUE", columnDefinition = "TEXT") + private String value; @Column(name = "RESPONSE", columnDefinition = "TEXT") private String response; - @ManyToOne - @JoinColumn(name = "LOOKUP_DATA_ID") - private LookUpDataEntity lookupData; - @Column(name = "RESPONSE_DATE") private LocalDateTime responseDate; diff --git a/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java index 5941b7b8..1afe87aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java @@ -9,7 +9,7 @@ import lombok.Data; @Data public class LookUpDataEntity extends BaseEntity{ - @Column(name = "TITLE", length = 255, nullable = true) + @Column(name = "TITLE", columnDefinition = "TEXT", nullable = true) private String title; @Column(name = "TYPE", length = 255, nullable = false) @@ -17,6 +17,9 @@ public class LookUpDataEntity extends BaseEntity{ @Column(name = "VALUE", columnDefinition = "TEXT", nullable = true) private String value; + + @Column(name = "RESPONSE", columnDefinition = "TEXT") + private String response; public enum LookUpDataTypeEnum { CHECKLIST("CHECKLIST"), 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 b8bd81fb..0018689e 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java @@ -3,12 +3,8 @@ package net.gepafin.tendermanagement.model.request; import lombok.Data; @Data -public class FaqReq extends LookUpDataReq{ +public class FaqReq extends LookUpDataReq { - private Long id; - private Boolean isVisible; - private String questionShort; - private String question; - private String responseShort; - private String response; + private Boolean isVisible; + private String response; } 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 441d19b6..e3ffc634 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java @@ -8,6 +8,10 @@ public class LookUpDataReq { private Long id; private Long lookUpDataId; + + private String title; private String value; + + private String response; } 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 c6846e25..133e3327 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java @@ -11,24 +11,14 @@ public class FaqResponseBean extends BaseBean { private Long userId; - private Boolean isVisible; - - private String questionShort; - - private String question; - - private String responseShort; - - private String response; - - private LocalDateTime responseDate; - - private Long lookUpDataId; - private String title; private String value; + private String response; + private LocalDateTime responseDate; + + private Boolean isVisible; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java index 6ceec35f..3727e4ef 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java @@ -17,6 +17,7 @@ public interface FaqRepository extends JpaRepository { Optional findById(@Param("id") Long id); List findByCallIdAndIsDeletedFalse(Long callId); + + Optional findByIdAndCallIdAndIsDeletedFalse(Long id, Long callId); - List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/FaqService.java b/src/main/java/net/gepafin/tendermanagement/service/FaqService.java index 58ca8234..55adc950 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/FaqService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/FaqService.java @@ -1,5 +1,11 @@ package net.gepafin.tendermanagement.service; +import java.util.List; + 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.response.FaqResponseBean; @@ -12,4 +18,9 @@ public interface FaqService { FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest); void deleteFaq(HttpServletRequest request, Long id); + + FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, + LookUpDataTypeEnum type); + + List getFaqByCallId(Long id); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/LookUpDataService.java b/src/main/java/net/gepafin/tendermanagement/service/LookUpDataService.java index 1a3e448b..24767dc3 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/LookUpDataService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/LookUpDataService.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service; import net.gepafin.tendermanagement.entities.LookUpDataEntity; 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.response.LookUpDataResponseBean; @@ -21,4 +22,7 @@ public interface LookUpDataService { List getLookUpDataByType(List type); LookUpDataEntity validateLookUpData(Long lookUpDataId); + + LookUpDataEntity getOrCreateLookUpDataEntity(LookUpDataReq req, + LookUpDataEntity.LookUpDataTypeEnum type); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/FaqServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/FaqServiceImpl.java index 252935f2..78a458f3 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/FaqServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/FaqServiceImpl.java @@ -1,14 +1,19 @@ package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; -import net.gepafin.tendermanagement.config.jwt.TokenProvider; 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.response.FaqResponseBean; import net.gepafin.tendermanagement.service.FaqService; +import net.gepafin.tendermanagement.util.Validator; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Map; +import java.util.List; @Service public class FaqServiceImpl implements FaqService { @@ -17,12 +22,12 @@ public class FaqServiceImpl implements FaqService { private FaqDao faqDao; @Autowired - private TokenProvider tokenProvider; + private Validator validator; @Override public FaqResponseBean createFaq(HttpServletRequest request,Long callId, FaqReq faqRequest) { - Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); - return faqDao.createFaq(faqRequest,Long.parseLong(userInfo.get("userId").toString()),callId); + UserEntity userEntity = validator.validateUser(request); + return faqDao.createFaq(faqRequest, userEntity,callId); } @Override @@ -32,13 +37,24 @@ public class FaqServiceImpl implements FaqService { @Override public FaqResponseBean updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest) { - Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); - return faqDao.updateFaq(id, faqRequest,Long.parseLong(userInfo.get("userId").toString())); + UserEntity userEntity = validator.validateUser(request); + return faqDao.updateFaq(id, faqRequest, userEntity); } @Override public void deleteFaq(HttpServletRequest request, Long 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 getFaqByCallId(Long callId) { + return faqDao.getFaqByCallId(callId); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/LookUpDataServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/LookUpDataServiceImpl.java index 420e4372..3d53c8fa 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/LookUpDataServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/LookUpDataServiceImpl.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.service.impl; import net.gepafin.tendermanagement.dao.LookUpDataDao; import net.gepafin.tendermanagement.entities.LookUpDataEntity; 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.response.LookUpDataResponseBean; import net.gepafin.tendermanagement.service.LookUpDataService; @@ -49,4 +50,10 @@ public class LookUpDataServiceImpl implements LookUpDataService { public LookUpDataEntity validateLookUpData(Long lookUpDataId) { return lookUpDataDao.validateLookUpData(lookUpDataId); } + + @Override + public LookUpDataEntity getOrCreateLookUpDataEntity(LookUpDataReq req, + LookUpDataEntity.LookUpDataTypeEnum type) { + return lookUpDataDao.getOrCreateLookUpDataEntity(req, type); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/util/Validator.java b/src/main/java/net/gepafin/tendermanagement/util/Validator.java index 70263878..a831c2dc 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Validator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Validator.java @@ -2,6 +2,9 @@ package net.gepafin.tendermanagement.util; import jakarta.servlet.http.HttpServletRequest; 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.stereotype.Component; @@ -12,9 +15,17 @@ public class Validator { @Autowired private TokenProvider tokenProvider; + + @Autowired + private UserService userService; public Map getUserInfoFromToken(HttpServletRequest request) { return tokenProvider.getUserInfoAndUserIdFromToken(request); } + public UserEntity validateUser(HttpServletRequest request) { + Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); + return userService.validateUser(Long.parseLong(userInfo.get("userId").toString())); + } + } 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 58cddda8..c70e4ab9 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 @@ -548,5 +548,21 @@ path="db/dump/update_form_field_data_04_09_2024.sql" /> + + + + + + + + + + + + + + + +