152 lines
7.3 KiB
Java
152 lines
7.3 KiB
Java
package net.gepafin.tendermanagement.dao;
|
|
|
|
import net.gepafin.tendermanagement.config.Translator;
|
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
|
import net.gepafin.tendermanagement.entities.*;
|
|
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
|
|
import net.gepafin.tendermanagement.model.request.ContentRequestBean;
|
|
import net.gepafin.tendermanagement.model.request.FieldValidatorBean;
|
|
import net.gepafin.tendermanagement.model.request.FormRequest;
|
|
import net.gepafin.tendermanagement.model.response.ContentResponseBean;
|
|
import net.gepafin.tendermanagement.model.response.FormResponseBean;
|
|
import net.gepafin.tendermanagement.repositories.ApplicationFormRepository;
|
|
import net.gepafin.tendermanagement.repositories.FormRepository;
|
|
import net.gepafin.tendermanagement.service.CallService;
|
|
import net.gepafin.tendermanagement.util.DateTimeUtil;
|
|
import net.gepafin.tendermanagement.util.FieldValidator;
|
|
import net.gepafin.tendermanagement.util.Utils;
|
|
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 java.time.LocalDateTime;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Component
|
|
public class FormDao {
|
|
|
|
@Autowired
|
|
private FormRepository formRepository;
|
|
|
|
@Autowired
|
|
private CallService callService;
|
|
|
|
@Autowired
|
|
private ApplicationFormRepository applicationFormRepository;
|
|
|
|
@Autowired
|
|
private CallDao callDao;
|
|
|
|
public FormEntity saveFormEntity(FormEntity formEntity){
|
|
formEntity=formRepository.save(formEntity);
|
|
return formEntity;
|
|
}
|
|
|
|
public FormEntity convertFormRequestToFormEntity(Long callId,FormRequest formRequest){
|
|
FormEntity formEntity=new FormEntity();
|
|
CallEntity callEntity=callService.getCallEntityById(callId);
|
|
formEntity.setCall(callEntity);
|
|
formEntity.setLabel(formRequest.getLabel());
|
|
formEntity.setContent(setContentResponseBean(formRequest.getContent()));
|
|
formEntity=saveFormEntity(formEntity);
|
|
return formEntity;
|
|
}
|
|
public FormResponseBean convertFormEntityToFormResponseBean(FormEntity formEntity){
|
|
FormResponseBean formResponseBean=new FormResponseBean();
|
|
formResponseBean.setId(formEntity.getId());
|
|
formResponseBean.setContent(Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class));
|
|
formResponseBean.setLabel(formEntity.getLabel());
|
|
formResponseBean.setCallId(formEntity.getCall().getId());
|
|
return formResponseBean;
|
|
}
|
|
public FormResponseBean createForm(Long callId,FormRequest formRequest){
|
|
validateForm(formRequest);
|
|
FormEntity formEntity=convertFormRequestToFormEntity(callId,formRequest);
|
|
return convertFormEntityToFormResponseBean(formEntity);
|
|
}
|
|
public void validateForm(FormRequest formRequest){
|
|
if(formRequest.getContent()==null || formRequest.getLabel()==null ){
|
|
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM));
|
|
}
|
|
}
|
|
public FormResponseBean updateForm(Long formId, FormRequest formRequest){
|
|
FormEntity formEntity = validateForm(formId);
|
|
callDao.validateUpdate(formEntity.getCall());
|
|
Utils.setIfUpdated(formEntity::getLabel,formEntity::setLabel,formRequest.getLabel());
|
|
Utils.setIfUpdated(formEntity::getContent,formEntity::setContent,setContentResponseBean(formRequest.getContent()));
|
|
formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
|
formEntity=saveFormEntity(formEntity);
|
|
return convertFormEntityToFormResponseBean(formEntity);
|
|
}
|
|
|
|
public FormEntity validateForm(Long formId) {
|
|
FormEntity formEntity = formRepository.findById(formId)
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FORM_NOT_FOUND)));
|
|
return formEntity;
|
|
}
|
|
|
|
public FormResponseBean getFormEntityById(Long formId) {
|
|
FormEntity formEntity = validateForm(formId);
|
|
return convertFormEntityToFormResponseBean(formEntity);
|
|
}
|
|
public void deleteFormById(Long formId){
|
|
FormEntity formEntity = validateForm(formId);
|
|
formRepository.delete(formEntity);
|
|
}
|
|
public List<FormResponseBean> getFormsByCallId(Long callId){
|
|
CallEntity callEntity=callService.validateCall(callId);
|
|
if(callEntity== null){
|
|
throw new CustomValidationException(Status.VALIDATION_ERROR,
|
|
Translator.toLocale(GepafinConstant.CALL_NOT_FOUND));
|
|
}
|
|
List<FormEntity> formEntities=formRepository.findByCallId(callId);
|
|
List<FormResponseBean> formResponseBeanList = formEntities.stream()
|
|
.map(req -> convertFormEntityToFormResponseBean(req))
|
|
.collect(Collectors.toList());
|
|
return formResponseBeanList;
|
|
}
|
|
public String setContentResponseBean(List<ContentRequestBean> contentRequestBeans){
|
|
return Utils.convertListToJsonString(contentRequestBeans);
|
|
}
|
|
|
|
public void validateFormField(List<ApplicationFormFieldRequestBean> applicationFormFieldRequestList, ApplicationEntity applicationEntity, FormEntity formEntity) {
|
|
Map<String, String> formFieldMap = new LinkedHashMap<String, String>();
|
|
for(ApplicationFormFieldRequestBean applicationFormFieldRequestBean:applicationFormFieldRequestList) {
|
|
formFieldMap.put(applicationFormFieldRequestBean.getFieldId(),applicationFormFieldRequestBean.getFieldValue());
|
|
}
|
|
|
|
FormResponseBean formResponseBean = convertFormEntityToFormResponseBean(formEntity);
|
|
ApplicationFormEntity applicationFormEntity=applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(),formEntity.getId());
|
|
Boolean isApplicationFormExist= getApplicationFormExist(applicationFormEntity);
|
|
FieldValidator validator = FieldValidator.create();
|
|
formResponseBean.getContent().forEach(contentResponseBean -> {
|
|
String fieldId = contentResponseBean.getId();
|
|
String value = formFieldMap.get(fieldId);
|
|
if(value == null && isApplicationFormExist) {
|
|
return;
|
|
}
|
|
FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean, FieldValidatorBean.class);
|
|
validator
|
|
.notNull(value, fieldId)
|
|
.minLength(value, fieldValidatorBean.getMinLength(), fieldId) // Only applies if minLength is not null
|
|
.maxLength(value, fieldValidatorBean.getMaxLength(), fieldId) // Only applies if maxLength is not null
|
|
.matchesPattern(value, fieldValidatorBean.getPattern(), fieldId); // Only applies if pattern is present
|
|
});
|
|
|
|
validator.validate();
|
|
|
|
}
|
|
|
|
private Boolean getApplicationFormExist(ApplicationFormEntity applicationFormEntity) {
|
|
if(applicationFormEntity !=null) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|