From 4929dc01ce2d2180ecebd13e2cdc51ee7d3eea0e Mon Sep 17 00:00:00 2001 From: harish Date: Tue, 10 Sep 2024 12:16:59 +0530 Subject: [PATCH 1/5] Updated Document entity to work with sourceId instead of callId --- .../gepafin/tendermanagement/dao/CallDao.java | 23 ++++++++------- .../tendermanagement/dao/DocumentDao.java | 22 +++++++++++++-- .../entities/DocumentEntity.java | 13 ++++----- .../enums/DocumentSourceTypeEnum.java | 17 +++++++++++ .../model/response/DocumentResponseBean.java | 9 +++++- .../repositories/DocumentRepository.java | 4 +-- .../service/DocumentService.java | 3 +- .../service/impl/DocumentServiceImpl.java | 5 ++-- .../web/rest/api/DocumentApi.java | 5 ++-- .../rest/api/impl/DocumentApiController.java | 5 ++-- .../db/changelog/db.changelog-1.0.0.xml | 28 ++++++++++++------- 11 files changed, 94 insertions(+), 40 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 905aa0dc..24b8d435 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.service.FaqService; import net.gepafin.tendermanagement.service.LookUpDataService; @@ -167,14 +168,14 @@ public class CallDao { } - public List convertToDocumentEntities(List documentReqList, CallEntity callEntity, + public List convertToDocumentEntities(List documentReqList, Long sourceId, DocumentTypeEnum documentType) { if (documentReqList == null) { return null; } List existingDocuments = documentRepository - .findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), documentType.getValue()); + .findBySourceIdAndTypeAndIsDeletedFalse(sourceId, documentType.getValue()); List incomingIds = documentReqList.stream().map(DocumentReq::getId).filter(id -> id != null && id > 0) .collect(Collectors.toList()); @@ -182,7 +183,7 @@ public class CallDao { existingDocuments.stream().filter(document -> !incomingIds.contains(document.getId())) .forEach(this::softDeleteDocument); List documentEntities = documentReqList.stream() - .map(req -> convertToDocumentEntity(req, callEntity)).collect(Collectors.toList()); + .map(req -> convertToDocumentEntity(req, sourceId)).collect(Collectors.toList()); documentRepository.saveAll(documentEntities); return documentEntities; } @@ -192,9 +193,9 @@ public class CallDao { documentRepository.save(documentEntity); } - private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) { + private DocumentEntity convertToDocumentEntity(DocumentReq documentReq,Long sourceId) { validateDocumentEntity(documentReq.getId()); - DocumentEntity documentEntity = documentRepository.findByIdAndCallIdAndIsDeletedFalse(documentReq.getId(), callEntity.getId()) + DocumentEntity documentEntity = documentRepository.findByIdAndSourceIdAndIsDeletedFalse(documentReq.getId(),sourceId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); return documentEntity; @@ -275,7 +276,9 @@ public class CallDao { DocumentResponseBean responseBean = new DocumentResponseBean(); responseBean.setId(entity.getId()); responseBean.setName(entity.getFileName()); - responseBean.setDescription(entity.getDescription()); + responseBean.setType(DocumentTypeEnum.valueOf(entity.getType())); + responseBean.setSource(DocumentSourceTypeEnum.valueOf(entity.getSource())); + responseBean.setSourceId(entity.getSourceId()); responseBean.setFilePath(entity.getFilePath()); responseBean.setCreatedDate(entity.getCreatedDate()); responseBean.setUpdatedDate(entity.getUpdatedDate()); @@ -362,9 +365,9 @@ public class CallDao { callRepository.save(callEntity); convertToEvaluationCriteriaEntities(createCallRequest.getCriteria(), callEntity, LookUpDataTypeEnum.EVALUATION_CRITERIA); - convertToDocumentEntities(createCallRequest.getDocs(), callEntity, DocumentTypeEnum.DOCUMENT); + convertToDocumentEntities(createCallRequest.getDocs(), callEntity.getId(), DocumentTypeEnum.DOCUMENT); - convertToDocumentEntities(createCallRequest.getImages(), callEntity, DocumentTypeEnum.IMAGES); + convertToDocumentEntities(createCallRequest.getImages(), callEntity.getId(), DocumentTypeEnum.IMAGES); updateLookUpData(callEntity, createCallRequest.getCheckList(), LookUpDataTypeEnum.CHECKLIST); @@ -523,9 +526,9 @@ public class CallDao { } private CallResponse getCallResponseBean(CallEntity callEntity) { - List documentEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), + List documentEntities = documentRepository.findBySourceIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.DOCUMENT.getValue()); - List imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), + List imageEntities = documentRepository.findBySourceIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.IMAGES.getValue()); List amiedTo = callTargetAudienceChecklistRepository .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream() diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java index c079a40f..374c741b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.dao; import java.io.IOException; import java.util.stream.Collectors; +import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -40,16 +41,17 @@ public class DocumentDao { @Autowired private CallService callService; - public List uploadFiles(List files, Long callId, DocumentTypeEnum fileType) { + public List uploadFiles(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { List documentEntities = new ArrayList<>(); - CallEntity callEntity = callService.validateCall(callId); + Long source = resolveSourceId(sourceId, sourceType); for (MultipartFile file : files) { try { uploadFileOnAmazonS3 result = uploadFileOnAmazonS3(file); if (result != null) { DocumentEntity documentEntity = new DocumentEntity(); documentEntity.setFileName(result.fileName()); - documentEntity.setCall(callEntity); + documentEntity.setSource(sourceType.getValue()); + documentEntity.setSourceId(source); documentEntity.setType(fileType.getValue()); documentEntity.setFilePath(result.filepath()); documentEntity.setIsDeleted(false); @@ -61,6 +63,18 @@ public class DocumentDao { documentRepository.saveAll(documentEntities); return documentEntities.stream().map(callDao::convertToDocumentResponseBean).collect(Collectors.toList()); } + private Long resolveSourceId(Long sourceId, DocumentSourceTypeEnum sourceType) { + if (sourceType == DocumentSourceTypeEnum.CALL) { + CallEntity callEntity = callService.validateCall(sourceId); + return callEntity.getId(); + } +// else if (sourceType == SourceTypeEnum.APPLICATION) { +// ApplicationEntity applicationEntity = applicationService.validateApplication(sourceId); +// return applicationEntity.getId(); // Assuming ApplicationEntity has getId() +// } +// + return sourceId; + } private uploadFileOnAmazonS3 uploadFileOnAmazonS3(MultipartFile file) throws IOException { String extension = FilenameUtils.getExtension(file.getOriginalFilename()); @@ -109,6 +123,8 @@ public class DocumentDao { documentEntity.setFilePath(result.filepath); documentEntity.setFileName(result.fileName); documentEntity.setType(documentTypeEnum.getValue()); + documentEntity.setSource(documentEntity.getSource()); + documentEntity.setSourceId(documentEntity.getSourceId()); documentRepository.save(documentEntity); } return callDao.convertToDocumentResponseBean(documentEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java index 057ca421..fc15a82d 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java @@ -20,14 +20,13 @@ public class DocumentEntity extends BaseEntity{ @Column(name="TYPE") private String type; - @ManyToOne - @JoinColumn(name = "CALL_ID") - private CallEntity call; + @Column(name="SOURCE") + private String source; + + @Column(name="SOURCE_ID") + private Long sourceId; - @Column(name = "DESCRIPTION", columnDefinition = "TEXT") - private String description; - @Column(name ="IS_DELETED", nullable = false) private Boolean isDeleted = false; - + } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java new file mode 100644 index 00000000..123c6f8c --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java @@ -0,0 +1,17 @@ +package net.gepafin.tendermanagement.enums; + +public enum DocumentSourceTypeEnum { + CALL("CALL"), + + APPLICATION("APPLICATION"); + + private String value; + + DocumentSourceTypeEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/DocumentResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/DocumentResponseBean.java index 82aa9b9a..f5706b10 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/DocumentResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/DocumentResponseBean.java @@ -1,6 +1,9 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; +import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; +import net.gepafin.tendermanagement.enums.DocumentTypeEnum; + import java.time.LocalDateTime; @@ -13,7 +16,11 @@ public class DocumentResponseBean { private String filePath; - private String description; + private DocumentTypeEnum type; + + private DocumentSourceTypeEnum source; + + private Long sourceId; private LocalDateTime createdDate; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java index d6d86138..40361cd9 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java @@ -15,9 +15,9 @@ public interface DocumentRepository extends JpaRepository @Query("SELECT d FROM DocumentEntity d WHERE d.id = :id AND d.isDeleted = false") Optional findById(@Param("id") Long id); - List findByCallIdAndTypeAndIsDeletedFalse(Long callId, String type); + List findBySourceIdAndTypeAndIsDeletedFalse(Long sourceId, String type); - Optional findByIdAndCallIdAndIsDeletedFalse(Long id, Long callId); + Optional findByIdAndSourceIdAndIsDeletedFalse(Long id, Long sourceId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java index f55636df..4c57d3ca 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.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import org.springframework.web.multipart.MultipartFile; @@ -9,7 +10,7 @@ import java.util.List; public interface DocumentService { - public List uploadFile(List files,Long callId, DocumentTypeEnum fileType); + public List uploadFile(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType); public void deleteFile(Long documentId); 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 15e278bf..5cbc8634 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.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.service.DocumentService; @@ -21,8 +22,8 @@ public class DocumentServiceImpl implements DocumentService { private DocumentDao documentDao; @Override - public List uploadFile(List files,Long callId,DocumentTypeEnum fileType) { - return documentDao.uploadFiles(files,callId,fileType); + public List uploadFile(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { + return documentDao.uploadFiles(files,sourceId,sourceType,fileType); } @Override public void deleteFile(Long documentId){ diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DocumentApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DocumentApi.java index 026fa690..9c2cedcc 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/DocumentApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/DocumentApi.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.model.util.Response; @@ -29,8 +30,8 @@ public interface DocumentApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) }))}) - @PostMapping(value = "/uploadFile/call/{callId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - default ResponseEntity>> uploadFile(HttpServletRequest httpServletRequest, @Parameter(description = "call id", required = true) @PathVariable("callId") Long callId, @RequestParam("file") List files, @RequestParam("documentType") DocumentTypeEnum documentTypeEnum) { + @PostMapping(value = "/uploadFile/source/{sourceId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + default ResponseEntity>> uploadFile(HttpServletRequest httpServletRequest, @Parameter(description = "Source Id", required = true) @PathVariable("sourceId") Long sourceId, @RequestParam DocumentSourceTypeEnum sourceType, @RequestParam("file") List files, @RequestParam("documentType") DocumentTypeEnum documentTypeEnum) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java index 5f986716..7141a256 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java @@ -3,6 +3,7 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.model.util.Response; @@ -27,10 +28,10 @@ DocumentApiController implements DocumentApi { private DocumentService documentService; @Override - public ResponseEntity>> uploadFile(HttpServletRequest httpServletRequest, Long callId, + public ResponseEntity>> uploadFile(HttpServletRequest httpServletRequest, Long sourceId, DocumentSourceTypeEnum sourceType, List files, DocumentTypeEnum fileType) { try { - List responseBeans = documentService.uploadFile(files, callId, fileType); + List responseBeans = documentService.uploadFile(files, sourceId,sourceType, fileType); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response>(responseBeans, Status.SUCCESS, Translator.toLocale(GepafinConstant.FILES_UPLOADED_MSG))); } catch (CustomValidationException ex) { diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index c70e4ab9..2234c515 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -540,15 +540,15 @@ columnName="order_no" /> - - - TRUNCATE TABLE FORM_FIELD RESTART IDENTITY; - - + + TRUNCATE TABLE FORM_FIELD RESTART IDENTITY; + + - - - + + + @@ -563,6 +563,14 @@ - - + + + + + + + + + + From 2afb092070a66920e79ac9d3560a210da268b6bb Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 12 Sep 2024 15:49:32 +0530 Subject: [PATCH 2/5] updated code --- .../gepafin/tendermanagement/dao/FaqDao.java | 5 ++++- .../enums/RoleStatusEnum.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java index 482191e3..b8ebd278 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java @@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.RoleStatusEnum; import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum; import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.response.FaqResponseBean; @@ -81,7 +82,9 @@ public class FaqDao { .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); } else { - lookUpDataService.getOrCreateLookUpDataEntity(faqReq, type); + if (Boolean.FALSE.equals(userEntity.getRoleEntity().getRoleType().equals(RoleStatusEnum.ROLE_BENEFICIARY.getValue()))) { + lookUpDataService.getOrCreateLookUpDataEntity(faqReq, type); + } faqEntity = new FaqEntity(); faqEntity.setCall(callEntity); faqEntity.setUser(userEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java new file mode 100644 index 00000000..3659856d --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/RoleStatusEnum.java @@ -0,0 +1,22 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum RoleStatusEnum { + + ROLE_BENEFICIARY("ROLE_BENEFICIARY"), + ROLE_SUPER_ADMIN("ROLE_SUPER_ADMIN"), + ROLE_PRE_INSTRUCTOR("ROLE_PRE_INSTRUCTOR"), + ROLE_GEPAFIN_OPERATOR("ROLE_GEPAFIN_OPERATOR"); + + private String value; + + RoleStatusEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} From 9938b95c8571f629836261dd20654ccbc6d8ed24 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 12 Sep 2024 19:29:04 +0530 Subject: [PATCH 3/5] Updated endpoint to create flow --- .../gepafin/tendermanagement/dao/FlowDao.java | 51 ++++++++++++------- .../entities/FlowEdgesEntity.java | 3 ++ .../model/request/FlowEdgesRequestBean.java | 2 + .../model/response/FlowEdgesResponseBean.java | 2 +- .../tendermanagement/service/FlowService.java | 2 +- .../service/impl/FlowServiceImpl.java | 7 ++- .../web/rest/api/FlowApi.java | 11 ++-- .../web/rest/api/impl/FlowApiController.java | 6 +-- .../db/changelog/db.changelog-1.0.0.xml | 6 +++ 9 files changed, 56 insertions(+), 34 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java index 985560f3..8b6931bc 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java @@ -20,11 +20,13 @@ import net.gepafin.tendermanagement.repositories.FlowEdgesRepository; import net.gepafin.tendermanagement.repositories.FlowEdgesRepository; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.FormService; +import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; 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.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -47,10 +49,11 @@ public class FlowDao { @Autowired private FormService formService; - public FlowResponseBean createFlow(FlowRequestBean flowRequestBean, Long callId) { + public FlowResponseBean createOrUpdateFlow(FlowRequestBean flowRequestBean, Long callId) { validateFlowRequestBean(flowRequestBean); - CallEntity call = setInitialAndFinalFormInCall(flowRequestBean, callId); - checkIfFlowExits(callId); + CallEntity call = callService.validateCall(callId); + checkIfFlowExits(call); + call= setInitialAndFinalFormInCall(flowRequestBean, call); validateFlowRequest(flowRequestBean); List flowDataEntities = createFlowData(flowRequestBean,call); List flowEdgesEntities = createFlowEdges(flowRequestBean,call); @@ -59,23 +62,29 @@ public class FlowDao { } public void validateFlowRequestBean(FlowRequestBean flowRequestBean){ - if(flowRequestBean.getFlowData()==null || flowRequestBean.getFlowEdges()==null){ - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.FLOW_REQUEST_NOT_PROPER)); + if (flowRequestBean.getFlowEdges() == null || flowRequestBean.getFlowEdges().isEmpty()) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.FLOW_REQUEST_NOT_PROPER)); } } - public void checkIfFlowExits(Long callId) { - List flowDataEntities = flowDataRepository.findByCallId(callId); - List flowEdgesEntities = flowEdgesRepository.findByCallId(callId); - if (!flowDataEntities.isEmpty() || !flowEdgesEntities.isEmpty()) { - throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.FLOW_ALREADY_EXISTS)); + public void checkIfFlowExits(CallEntity call) { + List flowDataEntities = flowDataRepository.findByCallId(call.getId()); + List flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId()); + if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) { + call.setInitialForm(null); + call.setFinalForm(null); + call=callRepository.save(call); + flowDataRepository.deleteAll(flowDataEntities); + flowEdgesRepository.deleteAll(flowEdgesEntities); } } public void validateFlowRequest(FlowRequestBean flowRequestBean) { formService.validateForm(flowRequestBean.getInitialForm()); formService.validateForm(flowRequestBean.getFinalForm()); - flowRequestBean.getFlowData().forEach(flowData -> formService.validateForm(flowData.getFormId())); + if(flowRequestBean.getFlowData()!=null && !flowRequestBean.getFlowData().isEmpty()) { + flowRequestBean.getFlowData().forEach(flowData -> formService.validateForm(flowData.getFormId())); + } } private List createFlowEdgesResponseBean(List flowEdgesEntities) { @@ -96,19 +105,22 @@ public class FlowDao { return flowResponseBean; } - private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, Long callId) { - CallEntity call = callService.validateCall(callId); + private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, CallEntity call) { call.setInitialForm(flowRequestBean.getInitialForm()); call.setFinalForm(flowRequestBean.getFinalForm()); + call.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); call = callRepository.save(call); return call; } public List createFlowData(FlowRequestBean flowRequestBean, CallEntity call) { - List flowDataEntities = flowRequestBean.getFlowData().stream() - .map(flowDataRequestBean -> createFlowDataEntity(flowDataRequestBean, call)) - .collect(Collectors.toList()); - return flowDataRepository.saveAll(flowDataEntities); + if (flowRequestBean.getFlowData() != null || !flowRequestBean.getFlowEdges().isEmpty()) { + List flowDataEntities = flowRequestBean.getFlowData().stream() + .map(flowDataRequestBean -> createFlowDataEntity(flowDataRequestBean, call)) + .collect(Collectors.toList()); + return flowDataRepository.saveAll(flowDataEntities); + } + return null; } public FlowDataEntity createFlowDataEntity(FlowDataRequestBean flowDataRequestBean,CallEntity call) { @@ -129,6 +141,7 @@ public class FlowDao { public FlowEdgesEntity createFlowEdgesEntity(FlowEdgesRequestBean flowEdgesRequestBean,CallEntity call) { FlowEdgesEntity flowEdgesEntity = new FlowEdgesEntity(); + flowEdgesEntity.setTrackingId(flowEdgesRequestBean.getId()); flowEdgesEntity.setSourceId(Long.valueOf(flowEdgesRequestBean.getSource())); flowEdgesEntity.setTargetId(Long.valueOf(flowEdgesRequestBean.getTarget())); flowEdgesEntity.setType(flowEdgesRequestBean.getType()); @@ -147,7 +160,7 @@ public class FlowDao { public FlowEdgesResponseBean convertFlowEdgesEntityToFlowEdgesResponseBean(FlowEdgesEntity flowEdgesEntity) { FlowEdgesResponseBean flowEdgesResponseBean = new FlowEdgesResponseBean(); - flowEdgesResponseBean.setId(flowEdgesEntity.getId()); + flowEdgesResponseBean.setId(flowEdgesEntity.getTrackingId()); flowEdgesResponseBean.setType(flowEdgesEntity.getType()); flowEdgesResponseBean.setSource(String.valueOf(flowEdgesEntity.getSourceId())); flowEdgesResponseBean.setTarget(String.valueOf(flowEdgesEntity.getTargetId())); @@ -163,7 +176,7 @@ public class FlowDao { List flowEdgesResponseBeans=createFlowEdgesResponseBean(flowEdgesEntities); flowResponseBean.setFlowData(flowDataResponseBeans); flowResponseBean.setFlowEdges(flowEdgesResponseBeans); - if(flowResponseBean.getFlowData().isEmpty() || flowResponseBean.getFlowEdges().isEmpty()){ + if( flowResponseBean.getFlowEdges().isEmpty()){ return null; } flowResponseBean.setCallId(call.getId()); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java index 685c484c..119af700 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FlowEdgesEntity.java @@ -25,4 +25,7 @@ public class FlowEdgesEntity extends BaseEntity { @Column(name="CALL_ID") private Long callId; + @Column(name="TRACKING_ID") + private String trackingId; + } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java index 45d4195f..57a0e7a7 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FlowEdgesRequestBean.java @@ -5,6 +5,8 @@ import lombok.Data; @Data public class FlowEdgesRequestBean { + private String id; + private String source; private String target; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java index 0ffa3c62..9424a79a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FlowEdgesResponseBean.java @@ -6,7 +6,7 @@ import org.springframework.security.core.parameters.P; @Data public class FlowEdgesResponseBean { - private Long id; + private String id; private String source; diff --git a/src/main/java/net/gepafin/tendermanagement/service/FlowService.java b/src/main/java/net/gepafin/tendermanagement/service/FlowService.java index 16d76f8d..7c38a01f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/FlowService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/FlowService.java @@ -6,7 +6,7 @@ import net.gepafin.tendermanagement.model.response.FlowResponseBean; public interface FlowService { - public FlowResponseBean createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId); + public FlowResponseBean createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId); public FlowResponseBean getFlowByCallId(HttpServletRequest request, Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java index 7f173472..2ae5546f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/FlowServiceImpl.java @@ -7,6 +7,7 @@ import net.gepafin.tendermanagement.model.response.FlowResponseBean; import net.gepafin.tendermanagement.service.FlowService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class FlowServiceImpl implements FlowService { @@ -15,11 +16,13 @@ public class FlowServiceImpl implements FlowService { private FlowDao flowDao; @Override - public FlowResponseBean createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { - return flowDao.createFlow(flowRequestBean,callId); + @Transactional(rollbackFor = Exception.class) + public FlowResponseBean createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { + return flowDao.createOrUpdateFlow(flowRequestBean,callId); } @Override + @org.springframework.transaction.annotation.Transactional(readOnly = true) public FlowResponseBean getFlowByCallId(HttpServletRequest request, Long callId) { return flowDao.getFlowByCallId(callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java index 126dedd6..63d813e6 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/FlowApi.java @@ -15,17 +15,14 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; import java.util.List; @Validated public interface FlowApi { - @Operation(summary = "Api to create flow", + @Operation(summary = "Api to create or update flow", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -34,9 +31,9 @@ public interface FlowApi { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PostMapping(value = "/call/{callId}", + @PutMapping(value = "/call/{callId}", produces = { "application/json" }) - ResponseEntity> createFlow(HttpServletRequest request, + ResponseEntity> createOrUpdateFlow(HttpServletRequest request, @Parameter(description = " Flow request object", required = true) @Valid @RequestBody FlowRequestBean flowRequestBean, @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java index e2e41cb3..6245a420 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java @@ -26,15 +26,13 @@ public class FlowApiController implements FlowApi { private FlowService flowService; @Override - @Transactional(rollbackFor=Exception.class) - public ResponseEntity> createFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { - FlowResponseBean flowResponseBean=flowService.createFlow(httpServletRequest,flowRequestBean,callId); + public ResponseEntity> createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { + FlowResponseBean flowResponseBean=flowService.createOrUpdateFlow(httpServletRequest,flowRequestBean,callId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(flowResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FLOW_CREATED_SUCCESSFULLY))); } @Override - @Transactional(rollbackFor=Exception.class) public ResponseEntity> getFlowByCallId(HttpServletRequest request, Long callId) { FlowResponseBean flowResponseBean=flowService.getFlowByCallId(request,callId); return ResponseEntity.status(HttpStatus.OK) diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index a18178e7..4f664bd0 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -633,4 +633,10 @@ + + + + + + From 7e2a22c81763f091093cbcc414c4a5698957615d Mon Sep 17 00:00:00 2001 From: harish Date: Fri, 13 Sep 2024 15:22:43 +0530 Subject: [PATCH 4/5] Added few validation in call api --- .../constants/GepafinConstant.java | 1 + .../gepafin/tendermanagement/dao/CallDao.java | 53 +++++++++----- .../enums/CallStatusEnum.java | 20 ++++++ .../repositories/CallRepository.java | 3 +- .../tendermanagement/service/CallService.java | 2 +- .../service/impl/CallServiceImpl.java | 7 +- .../impl/CallValidatorServiceImpl.java | 71 +++++++++++-------- .../tendermanagement/util/FieldValidator.java | 5 ++ .../web/rest/api/CallApi.java | 2 +- .../web/rest/api/impl/CallApiController.java | 4 +- src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 9 +-- 12 files changed, 120 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 5c77aa3b..ce0f53b5 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -108,4 +108,5 @@ public class GepafinConstant { public static final String FLOW_FETCHED_SUCCESSFULLY="flow.fetched.successfully"; public static final String FLOW_ALREADY_EXISTS="flow.already.exists"; public static final String FLOW_REQUEST_NOT_PROPER="flow.request.not.complete"; + public static final String FLOW_NOT_FOUND = "flow.not.found"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 905aa0dc..1fb5ca68 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -3,13 +3,20 @@ package net.gepafin.tendermanagement.dao; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import net.gepafin.tendermanagement.enums.RoleStatusEnum; +import net.gepafin.tendermanagement.enums.RoleStatusEnum; import net.gepafin.tendermanagement.model.response.*; -import net.gepafin.tendermanagement.service.FaqService; -import net.gepafin.tendermanagement.service.LookUpDataService; +import net.gepafin.tendermanagement.service.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -39,13 +46,14 @@ import net.gepafin.tendermanagement.repositories.DocumentRepository; import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository; import net.gepafin.tendermanagement.repositories.FaqRepository; import net.gepafin.tendermanagement.repositories.RegionRepository; -import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; 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 static net.gepafin.tendermanagement.enums.RoleStatusEnum.ROLE_SUPER_ADMIN; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; +import static org.springframework.security.authorization.AuthorityReactiveAuthorizationManager.hasRole; @Component public class CallDao { @@ -64,7 +72,7 @@ public class CallDao { @Autowired private RegionRepository regionRepository; - + @Autowired private LookUpDataService lookUpDataService; @@ -73,20 +81,24 @@ public class CallDao { @Autowired private UserService userService; - + @Autowired private FaqService faqService; + @Autowired + private FlowDao flowDao; + @Autowired + private FormDao formDao; public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { UserEntity userEntity = userService.validateUser(userId); createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); CallEntity callEntity = convertToCallEntity(createCallRequest); - + updateFaq(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ); - + convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, LookUpDataTypeEnum.AIMED_TO); - + CallResponse createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; @@ -391,12 +403,12 @@ public class CallDao { public void isValidDateRange(UpdateCallRequestStep1 updateCallRequest, CallEntity callEntity) { List dates = updateCallRequest.getDates(); - LocalDate startDate = (dates != null && dates.size() > 0 && dates.get(0) != null) - ? dates.get(0).toLocalDate() + LocalDate startDate = (dates != null && dates.size() > 0 && dates.get(0) != null) + ? dates.get(0).toLocalDate() : null; - LocalDate endDate = (dates != null && dates.size() > 1 && dates.get(1) != null) - ? dates.get(1).toLocalDate() + LocalDate endDate = (dates != null && dates.size() > 1 && dates.get(1) != null) + ? dates.get(1).toLocalDate() : null; Boolean isValid = true; @@ -427,7 +439,7 @@ public class CallDao { setIfUpdated(callEntity::getDescriptionLong, callEntity::setDescriptionLong, updateCallRequest.getDescriptionLong()); List dates=updateCallRequest.getDates(); - + if (dates != null && dates.size()>1) { if (dates.size() > 0) { setIfUpdated(callEntity::getStartDate, callEntity::setStartDate, dates.get(0)); @@ -545,9 +557,14 @@ public class CallDao { return createCallResponseBean; } - public List getAllCalls() { - return callRepository.findAll() - .stream() + public List getAllCalls(UserEntity user) { + String type=user.getRoleEntity().getRoleType(); + List callStatusList =CallStatusEnum.getStatusValues(); + if (Boolean.FALSE.equals(ROLE_SUPER_ADMIN.getValue().equals(type))) { + callStatusList = List.of(CallStatusEnum.PUBLISH.getValue()); + } + List calls = callRepository.findByStatusIn(callStatusList); + return calls.stream() .map(this::convertToCallDetailsResponseBean) .collect(Collectors.toList()); } @@ -555,7 +572,9 @@ public class CallDao { public CallResponse validateCallData(CallEntity callEntity) { validateUpdate(callEntity); CallResponse callResponseBean = getCallResponseBean(callEntity); - CallValidatorServiceImpl.validateResponse(callResponseBean); + FlowResponseBean flowResponseBean = flowDao.getFlowByCallId(callEntity.getId()); + List formResponseBean = formDao.getFormsByCallId(callEntity.getId()); + CallValidatorServiceImpl.validateResponse(callResponseBean,flowResponseBean,formResponseBean); callEntity.setStatus(CallStatusEnum.READY_TO_PUBLISH.getValue()); callRepository.save(callEntity); callResponseBean.setCurrentStep(GepafinConstant.VALIDATE_REQUEST); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java index cf5f49c3..2ae07e15 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java @@ -1,7 +1,12 @@ package net.gepafin.tendermanagement.enums; +import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public enum CallStatusEnum { DRAFT("DRAFT"), @@ -19,4 +24,19 @@ public enum CallStatusEnum { public String getValue() { return value; } + + @JsonCreator + public static CallStatusEnum fromValue(String value) { + for (CallStatusEnum b : CallStatusEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + public static List getStatusValues() { + return Arrays.stream(CallStatusEnum.values()) + .map(CallStatusEnum::getValue) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java index dd2c8b40..23f83f04 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.CallEntity; +import net.gepafin.tendermanagement.enums.CallStatusEnum; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -9,5 +10,5 @@ import java.util.List; public interface CallRepository extends JpaRepository { public CallEntity findByIdAndStatusNotIn(Long id, List status); - + List findByStatusIn(List callStatus); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index cc961ba5..500eb854 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -21,7 +21,7 @@ public interface CallService { CallResponse getCallById (Long callId); - List getAllCalls(); + List getAllCalls(HttpServletRequest request); CallResponse validateCallData(Long callId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java index 85b3086d..5ba8952d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -4,6 +4,7 @@ import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.jwt.TokenProvider; import net.gepafin.tendermanagement.dao.CallDao; import net.gepafin.tendermanagement.entities.CallEntity; +import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; @@ -57,8 +58,10 @@ public class CallServiceImpl implements CallService { @Override @Transactional(readOnly = true) - public List getAllCalls() { - return callDao.getAllCalls(); + public List getAllCalls(HttpServletRequest request) { + Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); + UserEntity user=tokenProvider.validateUser(userInfo); + return callDao.getAllCalls(user); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java index 0d2f651d..402727b2 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java @@ -1,44 +1,55 @@ package net.gepafin.tendermanagement.service.impl; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.model.response.CallResponse; +import net.gepafin.tendermanagement.model.response.FlowResponseBean; +import net.gepafin.tendermanagement.model.response.FormResponseBean; import net.gepafin.tendermanagement.util.FieldValidator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; public class CallValidatorServiceImpl { - - public static void validateResponse(CallResponse response) { - FieldValidator.create() - .notNull(response.getId(), "id") - .notNull(response.getName(), "name") - .notNull(response.getDescriptionShort(), "descriptionShort") - .notNull(response.getDescriptionLong(), "descriptionLong") - .notNull(response.getDates().get(0), "startDate") - .notNull(response.getDates().get(1), "endDate") - .notNull(response.getStatus(), "status") - .notNull(response.getRegionId(), "regionId") - .notNull(response.getAmount(), "amount") - .notNull(response.getAmountMax(), "amountMax") - .notNull(response.getThreshold(), "threshold") - .notNull(response.getDocumentationRequested(), "documentationRequested") - .notEmpty(response.getAimedTo(), "aimedTo") - .notEmpty(response.getCriteria(), "criteria") - .notEmpty(response.getDocs(), "docs") - .notEmpty(response.getFaq(), "faq") - .notEmpty(response.getImages(), "images") - .notEmpty(response.getCheckList(), "checkList") - .validate(); - - if (response.getDates().get(0).toLocalDate().isBefore(LocalDate.now()) - || response.getDates().get(1).toLocalDate().isBefore(LocalDate.now()) || - response.getDates().get(0).toLocalDate().isAfter(response.getDates().get(1).toLocalDate())) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.INVALID_DATE_MSG)); - } - } + public static void validateResponse(CallResponse response, FlowResponseBean flowResponse, List formResponses) { + // Validate CallResponse (existing logic) + FieldValidator data = FieldValidator.create() + .notNull(response.getId(), "id") + .notNull(response.getName(), "name") + .notNull(response.getDescriptionShort(), "descriptionShort") + .notNull(response.getDescriptionLong(), "descriptionLong") + .notNull(response.getDates().get(0), "startDate") + .notNull(response.getDates().get(1), "endDate") + .notNull(response.getStatus(), "status") + .notNull(response.getRegionId(), "regionId") + .notNull(response.getAmount(), "amount") + .notNull(response.getAmountMax(), "amountMax") + .notNull(response.getThreshold(), "threshold") + .notNull(response.getDocumentationRequested(), "documentationRequested") + .notEmpty(response.getAimedTo(), "aimedTo") + .notEmpty(response.getCriteria(), "criteria") + .notEmpty(response.getDocs(), "docs") + .notEmpty(response.getFaq(), "faq") + .notEmpty(response.getImages(), "images") + .notEmpty(response.getCheckList(), "checkList"); + + if (response.getDates().get(0) == null || response.getDates().get(1) == null + || response.getDates().get(0).toLocalDate().isBefore(LocalDate.now()) + || response.getDates().get(1).toLocalDate().isBefore(LocalDate.now()) + || response.getDates().get(0).toLocalDate().isAfter(response.getDates().get(1).toLocalDate())) { + data = data.addError(Translator.toLocale(GepafinConstant.INVALID_DATE_MSG)); + } + if (flowResponse == null || ((flowResponse.getFlowData() == null || flowResponse.getFlowData().isEmpty()) + && (flowResponse.getFlowEdges() == null || flowResponse.getFlowEdges().isEmpty()))) { + data.addError(Translator.toLocale(GepafinConstant.FLOW_NOT_FOUND)); + } + if (formResponses == null || formResponses.isEmpty()) { + data.addError(Translator.toLocale(GepafinConstant.FORM_NOT_FOUND)); + } + data.validate(); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java index e57909d2..7309dbd2 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -37,4 +37,9 @@ public class FieldValidator { throw new ValidationException(Status.VALIDATION_ERROR, errors); } } + + public FieldValidator addError( String errorMessage) { + errors.add(errorMessage); + return this; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java index 357176db..cc7f985a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CallApi.java @@ -100,7 +100,7 @@ public interface CallApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "", produces = { "application/json" }) - ResponseEntity>> getAllCalls(); + ResponseEntity>> getAllCalls(HttpServletRequest request); @Operation(summary = "Api to validate call", diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java index 34ea5fd6..e4680428 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CallApiController.java @@ -65,8 +65,8 @@ public class CallApiController implements CallApi { @Override @Transactional(readOnly = true) - public ResponseEntity>> getAllCalls() { - List calls = callService.getAllCalls(); + public ResponseEntity>> getAllCalls(HttpServletRequest request) { + List calls = callService.getAllCalls(request); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(calls, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index ccbdb47d..091922ff 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -139,3 +139,4 @@ flow.created.successfully=Flow created successfully. flow.fetched.successfully=Flow fetched successfully. flow.already.exists= Flow already exist for this call. flow.request.not.complete=Flow request is not complete. +flow.not.found=Flow not found. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 52234e76..fda677e8 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -56,7 +56,7 @@ status.same.error=Lo stato � gi� impostato. invalid.status.change.from.draft=Lo stato non pu� essere cambiato in READY_TO_PUBLISH o PUBLISH da DRAFT. status.cannot.be.changed=Lo stato non pu� essere cambiato. published.call.not.update=Il bando pubblicato non pu� essere aggiornato. -invalid.status.change.from.publish=Lo stato non può essere modificato in READY_TO_PUBLISH o DRAFT da PUBLISH. +invalid.status.change.from.publish=Lo stato non pu� essere modificato in READY_TO_PUBLISH o DRAFT da PUBLISH. # Login-related messages @@ -115,7 +115,7 @@ lookupdata.created.successfully=LookUpData creato correttamente. lookupdata.fetched.successfully=LookUpData recuperato correttamente. lookupdata.updated.successfully=LookUpData aggiornato correttamente. lookupdata.deleted.successfully=LookUpData eliminato correttamente. -lookupdata.value.cannot.be.empty=Il campo valore non può essere vuoto +lookupdata.value.cannot.be.empty=Il campo valore non pu� essere vuoto #Document-related message document.updated.successfully=Documento aggiornato con successo. @@ -133,5 +133,6 @@ update.user.status.success=Lo stato dell'utente � stato aggiornato con success #Flow-related message flow.created.successfully=Flusso creato con successo. flow.fetched.successfully=Flusso recuperato con successo. -flow.already.exists= Il flusso esiste già per questa chiamata. -flow.request.not.complete=La richiesta di flusso non è completa. \ No newline at end of file +flow.already.exists= Il flusso esiste gi� per questa chiamata. +flow.request.not.complete=La richiesta di flusso non � completa. +flow.not.found=Flow not found. \ No newline at end of file From 2be419e5d06ead5179aaff96d3c17459e5e4fd5f Mon Sep 17 00:00:00 2001 From: harish Date: Fri, 13 Sep 2024 18:39:46 +0530 Subject: [PATCH 5/5] Updated data in form field --- .../tendermanagement/dao/FormFieldDao.java | 6 +++ .../entities/FormFieldEntity.java | 6 +++ .../model/request/FormFieldRequest.java | 4 ++ .../model/response/FormFieldResponseBean.java | 5 ++ .../db/changelog/db.changelog-1.0.0.xml | 18 +++++++ .../inserted_form_field_data_13_09_2024.sql | 51 +++++++++++++++++++ 6 files changed, 90 insertions(+) create mode 100644 src/main/resources/db/dump/inserted_form_field_data_13_09_2024.sql diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java index beda3eaa..57f67694 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java @@ -30,6 +30,8 @@ public class FormFieldDao { 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); @@ -40,6 +42,8 @@ public class FormFieldDao { 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()); @@ -69,6 +73,8 @@ public class FormFieldDao { 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, diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FormFieldEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FormFieldEntity.java index bffa49be..b75b0c57 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FormFieldEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FormFieldEntity.java @@ -25,4 +25,10 @@ public class FormFieldEntity extends BaseEntity{ @Column(name = "VALIDATORS") private String validators; + + @Column(name = "DESCRIPTION") + private String description; + + @Column(name = "SORT_ORDER") + private Integer sortOrder; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FormFieldRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/FormFieldRequest.java index 30ddd40b..9cc1b19f 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FormFieldRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FormFieldRequest.java @@ -10,6 +10,10 @@ public class FormFieldRequest { private String name; + private String description; + + private Integer sortOrder; + private String label; private List settings; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/FormFieldResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/FormFieldResponseBean.java index b779b353..1650241d 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FormFieldResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FormFieldResponseBean.java @@ -14,6 +14,11 @@ public class FormFieldResponseBean { private String label; + private String description; + + private Integer sortOrder; + + private List settings; private Map validators; diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index a18178e7..c8363a66 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -633,4 +633,22 @@ + + + + + + + + + + + + + TRUNCATE TABLE FORM_FIELD RESTART IDENTITY; + + + + diff --git a/src/main/resources/db/dump/inserted_form_field_data_13_09_2024.sql b/src/main/resources/db/dump/inserted_form_field_data_13_09_2024.sql new file mode 100644 index 00000000..510b4e19 --- /dev/null +++ b/src/main/resources/db/dump/inserted_form_field_data_13_09_2024.sql @@ -0,0 +1,51 @@ +INSERT INTO FORM_FIELD ( SORT_ORDER, NAME, LABEL, DESCRIPTION, SETTINGS, VALIDATORS, CREATED_DATE, UPDATED_DATE) +VALUES +( 1, 'textinput', 'Testo Breve', 'Per risposte concise (nomi, titoli, brevi descrizioni)', + '{"label": "Testo Breve", "placeholder": ""}', + '{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 2, 'textarea', 'Testo Lungo', 'Campo di testo esteso per paragrafi, descrizioni, proposte', + '{"label": "Testo Lungo", "placeholder": ""}', + '{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 3, 'wysiwyg', 'Campo di Testo Formattato', 'Editor avanzato per testo con formattazione', + '{"label": "Testo Formattato", "placeholder": ""}', + '{"isRequired": false, "minLength": null, "maxLength": null, "pattern": null, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 4, 'numberinput', 'Campo Numerico', 'Per l''inserimento di valori numerici (quantità, importi, percentuali)', + '{"label": "Numero", "placeholder": "0", "step": "0"}', + '{"isRequired": false, "min": null, "max": null, "pattern": null, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +(5, 'radio', 'Scelta Singola', 'Gruppo di opzioni per selezione singola', + '{"label": "Scelta Singola", "options": []}', + '{"isRequired": false, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 6, 'select', 'Menu a Tendina', 'Selezione da opzioni predefinite', + '{"label": "Menu a Tendina", "options": []}', + '{"isRequired": false, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 7, 'checkboxes', 'Scelta Multipla', 'Gruppo di opzioni per selezione singola o multipla', + '{"label": "Scelta Multipla", "options": []}', + '{"isRequired": false, "min": null, "max": null, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 8, 'switch', 'Casella di Spunta', 'Per selezioni binarie, accettazioni, conferme', + '{"label": "Casella di Spunta"}', + '{"isRequired": false}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 9, 'datepicker', 'Data', 'Selezione di data', + '{"label": "Data"}', + '{"isRequired": false, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), + +( 10, 'fileupload', 'Caricamento File', 'Per l''upload di documenti o immagini', + '{"label": "Caricamento File", "mime": []}', + '{"isRequired": false, "maxSize": 100000, "custom": null}', + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);