Done ticket
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
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.enums.ApplicationStatusTypeEnum;
|
||||
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
|
||||
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
|
||||
import net.gepafin.tendermanagement.model.response.ApplicationFormFieldResponseBean;
|
||||
import net.gepafin.tendermanagement.model.response.ApplicationResponseBean;
|
||||
import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository;
|
||||
import net.gepafin.tendermanagement.repositories.ApplicationFormRepository;
|
||||
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
|
||||
import net.gepafin.tendermanagement.service.CallService;
|
||||
import net.gepafin.tendermanagement.service.FormService;
|
||||
import net.gepafin.tendermanagement.service.UserService;
|
||||
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.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class ApplicationDao {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(ApplicationDao.class);
|
||||
|
||||
|
||||
@Autowired
|
||||
private CallService callService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private ApplicationRepository applicationRepository;
|
||||
|
||||
@Autowired
|
||||
private ApplicationFormRepository applicationFormRepository;
|
||||
|
||||
@Autowired
|
||||
private ApplicationFormFieldRepository applicationFormFieldRepository;
|
||||
|
||||
@Autowired
|
||||
private FormService formService;
|
||||
|
||||
public ApplicationResponseBean createApplication(ApplicationRequestBean applicationRequestBean, UserEntity userEntity, Long callId) {
|
||||
CallEntity call = callService.validateCall(callId);
|
||||
FormEntity formEntity = formService.validateForm(applicationRequestBean.getFormId());
|
||||
ApplicationEntity applicationEntity = getApplicationOrCreate(userEntity, call, formEntity);
|
||||
formService.validateFormField(applicationRequestBean.getFormFields(),applicationEntity,formEntity);
|
||||
ApplicationFormEntity applicationFormEntity = getApplicationFormOrCreate(formEntity, applicationEntity);
|
||||
createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationFormEntity);
|
||||
return getApplicationById(applicationEntity.getId(),formEntity.getId());
|
||||
}
|
||||
|
||||
public ApplicationFormEntity saveApplicationFormEntity(ApplicationFormEntity applicationFormEntity) {
|
||||
ApplicationFormEntity applicationFormEntity1 = applicationFormRepository.save(applicationFormEntity);
|
||||
return applicationFormEntity1;
|
||||
}
|
||||
|
||||
public void validateFormId(FormEntity formEntity, CallEntity callEntity) {
|
||||
if (Boolean.FALSE.equals(formEntity.getId().equals(callEntity.getInitialForm()))) {
|
||||
throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.FORM_ID_DOES_NOT_MACTHES));
|
||||
}
|
||||
}
|
||||
|
||||
public ApplicationFormEntity createApplicationFormEntity(ApplicationEntity application, FormEntity formEntity) {
|
||||
ApplicationFormEntity applicationFormEntity = new ApplicationFormEntity();
|
||||
applicationFormEntity.setApplication(application);
|
||||
applicationFormEntity.setForm(formEntity);
|
||||
applicationFormEntity = saveApplicationFormEntity(applicationFormEntity);
|
||||
return applicationFormEntity;
|
||||
}
|
||||
|
||||
public ApplicationEntity createApplicationEntity(UserEntity user, CallEntity call) {
|
||||
ApplicationEntity entity = new ApplicationEntity();
|
||||
entity.setUser(user);
|
||||
entity.setCall(call);
|
||||
entity.setIsDeleted(false);
|
||||
entity.setStatus(ApplicationStatusTypeEnum.DRAFT.getValue());
|
||||
return entity;
|
||||
}
|
||||
|
||||
public ApplicationResponseBean getApplicationById(Long id,Long formId) {
|
||||
log.info("Fetching application with ID: {}", id);
|
||||
|
||||
ApplicationEntity applicationEntity = validateApplication(id);
|
||||
List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationId(applicationEntity.getId());
|
||||
List<ApplicationFormFieldResponseBean> applicationFormFieldResponseBeans=new ArrayList<>();
|
||||
ApplicationFormFieldResponseBean applicationFormFieldResponseBeans1=null;
|
||||
for (ApplicationFormEntity applicationFormEntity:applicationFormEntities){
|
||||
List<ApplicationFormFieldEntity> applicationFormFieldEntities = applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId());
|
||||
for(ApplicationFormFieldEntity applicationFormFieldEntity:applicationFormFieldEntities) {
|
||||
applicationFormFieldResponseBeans1 = convertApplicationFormFieldEntityToApplicationFormFieldResponseBean(applicationFormFieldEntity, applicationFormEntity.getId());
|
||||
applicationFormFieldResponseBeans.add(applicationFormFieldResponseBeans1);
|
||||
}
|
||||
}
|
||||
ApplicationResponseBean applicationResponseBean= convertApplicationEntityToApplicationResponseBean(applicationEntity);
|
||||
applicationResponseBean.setFormFields(applicationFormFieldResponseBeans);
|
||||
applicationResponseBean.setCurrentFormId(formId);
|
||||
return applicationResponseBean;
|
||||
}
|
||||
|
||||
public void deleteById(Long id) {
|
||||
log.info("Deleting application with ID: {}", id);
|
||||
|
||||
ApplicationEntity applicationEntity= validateApplication(id);
|
||||
applicationEntity.setIsDeleted(true);
|
||||
applicationEntity=saveApplicationEntity(applicationEntity);
|
||||
log.info("Application deleted with ID: {}", id);
|
||||
}
|
||||
|
||||
public List<ApplicationResponseBean> getAllApplications(Map<String, Object> userInfo) {
|
||||
log.info("Fetching all applications");
|
||||
String userIdStr = (String) userInfo.get("userId");
|
||||
Long userId = Long.parseLong(userIdStr);
|
||||
List<ApplicationEntity> applicationEntities = applicationRepository.findByUserIdAndIsDeletedFalse(userId);
|
||||
List<Long> applicationIds = applicationEntities.stream()
|
||||
.map(ApplicationEntity::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<ApplicationFormEntity> applicationFormEntities = applicationFormRepository.findByApplicationIdIn(applicationIds);
|
||||
|
||||
List<Long> applicationFormIds = applicationFormEntities.stream()
|
||||
.map(ApplicationFormEntity::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<ApplicationFormFieldEntity> applicationFormFieldEntities = applicationFormFieldRepository.findByApplicationFormIdIn(applicationFormIds);
|
||||
|
||||
|
||||
return applicationEntities.stream().map(applicationEntity -> {
|
||||
ApplicationResponseBean responseBean = new ApplicationResponseBean();
|
||||
|
||||
responseBean.setCallId(applicationEntity.getCall().getId());
|
||||
responseBean.setSubmissionDate(applicationEntity.getSubmissionDate());
|
||||
responseBean.setStatus(applicationEntity.getStatus());
|
||||
responseBean.setComments(applicationEntity.getComments());
|
||||
|
||||
List<ApplicationFormFieldResponseBean> formFieldResponseBeans = applicationFormFieldEntities.stream()
|
||||
.filter(field -> field.getApplicationForm().getApplication().getId().equals(applicationEntity.getId()))
|
||||
.map(field -> {
|
||||
ApplicationFormFieldResponseBean fieldResponseBean = new ApplicationFormFieldResponseBean();
|
||||
fieldResponseBean.setId(field.getId());
|
||||
fieldResponseBean.setFieldId(field.getFieldId());
|
||||
fieldResponseBean.setApplicationFormId(field.getApplicationForm().getId());
|
||||
fieldResponseBean.setFieldValue(field.getFieldValue());
|
||||
return fieldResponseBean;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
responseBean.setFormFields(formFieldResponseBeans);
|
||||
|
||||
return responseBean;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public ApplicationEntity validateApplication(Long id) {
|
||||
ApplicationEntity applicationEntity= applicationRepository.findById(id).orElseThrow(() ->new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_NOT_FOUND_MSG)));
|
||||
return applicationEntity;
|
||||
}
|
||||
|
||||
private ApplicationResponseBean convertApplicationEntityToApplicationResponseBean(ApplicationEntity entity) {
|
||||
ApplicationResponseBean response = new ApplicationResponseBean();
|
||||
response.setId(entity.getId());
|
||||
response.setSubmissionDate(entity.getSubmissionDate());
|
||||
response.setStatus(entity.getStatus());
|
||||
response.setComments(entity.getComments());
|
||||
response.setCallId(entity.getCall().getId());
|
||||
response.setCreatedDate(entity.getCreatedDate());
|
||||
response.setUpdatedDate(entity.getUpdatedDate());
|
||||
return response;
|
||||
}
|
||||
|
||||
public ApplicationEntity getApplicationOrCreate(UserEntity userEntity, CallEntity callEntity, FormEntity formEntity) {
|
||||
ApplicationEntity applicationEntity = applicationRepository.findByUserIdAndCallIdAndIsDeletedFalse(userEntity.getId(), callEntity.getId());
|
||||
if (applicationEntity == null) {
|
||||
validateFormId(formEntity, callEntity);
|
||||
applicationEntity = createApplicationEntity(userEntity, callEntity);
|
||||
applicationEntity=saveApplicationEntity(applicationEntity);
|
||||
}
|
||||
return applicationEntity;
|
||||
}
|
||||
private ApplicationFormEntity getApplicationFormOrCreate(FormEntity formEntity, ApplicationEntity applicationEntity) {
|
||||
ApplicationFormEntity applicationFormEntity = applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(), formEntity.getId());
|
||||
if(applicationFormEntity == null){
|
||||
applicationFormEntity = createApplicationFormEntity(applicationEntity, formEntity);
|
||||
}
|
||||
return applicationFormEntity;
|
||||
}
|
||||
|
||||
public List<ApplicationFormFieldEntity> createOrUpdateMultipleFormFields(List<ApplicationFormFieldRequestBean> formFieldResponseBeans, ApplicationFormEntity applicationFormEntity) {
|
||||
List<ApplicationFormFieldEntity> applicationFormFieldEntity = formFieldResponseBeans.stream()
|
||||
.map(requestBean -> createOrUpdateApplicationFormField(requestBean, applicationFormEntity))
|
||||
.collect(Collectors.toList());
|
||||
return applicationFormFieldEntity;
|
||||
}
|
||||
|
||||
public ApplicationFormFieldEntity createOrUpdateApplicationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, ApplicationFormEntity applicationFormEntity) {
|
||||
ApplicationFormFieldEntity applicationFormFieldEntity;
|
||||
if (applicationFormFieldRequestBean.getId() == null || applicationFormFieldRequestBean.getId() == 0) {
|
||||
applicationFormFieldEntity = new ApplicationFormFieldEntity();
|
||||
applicationFormFieldEntity.setApplicationForm(applicationFormEntity);
|
||||
} else {
|
||||
applicationFormFieldEntity = validateApplicationFormField(applicationFormFieldRequestBean.getId());
|
||||
}
|
||||
Utils.setIfUpdated(applicationFormFieldEntity::getFieldId, applicationFormFieldEntity::setFieldId, applicationFormFieldRequestBean.getFieldId());
|
||||
Utils.setIfUpdated(applicationFormFieldEntity::getFieldValue, applicationFormFieldEntity::setFieldValue, applicationFormFieldRequestBean.getFieldValue());
|
||||
return applicationFormFieldRepository.save(applicationFormFieldEntity);
|
||||
}
|
||||
|
||||
public ApplicationFormFieldEntity validateApplicationFormField(Long applicationFormFieldId) {
|
||||
Optional<ApplicationFormFieldEntity> applicationFormFieldEntity = applicationFormFieldRepository.findById(applicationFormFieldId);
|
||||
if (applicationFormFieldEntity.isEmpty()) {
|
||||
throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_FORM_FIELD_NOT_FOUND));
|
||||
}
|
||||
return applicationFormFieldEntity.get();
|
||||
}
|
||||
|
||||
public List<ApplicationFormFieldEntity> saveApplicationFormFieldEntities(List<ApplicationFormFieldEntity> applicationFormFieldEntities) {
|
||||
List<ApplicationFormFieldEntity> applicationFormFieldEntities1 = applicationFormFieldRepository.saveAll(applicationFormFieldEntities);
|
||||
return applicationFormFieldEntities1;
|
||||
}
|
||||
|
||||
public List<ApplicationFormFieldResponseBean> convertApplicationFormFieldEntitiesToApplicationFormFieldResponseBeans(List<ApplicationFormFieldEntity> applicationFormFieldEntities, Long applicationFormId) {
|
||||
return applicationFormFieldEntities.stream()
|
||||
.map(requestBean -> convertApplicationFormFieldEntityToApplicationFormFieldResponseBean(requestBean, applicationFormId))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public ApplicationFormFieldResponseBean convertApplicationFormFieldEntityToApplicationFormFieldResponseBean(ApplicationFormFieldEntity applicationFormFieldEntity, Long applicationFormId) {
|
||||
ApplicationFormFieldResponseBean applicationFormFieldResponseBean = new ApplicationFormFieldResponseBean();
|
||||
applicationFormFieldResponseBean.setApplicationFormId(applicationFormId);
|
||||
applicationFormFieldResponseBean.setFieldId(applicationFormFieldEntity.getFieldId());
|
||||
applicationFormFieldResponseBean.setFieldValue(applicationFormFieldEntity.getFieldValue());
|
||||
applicationFormFieldResponseBean.setId(applicationFormFieldEntity.getId());
|
||||
applicationFormFieldResponseBean.setCreatedDate(applicationFormFieldEntity.getCreatedDate());
|
||||
applicationFormFieldResponseBean.setUpdatedDate(applicationFormFieldEntity.getUpdatedDate());
|
||||
return applicationFormFieldResponseBean;
|
||||
}
|
||||
public ApplicationEntity saveApplicationEntity(ApplicationEntity application){
|
||||
ApplicationEntity applicationEntity=applicationRepository.save(application);
|
||||
return applicationEntity;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user