package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.FormTemplateEntity; import net.gepafin.tendermanagement.model.request.ContentRequestBean; import net.gepafin.tendermanagement.model.request.FormTemplateRequest; import net.gepafin.tendermanagement.model.response.ContentResponseBean; import net.gepafin.tendermanagement.model.response.FormTemplateResponseBean; import net.gepafin.tendermanagement.repositories.FormTemplateRepository; 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 FormTemplateDao { @Autowired private FormTemplateRepository formTemplateRepository; public FormTemplateEntity convertFormTemplateRequestToFormTemplateRequest(FormTemplateRequest formTemplateRequest) { FormTemplateEntity formTemplateEntity = new FormTemplateEntity(); formTemplateEntity.setContent(setContentResponseBean(formTemplateRequest.getContent())); formTemplateEntity.setLabel(formTemplateRequest.getLabel()); formTemplateEntity = saveFormTemplateEntity(formTemplateEntity); return formTemplateEntity; } public FormTemplateEntity saveFormTemplateEntity(FormTemplateEntity formTemplateEntity) { formTemplateEntity = formTemplateRepository.save(formTemplateEntity); return formTemplateEntity; } public FormTemplateResponseBean convertFormTemplateEntityToFormTemplateResponseBean( FormTemplateEntity formTemplateEntity) { FormTemplateResponseBean formTemplateResponseBean = new FormTemplateResponseBean(); formTemplateResponseBean.setId(formTemplateEntity.getId()); formTemplateResponseBean .setContent(Utils.convertJsonStringToList(formTemplateEntity.getContent(), ContentResponseBean.class)); formTemplateResponseBean.setLabel(formTemplateEntity.getLabel()); return formTemplateResponseBean; } public FormTemplateResponseBean createFormTemplate(FormTemplateRequest formTemplateRequest) { validateFormTemplate(formTemplateRequest); FormTemplateEntity formTemplateEntity = convertFormTemplateRequestToFormTemplateRequest(formTemplateRequest); return convertFormTemplateEntityToFormTemplateResponseBean(formTemplateEntity); } public void validateFormTemplate(FormTemplateRequest formTemplateRequest) { if (formTemplateRequest.getContent() == null || formTemplateRequest.getLabel() == null) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM_TEMPLATE)); } } public FormTemplateResponseBean updateFormTemplate(Long formTemplateId, FormTemplateRequest formTemplateRequest) { FormTemplateEntity formTemplateEntity = validateFormTemplate(formTemplateId); Utils.setIfUpdated(formTemplateEntity::getLabel, formTemplateEntity::setLabel, formTemplateRequest.getLabel()); Utils.setIfUpdated(formTemplateEntity::getContent, formTemplateEntity::setContent, setContentResponseBean(formTemplateRequest.getContent())); formTemplateEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); formTemplateEntity = saveFormTemplateEntity(formTemplateEntity); return convertFormTemplateEntityToFormTemplateResponseBean(formTemplateEntity); } public FormTemplateEntity validateFormTemplate(Long formTemplateId) { FormTemplateEntity formTemplateEntity = formTemplateRepository.findById(formTemplateId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FORM_TEMPLATE_NOT_FOUND))); return formTemplateEntity; } public FormTemplateResponseBean getFormTemplateEntityById(Long formTemplateId) { FormTemplateEntity formTemplateEntity = validateFormTemplate(formTemplateId); return convertFormTemplateEntityToFormTemplateResponseBean(formTemplateEntity); } public void deleteFormTemplateById(Long formTemplateId) { FormTemplateEntity formTemplateEntity = validateFormTemplate(formTemplateId); formTemplateRepository.delete(formTemplateEntity); } public String setContentResponseBean(List contentRequestBeans) { return Utils.convertListToJsonString(contentRequestBeans); } public List getAllFormTemplate() { List formTemplateEntities = formTemplateRepository.findAll(); List formTemplateResponseBeans = formTemplateEntities.stream() .map(req -> convertFormTemplateEntityToFormTemplateResponseBean(req)).collect(Collectors.toList()); return formTemplateResponseBeans; } }