package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.FormFieldEntity; import net.gepafin.tendermanagement.model.request.FormFieldRequest; import net.gepafin.tendermanagement.model.request.SettingRequestBean; import net.gepafin.tendermanagement.model.response.FormFieldResponseBean; import net.gepafin.tendermanagement.model.response.SettingResponseBean; import net.gepafin.tendermanagement.repositories.FormFieldRepository; import net.gepafin.tendermanagement.util.DateTimeUtil; 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.List; import java.util.stream.Collectors; @Component public class FormFieldDao { @Autowired private FormFieldRepository formFieldRepository; public FormFieldEntity convertFormFieldRequestToFormFieldEntity(FormFieldRequest formFieldRequest) { FormFieldEntity formFieldEntity = new FormFieldEntity(); formFieldEntity.setLabel(formFieldRequest.getLabel()); formFieldEntity.setName(formFieldRequest.getName()); formFieldEntity.setDescription(formFieldRequest.getDescription()); formFieldEntity.setSortOrder(formFieldRequest.getSortOrder()); formFieldEntity.setValidators(Utils.convertMapIntoJsonString(formFieldRequest.getValidators())); formFieldEntity.setSettings(setSettingRequestBean(formFieldRequest.getSettings())); formFieldEntity = saveFormFieldEntity(formFieldEntity); return formFieldEntity; } public FormFieldResponseBean convertFormFieldEntityToFormFieldResponseBean(FormFieldEntity formFieldEntity) { FormFieldResponseBean formFieldResponseBean = new FormFieldResponseBean(); formFieldResponseBean.setId(formFieldEntity.getId()); formFieldResponseBean.setName(formFieldEntity.getName()); formFieldResponseBean.setDescription(formFieldEntity.getDescription()); formFieldResponseBean.setSortOrder(formFieldEntity.getSortOrder()); formFieldResponseBean .setSettings(Utils.convertJsonStringToList(formFieldEntity.getSettings(), SettingResponseBean.class)); formFieldResponseBean.setLabel(formFieldEntity.getLabel()); formFieldResponseBean.setValidators(Utils.convertIntoJson(formFieldEntity.getValidators())); return formFieldResponseBean; } public FormFieldEntity saveFormFieldEntity(FormFieldEntity formFieldEntity) { formFieldEntity = formFieldRepository.save(formFieldEntity); return formFieldEntity; } public void validateFormField(FormFieldRequest formFieldRequest) { if (formFieldRequest.getSettings() == null || formFieldRequest.getLabel() == null) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM_FIELD)); } } public FormFieldResponseBean createFormField(FormFieldRequest formFieldRequest) { validateFormField(formFieldRequest); FormFieldEntity formFieldEntity = convertFormFieldRequestToFormFieldEntity(formFieldRequest); return convertFormFieldEntityToFormFieldResponseBean(formFieldEntity); } public FormFieldResponseBean updateFormField(Long formFieldId, FormFieldRequest formFieldRequest) { FormFieldEntity formFieldEntity = validateFormField(formFieldId); Utils.setIfUpdated(formFieldEntity::getName, formFieldEntity::setName, formFieldRequest.getName()); Utils.setIfUpdated(formFieldEntity::getLabel, formFieldEntity::setLabel, formFieldRequest.getLabel()); Utils.setIfUpdated(formFieldEntity::getDescription, formFieldEntity::setDescription, formFieldRequest.getDescription()); Utils.setIfUpdated(formFieldEntity::getSortOrder, formFieldEntity::setSortOrder, formFieldRequest.getSortOrder()); Utils.setIfUpdated(formFieldEntity::getSettings, formFieldEntity::setSettings, setSettingRequestBean(formFieldRequest.getSettings())); Utils.setIfUpdated(formFieldEntity::getValidators, formFieldEntity::setValidators, Utils.convertMapIntoJsonString(formFieldRequest.getValidators())); formFieldEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); formFieldEntity = saveFormFieldEntity(formFieldEntity); return convertFormFieldEntityToFormFieldResponseBean(formFieldEntity); } public FormFieldEntity validateFormField(Long formFieldId) { FormFieldEntity formFieldEntity = formFieldRepository.findById(formFieldId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FORM_FIELD_NOT_FOUND))); return formFieldEntity; } public FormFieldResponseBean getFormFieldEntityById(Long formFieldId) { FormFieldEntity formEntity = validateFormField(formFieldId); return convertFormFieldEntityToFormFieldResponseBean(formEntity); } public void deleteFormById(Long formFieldId) { FormFieldEntity formEntity = validateFormField(formFieldId); formFieldRepository.delete(formEntity); } public String setSettingRequestBean(List settingRequestBeans) { return Utils.convertListToJsonString(settingRequestBeans); } public List getAllFormField() { List formFieldEntities = formFieldRepository.findAll(); List formFieldResponseBeans = formFieldEntities.stream() .map(req -> convertFormFieldEntityToFormFieldResponseBean(req)).collect(Collectors.toList()); return formFieldResponseBeans; } }