Done ticket

This commit is contained in:
rajesh
2024-09-12 15:33:09 +05:30
parent 02bb5877b6
commit 492317be2e
26 changed files with 913 additions and 8 deletions

View File

@@ -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;
}
}