177 lines
7.6 KiB
Java
177 lines
7.6 KiB
Java
package net.gepafin.tendermanagement.dao;
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
import net.gepafin.tendermanagement.config.Translator;
|
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
|
import net.gepafin.tendermanagement.entities.*;
|
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
|
import net.gepafin.tendermanagement.entities.FaqEntity;
|
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
|
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
|
|
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
|
|
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
|
|
import net.gepafin.tendermanagement.model.request.FaqReq;
|
|
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
|
|
import net.gepafin.tendermanagement.model.response.FaqResponseBean;
|
|
import net.gepafin.tendermanagement.repositories.FaqRepository;
|
|
import net.gepafin.tendermanagement.repositories.UserWithCompanyRepository;
|
|
import net.gepafin.tendermanagement.service.CallService;
|
|
import net.gepafin.tendermanagement.service.CompanyService;
|
|
import net.gepafin.tendermanagement.service.LookUpDataService;
|
|
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
|
import net.gepafin.tendermanagement.util.LoggingUtil;
|
|
import net.gepafin.tendermanagement.util.Utils;
|
|
import net.gepafin.tendermanagement.util.Validator;
|
|
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;
|
|
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;
|
|
import java.util.Optional;
|
|
|
|
@Component
|
|
public class FaqDao {
|
|
|
|
@Autowired
|
|
private FaqRepository faqRepository;
|
|
|
|
@Autowired
|
|
private CallService callService;
|
|
|
|
@Autowired
|
|
private LookUpDataService lookUpDataService;
|
|
|
|
@Autowired
|
|
private Validator validator;
|
|
|
|
@Autowired
|
|
private CompanyService companyService;
|
|
|
|
@Autowired
|
|
private UserWithCompanyRepository userWithCompanyRepository;
|
|
|
|
@Autowired
|
|
HttpServletRequest request;
|
|
|
|
@Autowired
|
|
LoggingUtil loggingUtil;
|
|
|
|
public FaqResponseBean createFaq(FaqReq faqRequest, UserEntity userEntity, Long callId, Long companyId) {
|
|
|
|
CallEntity callEntity = callService.validateCall(callId);
|
|
FaqEntity entity = createOrUpdateFaqEntity(faqRequest, callEntity, userEntity, LookUpDataTypeEnum.FAQ);
|
|
FaqEntity oldFaqEntity = Utils.getClonedEntityForData(entity);
|
|
if ((Boolean.TRUE.equals(validator.checkIsBeneficiary()) || Boolean.TRUE.equals(validator.checkIsConfidi())) && companyId == null) {
|
|
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.COMPANY_ID_MANDATORY));
|
|
}
|
|
UserWithCompanyEntity userWithCompanyEntity=null;
|
|
if(companyId!=null) {
|
|
userWithCompanyEntity=companyService.getUserWithCompany(userEntity.getId(),companyId);
|
|
companyService.validateCompany(userWithCompanyEntity.getCompanyId());
|
|
entity.setCompanyId(userWithCompanyEntity.getCompanyId());
|
|
|
|
}
|
|
|
|
entity.setUserWithCompany(userWithCompanyEntity);
|
|
faqRepository.save(entity);
|
|
|
|
if (entity.getCompanyId() != null) {
|
|
/** This code is responsible for adding a version history log for the "Create FAQ" operation. **/
|
|
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldFaqEntity).newData(entity).build());
|
|
}
|
|
return convertToFaqResponseBean(entity);
|
|
}
|
|
|
|
public FaqResponseBean getFaqById(Long id) {
|
|
return convertToFaqResponseBean(validateFaq(id));
|
|
}
|
|
|
|
public FaqResponseBean updateFaq(Long id, FaqReq faqRequest, UserEntity userEntity) {
|
|
FaqEntity entity = validateFaq(id);
|
|
faqRequest.setId(entity.getId());
|
|
createOrUpdateFaqEntity(faqRequest, entity.getCall(), userEntity, LookUpDataTypeEnum.FAQ);
|
|
return convertToFaqResponseBean(entity);
|
|
}
|
|
|
|
public void deleteFaq(Long id) {
|
|
|
|
FaqEntity faqEntity = validateFaq(id);
|
|
FaqEntity oldFaqEntity = Utils.getClonedEntityForData(faqEntity);
|
|
faqEntity.setIsDeleted(Boolean.TRUE);
|
|
faqRepository.save(faqEntity);
|
|
|
|
/** This code is responsible for adding a version history log for the "soft delete faq" operation **/
|
|
loggingUtil.addVersionHistory(
|
|
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldFaqEntity).newData(faqEntity).build());
|
|
}
|
|
|
|
public FaqEntity validateFaq(Long id) {
|
|
return faqRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
|
|
Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
|
|
}
|
|
|
|
public List<FaqResponseBean> getFaqByCallId(Long callId) {
|
|
callService.validateCall(callId);
|
|
return faqRepository.findByCallIdAndIsDeletedFalse(callId).stream().map(this::convertToFaqResponseBean)
|
|
.toList();
|
|
}
|
|
|
|
public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) {
|
|
|
|
FaqEntity faqEntity = null;
|
|
FaqEntity oldFaqEntity = null;
|
|
VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT;
|
|
if (isExistingFaq(faqReq)) {
|
|
faqEntity = faqRepository.findByIdAndCallIdAndIsDeletedFalse(faqReq.getId(), callEntity.getId())
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND)));
|
|
oldFaqEntity = Utils.getClonedEntityForData(faqEntity);
|
|
actionType = VersionActionTypeEnum.UPDATE;
|
|
} else {
|
|
if (Boolean.FALSE.equals(userEntity.getRoleEntity().getRoleType().equals(RoleStatusEnum.ROLE_BENEFICIARY.getValue())) && Boolean.FALSE.equals(userEntity.getRoleEntity().getRoleType().equals(RoleStatusEnum.ROLE_CONFIDI.getValue()))) {
|
|
lookUpDataService.getOrCreateLookUpDataEntity(faqReq, type);
|
|
}
|
|
faqEntity = new FaqEntity();
|
|
faqEntity.setCall(callEntity);
|
|
faqEntity.setUser(userEntity);
|
|
faqEntity.setIsVisible(false);
|
|
faqEntity.setIsDeleted(false);
|
|
actionType = VersionActionTypeEnum.INSERT;
|
|
}
|
|
if (faqReq.getResponse() != null && (faqEntity.getResponse() == null || Boolean.FALSE.equals(faqReq.getResponse().equals(faqEntity.getResponse())))) {
|
|
faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
|
}
|
|
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());
|
|
faqEntity = faqRepository.save(faqEntity);
|
|
|
|
/** This code is responsible for adding a version history log for the "create or update faq" operation **/
|
|
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldFaqEntity).newData(faqEntity).build());
|
|
return 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;
|
|
}
|
|
|
|
} |