From 98fc120cffc955f7788ced1a51abda6a9f2ee32f Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 24 Sep 2024 13:09:29 +0530 Subject: [PATCH] Updated response of application form data --- .../tendermanagement/dao/ApplicationDao.java | 97 +++++++++++++++++-- .../ApplicationFormFieldResponseBean.java | 2 +- .../service/DocumentService.java | 5 +- .../service/impl/DocumentServiceImpl.java | 7 ++ 4 files changed, 99 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index f8e86e7e..d153ed5c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -4,6 +4,7 @@ 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.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.RoleStatusEnum; import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationRequest; @@ -13,6 +14,7 @@ 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.DocumentService; import net.gepafin.tendermanagement.service.FormService; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.Utils; @@ -48,6 +50,12 @@ public class ApplicationDao { @Autowired private FormService formService; + @Autowired + private DocumentService documentService; + + @Autowired + private CallDao callDao; + public ApplicationResponseBean createApplication(ApplicationRequestBean applicationRequestBean, UserEntity userEntity, Long formId,Long applicationId) { FormEntity formEntity = formService.validateForm(formId); CallEntity call = callService.validatePublishedCall(formEntity.getCall().getId()); @@ -57,7 +65,7 @@ public class ApplicationDao { } formService.validateFormField(applicationRequestBean.getFormFields(),applicationEntity,formEntity); ApplicationFormEntity applicationFormEntity = getApplicationFormOrCreate(formEntity, applicationEntity); - createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationFormEntity); + createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationFormEntity,formEntity); return getApplicationById(applicationEntity.getId(),formEntity.getId()); } @@ -97,15 +105,56 @@ public class ApplicationDao { List applicationFormFieldResponseBeans=new ArrayList<>(); ApplicationFormFieldResponseBean applicationFormFieldResponseBeans1=null; List applicationFormFieldEntities = applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()); - for(ApplicationFormFieldEntity applicationFormFieldEntity:applicationFormFieldEntities) { - applicationFormFieldResponseBeans1 = convertApplicationFormFieldEntityToApplicationFormFieldResponseBean(applicationFormFieldEntity, applicationFormEntity.getId()); - applicationFormFieldResponseBeans.add(applicationFormFieldResponseBeans1); - } + applicationFormFieldResponseBeans=createApplicationFormFieldResponse(applicationFormFieldEntities, applicationFormEntity, applicationFormFieldResponseBeans); ApplicationResponseBean applicationResponseBean= convertApplicationEntityToApplicationResponseBean(applicationEntity); applicationResponseBean.setFormFields(applicationFormFieldResponseBeans); return applicationResponseBean; } + private List createApplicationFormFieldResponse( + List applicationFormFieldEntities, + ApplicationFormEntity applicationFormEntity, + List applicationFormFieldResponseBeans) { + + List contentResponseBeans = Utils.convertJsonStringToList( + applicationFormEntity.getForm().getContent(), ContentResponseBean.class); + + for (ApplicationFormFieldEntity applicationFormFieldEntity : applicationFormFieldEntities) { + + Optional fileUploadContent = contentResponseBeans.stream() + .filter(contentResponseBean -> "fileupload".equals(contentResponseBean.getName()) && + contentResponseBean.getId().equals(applicationFormFieldEntity.getFieldId())) + .findFirst(); + + List documentResponseBeans = new ArrayList<>(); + if (fileUploadContent.isPresent()) { + String documentId = applicationFormFieldEntity.getFieldValue(); + if (documentId != null && !documentId.isEmpty()) { + documentResponseBeans = Arrays.stream(documentId.split(",")) + .map(String::trim) + .map(Long::parseLong) + .map(docId -> { + DocumentEntity documentEntity = documentService.validateDocument(docId); + if (Boolean.FALSE.equals(DocumentSourceTypeEnum.APPLICATION.getValue().equals(documentEntity.getSource()))) { + throw new CustomValidationException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); + } + return documentEntity; + }) + .map(callDao::convertToDocumentResponseBean) + .collect(Collectors.toList()); + } + } + ApplicationFormFieldResponseBean responseBean = convertApplicationFormFieldEntityToApplicationFormFieldResponseBean( + applicationFormFieldEntity, applicationFormEntity.getId()); + if (!documentResponseBeans.isEmpty()) { + responseBean.setFieldValue(documentResponseBeans); + } + applicationFormFieldResponseBeans.add(responseBean); + } + + return applicationFormFieldResponseBeans; + } + public void deleteById(Long id) { log.info("Deleting application with ID: {}", id); @@ -188,18 +237,21 @@ public class ApplicationDao { return applicationFormEntity; } - public List createOrUpdateMultipleFormFields(List formFieldResponseBeans, ApplicationFormEntity applicationFormEntity) { + public List createOrUpdateMultipleFormFields(List formFieldResponseBeans, ApplicationFormEntity applicationFormEntity,FormEntity formEntity) { List existingFields = applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()); List applicationFormFieldEntity = formFieldResponseBeans.stream() - .map(requestBean -> createOrUpdateApplicationFormField(requestBean, applicationFormEntity,existingFields)) + .map(requestBean -> createOrUpdateApplicationFormField(requestBean, applicationFormEntity,existingFields,formEntity)) .collect(Collectors.toList()); return applicationFormFieldEntity; } - public ApplicationFormFieldEntity createOrUpdateApplicationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, ApplicationFormEntity applicationFormEntity,List applicationFormFieldEntities ) { + public ApplicationFormFieldEntity createOrUpdateApplicationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, ApplicationFormEntity applicationFormEntity,List applicationFormFieldEntities ,FormEntity formEntity) { ApplicationFormFieldEntity applicationFormFieldEntity=null; + + validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); + if(applicationFormFieldEntities==null || applicationFormFieldEntities.isEmpty()){ applicationFormFieldEntity = new ApplicationFormFieldEntity(); applicationFormFieldEntity.setApplicationForm(applicationFormEntity); @@ -219,6 +271,31 @@ public class ApplicationDao { return applicationFormFieldRepository.save(applicationFormFieldEntity); } + private List validateFileUploadDocuments(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, FormEntity formEntity) { + List documentIds=null; + List contentResponseBeans=Utils.convertJsonStringToList(formEntity.getContent(),ContentResponseBean.class); + for (ContentResponseBean contentResponseBean:contentResponseBeans){ + if(Boolean.TRUE.equals(contentResponseBean.getName().equals("fileupload"))){ + if(contentResponseBean.getId().equals(applicationFormFieldRequestBean.getFieldId())) { + String documentId = applicationFormFieldRequestBean.getFieldValue(); + documentIds = validateDocumentIds(documentId); + } + } + } + return documentIds; + } + + private List validateDocumentIds(String documentId) { + if (documentId != null && !documentId.isEmpty()) { + return Arrays.stream(documentId.split(",")) + .map(Long::parseLong) + .peek(docId -> documentService.validateDocument(docId)) + .collect(Collectors.toList()); + } + return Collections.emptyList(); + } + + public ApplicationFormFieldEntity validateApplicationFormField(Long applicationFormFieldId) { Optional applicationFormFieldEntity = applicationFormFieldRepository.findById(applicationFormFieldId); if (applicationFormFieldEntity.isEmpty()) { @@ -290,12 +367,12 @@ public class ApplicationDao { public FormApplicationResponse processForm(FormEntity formEntity, ApplicationEntity applicationEntity) { FormApplicationResponse formApplicationResponse = createFormApplicationResponse(formEntity); + List applicationFormFieldResponseBeans =new ArrayList<>(); ApplicationFormEntity applicationFormEntity = applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(), formEntity.getId()); if(applicationFormEntity!=null) { List applicationFormFieldEntities = applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()); // formApplicationResponse = createFormApplicationResponse(formEntity); - List applicationFormFieldResponseBeans = convertApplicationFormFieldEntitiesToApplicationFormFieldResponseBeans(applicationFormFieldEntities, applicationFormEntity.getId()); - + applicationFormFieldResponseBeans = createApplicationFormFieldResponse(applicationFormFieldEntities, applicationFormEntity,applicationFormFieldResponseBeans); formApplicationResponse.setFormFields(applicationFormFieldResponseBeans); } return formApplicationResponse; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationFormFieldResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationFormFieldResponseBean.java index f625d991..2e207f21 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationFormFieldResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationFormFieldResponseBean.java @@ -12,5 +12,5 @@ public class ApplicationFormFieldResponseBean extends BaseBean { private String fieldId; - private String fieldValue; + private Object fieldValue; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java index 4c57d3ca..6012a273 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.service; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; @@ -17,4 +18,6 @@ public interface DocumentService { public DocumentResponseBean updateDocument(HttpServletRequest httpServletRequest, Long documentId, MultipartFile file, DocumentTypeEnum documentTypeEnum); public DocumentResponseBean getDocument(HttpServletRequest httpServletRequest,Long documentId); -} + + public DocumentEntity validateDocument(Long id); + } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java index 5cbc8634..3b3fa310 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java @@ -4,6 +4,7 @@ import java.util.List; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.DocumentDao; +import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; @@ -40,4 +41,10 @@ public class DocumentServiceImpl implements DocumentService { public DocumentResponseBean getDocument(HttpServletRequest httpServletRequest, Long documentId) { return documentDao.getDocument(documentId); } + + @Override + public DocumentEntity validateDocument(Long id){ + return documentDao.validateDocument(id); + } + }