Merge pull request #7 from Kitzanos/update-feature/GEPAFINBE-6

Created call api in 2 steps
This commit is contained in:
rajeshkhore
2024-08-25 23:51:45 -07:00
committed by GitHub
23 changed files with 254 additions and 126 deletions

View File

@@ -42,6 +42,7 @@ public class GepafinConstant {
public static final String PASSWORD_MIN_LEN ="pass.min.len.msg"; public static final String PASSWORD_MIN_LEN ="pass.min.len.msg";
public static final String EMAIL_ALREADY_EXISTS = "email.already.exists"; public static final String EMAIL_ALREADY_EXISTS = "email.already.exists";
public static final String DOCUMENT_ID_NOT_FOUND="document.id.not.found"; public static final String DOCUMENT_ID_NOT_FOUND="document.id.not.found";
public static final String INVALID_DATE_MSG = "call.invalid.date";
} }

View File

@@ -1,28 +1,52 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity;
import net.gepafin.tendermanagement.entities.DocumentEntity;
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
import net.gepafin.tendermanagement.entities.RegionEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.CallTypeEnum; import net.gepafin.tendermanagement.enums.CallTypeEnum;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.model.request.DocumentReq;
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaReq;
import net.gepafin.tendermanagement.model.request.FaqReq;
import net.gepafin.tendermanagement.model.request.LookUpDataReq;
import net.gepafin.tendermanagement.model.response.CreateCallResponseBean;
import net.gepafin.tendermanagement.model.response.DocumentResponseBean;
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
import net.gepafin.tendermanagement.model.response.FaqResponseBean;
import net.gepafin.tendermanagement.model.response.LookUpDataResponse;
import net.gepafin.tendermanagement.repositories.CallRepository;
import net.gepafin.tendermanagement.repositories.CallTargetAudienceChecklistRepository;
import net.gepafin.tendermanagement.repositories.DocumentRepository;
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
import net.gepafin.tendermanagement.repositories.FaqRepository;
import net.gepafin.tendermanagement.repositories.LookUpDataRepository;
import net.gepafin.tendermanagement.repositories.RegionRepository;
import net.gepafin.tendermanagement.repositories.UserRepository;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; 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.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
@Component @Component
public class CallDao { public class CallDao {
@@ -51,30 +75,23 @@ public class CallDao {
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
public CreateCallResponseBean createCall(CreateCallRequest createCallRequest, Long userId) { public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) {
CreateCallResponseBean createCallResponseBean = null; CreateCallResponseBean createCallResponseBean = null;
CallEntity callEntity = convertToCallEntity(createCallRequest); CallEntity callEntity = convertToCallEntity(createCallRequest);
List<EvaluationCriteriaEntity> evaluationCriteriaEntities = convertToEvaluationCriteriaEntities(
createCallRequest.getCriteria(), callEntity);
List<DocumentEntity> documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity);
List<DocumentEntity> imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity);
List<FaqEntity> faqEntities = convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); List<FaqEntity> faqEntities = convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId);
List<LookUpDataResponse> amiedTo = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, List<LookUpDataResponse> amiedTo = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity,
LookUpDataTypeEnum.AIMED_TO); LookUpDataTypeEnum.AIMED_TO);
List<LookUpDataResponse> checkList = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(),
LookUpDataTypeEnum.CHECKLIST); Collections.emptyList(), faqEntities, Collections.emptyList());
createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities,
documentEntities, faqEntities, imageEntities);
createCallResponseBean.setAimedTo(amiedTo); createCallResponseBean.setAimedTo(amiedTo);
createCallResponseBean.setCheckList(checkList);
return createCallResponseBean; return createCallResponseBean;
} }
public CallEntity convertToCallEntity(CreateCallRequest createCallRequest) { public CallEntity convertToCallEntity(CreateCallRequestStep1 createCallRequest) {
CallEntity callEntity = new CallEntity(); CallEntity callEntity = new CallEntity();
validateCallEntity(createCallRequest.getRegionId(), createCallRequest.getAmount()); validateCallEntity(createCallRequest);
RegionEntity region = regionRepository.findById(createCallRequest.getRegionId()) RegionEntity region = regionRepository.findById(createCallRequest.getRegionId())
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND))); .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND)));
callEntity.setRegion(region); callEntity.setRegion(region);
@@ -86,12 +103,11 @@ public class CallDao {
callEntity.setStatus(String.valueOf(createCallRequest.getStatus())); callEntity.setStatus(String.valueOf(createCallRequest.getStatus()));
callEntity.setAmountMax(createCallRequest.getAmountMax()); callEntity.setAmountMax(createCallRequest.getAmountMax());
callEntity.setAmount(createCallRequest.getAmountMax()); callEntity.setAmount(createCallRequest.getAmountMax());
callEntity.setThreshold(createCallRequest.getThreshold());
callEntity.setConfidi(false); callEntity.setConfidi(false);
if(createCallRequest.getConfidi()!=null){ if(createCallRequest.getConfidi()!=null){
callEntity.setConfidi(createCallRequest.getConfidi()); callEntity.setConfidi(createCallRequest.getConfidi());
} }
callEntity.setDocumentation_requested(createCallRequest.getDocumentationRequested()); callEntity.setDocumentationRequested(createCallRequest.getDocumentationRequested());
callEntity = callRepository.save(callEntity); callEntity = callRepository.save(callEntity);
return callEntity; return callEntity;
} }
@@ -121,13 +137,15 @@ public class CallDao {
private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) { private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) {
validateDocumentEntity(documentReq.getId(),documentReq.getFileName()); validateDocumentEntity(documentReq.getId(),documentReq.getFileName());
DocumentEntity documentEntity = documentRepository.findById(documentReq.getId()); DocumentEntity documentEntity = documentRepository.findById(documentReq.getId())
if(documentEntity==null){ .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
throw new ResourceNotFoundException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)));
} // if(documentEntity==null){
documentEntity.setFileName(documentReq.getFileName()); // throw ;
documentEntity.setFilePath(documentReq.getUrl()); // }
documentEntity.setCall(callEntity); // documentEntity.setFileName(documentReq.getFileName());
// documentEntity.setFilePath(documentReq.getUrl());
// documentEntity.setCall(callEntity);
return documentEntity; return documentEntity;
} }
@@ -170,9 +188,9 @@ public class CallDao {
throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.DOCUMENT_ID_NOT_FOUND)); throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.DOCUMENT_ID_NOT_FOUND));
} }
if (!StringUtils.hasText(name)) { // if (!StringUtils.hasText(name)) {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); // throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG));
} // }
} }
public void validateEvolutionCrieteriaEntity(String name) { public void validateEvolutionCrieteriaEntity(String name) {
@@ -181,14 +199,17 @@ public class CallDao {
} }
} }
public void validateCallEntity(Long regionId, BigDecimal fundingAmount) { public void validateCallEntity(CreateCallRequestStep1 createCallRequest) {
if (regionId == null) { if (createCallRequest.getRegionId() == null) {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG)); throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG));
} }
if (fundingAmount == null || fundingAmount.compareTo(BigDecimal.ZERO) <= 0) { if (createCallRequest.getAmount().compareTo(BigDecimal.ZERO) <= 0||createCallRequest.getAmountMax().compareTo(BigDecimal.ZERO) <= 0) {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.AMOUNT_GREATER_THAN_ZERO_MSG)); throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.AMOUNT_GREATER_THAN_ZERO_MSG));
} }
if (createCallRequest.getStartDate().toLocalDate().isBefore(LocalDate.now()) || createCallRequest.getEndDate().toLocalDate().isBefore(LocalDate.now())) {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_DATE_MSG));
}
} }
public CreateCallResponseBean convertToCallResponseBean(CallEntity callEntity) { public CreateCallResponseBean convertToCallResponseBean(CallEntity callEntity) {
CreateCallResponseBean createCallResponseBean = new CreateCallResponseBean(); CreateCallResponseBean createCallResponseBean = new CreateCallResponseBean();
@@ -204,7 +225,7 @@ public class CallDao {
createCallResponseBean.setContactInfo(callEntity.getContactInfo()); createCallResponseBean.setContactInfo(callEntity.getContactInfo());
createCallResponseBean.setSubmissionMethod(callEntity.getSubmissionMethod()); createCallResponseBean.setSubmissionMethod(callEntity.getSubmissionMethod());
createCallResponseBean.setThreshold(callEntity.getThreshold()); createCallResponseBean.setThreshold(callEntity.getThreshold());
createCallResponseBean.setDocumentationReqested(callEntity.getDocumentation_requested()); createCallResponseBean.setDocumentationReqested(callEntity.getDocumentationRequested());
createCallResponseBean.setPriorityArea(callEntity.getPriorityArea()); createCallResponseBean.setPriorityArea(callEntity.getPriorityArea());
createCallResponseBean.setCreatedDate(callEntity.getCreatedDate()); createCallResponseBean.setCreatedDate(callEntity.getCreatedDate());
createCallResponseBean.setUpdatedDate(callEntity.getUpdatedDate()); createCallResponseBean.setUpdatedDate(callEntity.getUpdatedDate());
@@ -291,13 +312,13 @@ public class CallDao {
callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity); callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity);
callTargetAudienceChecklistEntity.setCall(callEntity); callTargetAudienceChecklistEntity.setCall(callEntity);
callTargetAudienceChecklistEntity= callTargetAudienceChecklistRepository.save(callTargetAudienceChecklistEntity); callTargetAudienceChecklistEntity= callTargetAudienceChecklistRepository.save(callTargetAudienceChecklistEntity);
lookUpDataResponses.add(convertToLookUpDataResponseBean(lookUpDataEntity,callTargetAudienceChecklistEntity)); lookUpDataResponses.add(convertToLookUpDataResponseBean(callTargetAudienceChecklistEntity));
} }
return lookUpDataResponses; return lookUpDataResponses;
} }
private LookUpDataEntity convertLookUpDataRequestIntoLookUpDataEntity(LookUpDataReq req, LookUpDataEntity.LookUpDataTypeEnum type) { private LookUpDataEntity convertLookUpDataRequestIntoLookUpDataEntity(LookUpDataReq req, LookUpDataEntity.LookUpDataTypeEnum type) {
if (req.getLookUpDataId() == null || req.getLookUpDataId().equals(BigDecimal.ZERO)) { if (req.getLookUpDataId() == null || req.getLookUpDataId().equals(0l)) {
LookUpDataEntity newEntity = new LookUpDataEntity(); LookUpDataEntity newEntity = new LookUpDataEntity();
newEntity.setValue(req.getValue()); newEntity.setValue(req.getValue());
newEntity.setType(type.getValue()); newEntity.setType(type.getValue());
@@ -308,8 +329,9 @@ public class CallDao {
.orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG))); .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.LOOK_UP_DATA_NOT_VALID_MSG)));
} }
public LookUpDataResponse convertToLookUpDataResponseBean(LookUpDataEntity lookUpDataEntity,CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { public LookUpDataResponse convertToLookUpDataResponseBean(CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) {
LookUpDataResponse lookUpDataResponse = new LookUpDataResponse(); LookUpDataResponse lookUpDataResponse = new LookUpDataResponse();
LookUpDataEntity lookUpDataEntity = callTargetAudienceChecklistEntity.getLookupData();
lookUpDataResponse.setId(callTargetAudienceChecklistEntity.getId()); lookUpDataResponse.setId(callTargetAudienceChecklistEntity.getId());
lookUpDataResponse.setLookUpDataId(lookUpDataEntity.getId()); lookUpDataResponse.setLookUpDataId(lookUpDataEntity.getId());
lookUpDataResponse.setValue(lookUpDataEntity.getValue()); lookUpDataResponse.setValue(lookUpDataEntity.getValue());
@@ -318,6 +340,32 @@ public class CallDao {
lookUpDataResponse.setUpdatedDate(lookUpDataEntity.getUpdatedDate()); lookUpDataResponse.setUpdatedDate(lookUpDataEntity.getUpdatedDate());
return lookUpDataResponse; return lookUpDataResponse;
} }
public CreateCallResponseBean createCallStep2(CreateCallRequestStep2 createCallRequest, Long userId) {
CreateCallResponseBean createCallResponseBean = null;
CallEntity callEntity = callRepository.findById(createCallRequest.getCallId())
.orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)));
callEntity.setThreshold(createCallRequest.getThreshold());
List<EvaluationCriteriaEntity> evaluationCriteriaEntities = convertToEvaluationCriteriaEntities(
createCallRequest.getCriteria(), callEntity);
List<DocumentEntity> documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity);
List<DocumentEntity> imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity);
List<LookUpDataResponse> checkList = convertLookUpDataEntities(createCallRequest.getCheckList(), callEntity,
LookUpDataTypeEnum.CHECKLIST);
List<FaqEntity> faqEntities = faqRepository.findByCallId(callEntity.getId());
List<LookUpDataResponse> amiedTo = callTargetAudienceChecklistRepository
.findByCallIdAndLookupDataType(callEntity.getId(), LookUpDataTypeEnum.AIMED_TO.getValue()).stream()
.map(this::convertToLookUpDataResponseBean).toList();
createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities,
documentEntities, faqEntities, imageEntities);
createCallResponseBean.setAimedTo(amiedTo);
createCallResponseBean.setCheckList(checkList);
return createCallResponseBean;
}
} }

View File

@@ -1,5 +1,16 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.entities.DocumentEntity;
@@ -10,17 +21,6 @@ import net.gepafin.tendermanagement.service.AmazonS3Service;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class DocumentDao { public class DocumentDao {
@@ -34,15 +34,6 @@ public class DocumentDao {
@Autowired @Autowired
private CallDao callDao; private CallDao callDao;
@Value("${aws.s3.bucket.name}")
private String bucketName;
@Value("${aws.s3.url.folder}")
private String s3Folder;
@Value("${aws.s3.url}")
private String s3Url;
public List<DocumentResponseBean> uploadFiles(List<MultipartFile> files, DocumentTypeEnum fileType) { public List<DocumentResponseBean> uploadFiles(List<MultipartFile> files, DocumentTypeEnum fileType) {
List<DocumentEntity> documentEntities = new ArrayList<>(); List<DocumentEntity> documentEntities = new ArrayList<>();
@@ -65,16 +56,15 @@ public class DocumentDao {
.map(callDao::convertToDocumentResponseBean) .map(callDao::convertToDocumentResponseBean)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public Void deleteFile(Long documentId){
DocumentEntity documentEntity= documentRepository.findById(documentId); public void deleteFile(Long documentId) {
if(documentEntity==null){ DocumentEntity documentEntity = documentRepository.findById(documentId)
new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR,
} Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)));
String fileName= Utils.extractFileName(documentEntity.getFilePath());
try { String fileName = Utils.extractFileName(documentEntity.getFilePath());
amazonS3Service.delete(bucketName, fileName); amazonS3Service.delete(fileName);
documentRepository.delete(documentEntity); documentRepository.delete(documentEntity);
}catch (Exception e){}
return null; }
}
} }

View File

@@ -52,10 +52,10 @@ public class CallEntity extends BaseEntity {
private String submissionMethod; private String submissionMethod;
@Column(name = "THRESHOLD", nullable = false) @Column(name = "THRESHOLD", nullable = false)
private Integer threshold; private Long threshold;
@Column(name="DOCUMENTATION_REQUESTED",columnDefinition = "TEXT") @Column(name="DOCUMENTATION_REQUESTED",columnDefinition = "TEXT")
private String documentation_requested; private String documentationRequested;
@Column(name = "PRIORITY_AREA", columnDefinition = "TEXT") @Column(name = "PRIORITY_AREA", columnDefinition = "TEXT")
private String priorityArea; private String priorityArea;

View File

@@ -7,43 +7,47 @@ import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Data import jakarta.validation.constraints.NotEmpty;
public class CreateCallRequest { import jakarta.validation.constraints.NotNull;
@Data
public class CreateCallRequestStep1 {
@NotEmpty
private String name; private String name;
@NotEmpty
private String descriptionShort; private String descriptionShort;
@NotEmpty
private String descriptionLong; private String descriptionLong;
@NotNull
private LocalDateTime startDate; private LocalDateTime startDate;
@NotNull
private LocalDateTime endDate; private LocalDateTime endDate;
@NotNull
private Long regionId; private Long regionId;
@NotNull
private BigDecimal amount; private BigDecimal amount;
@NotNull
private BigDecimal amountMax; private BigDecimal amountMax;
@NotNull
private List<LookUpDataReq> aimedTo; private List<LookUpDataReq> aimedTo;
@NotEmpty
private String documentationRequested; private String documentationRequested;
private Integer threshold;
private Boolean Confidi; private Boolean Confidi;
List<EvaluationCriteriaReq> criteria;
private List<FaqReq> faq; private List<FaqReq> faq;
private List<LookUpDataReq> checkList; @NotNull
private List<DocumentReq> docs;
private List<DocumentReq> images;
private CallTypeEnum status; private CallTypeEnum status;
} }

View File

@@ -0,0 +1,29 @@
package net.gepafin.tendermanagement.model.request;
import java.util.List;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import net.gepafin.tendermanagement.enums.CallTypeEnum;
@Data
public class CreateCallRequestStep2 {
@NotNull
private Long callId;
private Long threshold;
@NotNull
private List<EvaluationCriteriaReq> criteria;
@NotNull
private List<LookUpDataReq> checkList;
private List<DocumentReq> docs;
private List<DocumentReq> images;
private CallTypeEnum status;
}

View File

@@ -1,10 +1,12 @@
package net.gepafin.tendermanagement.model.request; package net.gepafin.tendermanagement.model.request;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@Data @Data
public class LookUpDataReq { public class LookUpDataReq {
@NotNull
private Long lookUpDataId; private Long lookUpDataId;
private String value; private String value;

View File

@@ -32,7 +32,7 @@ public class CreateCallResponseBean {
private String submissionMethod; private String submissionMethod;
private Integer threshold; private Long threshold;
private String priorityArea; private String priorityArea;

View File

@@ -1,8 +1,10 @@
package net.gepafin.tendermanagement.repositories; package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.CallEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
public interface CallRepository extends JpaRepository<CallEntity, Integer> { @Repository
public interface CallRepository extends JpaRepository<CallEntity, Long> {
} }

View File

@@ -1,7 +1,14 @@
package net.gepafin.tendermanagement.repositories; package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity;
@Repository
public interface CallTargetAudienceChecklistRepository extends JpaRepository<CallTargetAudienceChecklistEntity,Long> { public interface CallTargetAudienceChecklistRepository extends JpaRepository<CallTargetAudienceChecklistEntity,Long> {
List<CallTargetAudienceChecklistEntity> findByCallIdAndLookupDataType(Long id, String value);
} }

View File

@@ -1,9 +1,10 @@
package net.gepafin.tendermanagement.repositories; package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.entities.DocumentEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
public interface DocumentRepository extends JpaRepository<DocumentEntity, Integer> { @Repository
public interface DocumentRepository extends JpaRepository<DocumentEntity, Long> {
DocumentEntity findById(Long id);
} }

View File

@@ -1,7 +1,14 @@
package net.gepafin.tendermanagement.repositories; package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.FaqEntity; import net.gepafin.tendermanagement.entities.FaqEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FaqRepository extends JpaRepository<FaqEntity, Integer> { public interface FaqRepository extends JpaRepository<FaqEntity, Integer> {
List<FaqEntity> findByCallId(Long callId);
} }

View File

@@ -1,6 +1,5 @@
package net.gepafin.tendermanagement.service; package net.gepafin.tendermanagement.service;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -10,11 +9,9 @@ import java.io.InputStream;
@Component @Component
public interface AmazonS3Service { public interface AmazonS3Service {
public String upload(String fileName, MultipartFile file) throws IOException;
public String upload(String fileName, public Boolean delete(String fileName);
MultipartFile file) throws IOException;
public Boolean delete(String bucketName ,String fileName); InputStream getFile(String filePath) throws IOException;
InputStream getFile(String filePath) throws IOException;
} }

View File

@@ -1,11 +1,14 @@
package net.gepafin.tendermanagement.service; package net.gepafin.tendermanagement.service;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.model.request.CreateCallRequest; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; import net.gepafin.tendermanagement.model.response.CreateCallResponseBean;
public interface CallService { public interface CallService {
CreateCallResponseBean createCall(HttpServletRequest request, CreateCallRequest createCallRequest); CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest);
CreateCallResponseBean createCallStep2(HttpServletRequest request, CreateCallRequestStep2 createCallRequest);
} }

View File

@@ -10,5 +10,5 @@ public interface DocumentService {
public List<DocumentResponseBean> uploadFile(List<MultipartFile> files, DocumentTypeEnum fileType); public List<DocumentResponseBean> uploadFile(List<MultipartFile> files, DocumentTypeEnum fileType);
public Void deleteFile(Long documentId); public void deleteFile(Long documentId);
} }

View File

@@ -63,7 +63,7 @@ public class AmazonS3ServiceImpl implements AmazonS3Service {
} }
@Override @Override
public Boolean delete(String bucketName,String fileName) { public Boolean delete(String fileName) {
final DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, fileName); final DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, fileName);
if(Boolean.FALSE.equals(isTestProfileActivated())) { if(Boolean.FALSE.equals(isTestProfileActivated())) {

View File

@@ -3,7 +3,8 @@ package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.jwt.TokenProvider; import net.gepafin.tendermanagement.config.jwt.TokenProvider;
import net.gepafin.tendermanagement.dao.CallDao; import net.gepafin.tendermanagement.dao.CallDao;
import net.gepafin.tendermanagement.model.request.CreateCallRequest; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; import net.gepafin.tendermanagement.model.response.CreateCallResponseBean;
import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.CallService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -22,8 +23,14 @@ public class CallServiceImpl implements CallService {
private TokenProvider tokenProvider; private TokenProvider tokenProvider;
@Override @Override
public CreateCallResponseBean createCall(HttpServletRequest request, CreateCallRequest createCallRequest) { public CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) {
Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request);
return callDao.createCall(createCallRequest, Long.parseLong(userInfo.get("userId").toString())); return callDao.createCallStep1(createCallRequest, Long.parseLong(userInfo.get("userId").toString()));
}
@Override
public CreateCallResponseBean createCallStep2(HttpServletRequest request, CreateCallRequestStep2 createCallRequest) {
Map<String, Object> userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request);
return callDao.createCallStep2(createCallRequest, Long.parseLong(userInfo.get("userId").toString()));
} }
} }

View File

@@ -1,14 +1,15 @@
package net.gepafin.tendermanagement.service.impl; package net.gepafin.tendermanagement.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import net.gepafin.tendermanagement.dao.DocumentDao; import net.gepafin.tendermanagement.dao.DocumentDao;
import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum;
import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.model.response.DocumentResponseBean;
import net.gepafin.tendermanagement.service.DocumentService; import net.gepafin.tendermanagement.service.DocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Service @Service
public class DocumentServiceImpl implements DocumentService { public class DocumentServiceImpl implements DocumentService {
@@ -22,7 +23,7 @@ public class DocumentServiceImpl implements DocumentService {
return fileDao.uploadFiles(files,fileType); return fileDao.uploadFiles(files,fileType);
} }
@Override @Override
public Void deleteFile(Long documentId){ public void deleteFile(Long documentId){
return fileDao.deleteFile(documentId); fileDao.deleteFile(documentId);
} }
} }

View File

@@ -7,20 +7,22 @@ import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import net.gepafin.tendermanagement.model.request.CreateCallRequest; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; import net.gepafin.tendermanagement.model.response.CreateCallResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@Validated
public interface CallApi { public interface CallApi {
@Operation(summary = "Api to create call", @Operation(summary = "Api to create call step 1",
responses = { responses = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@@ -30,10 +32,26 @@ public interface CallApi {
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) }))
}) })
@PostMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/step1", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
public ResponseEntity<Response<CreateCallResponseBean>> createCall(HttpServletRequest request, public ResponseEntity<Response<CreateCallResponseBean>> createCallStep1(HttpServletRequest request,
@Parameter(description = "Call request object", required = true) @Parameter(description = "Call request object", required = true)
@Valid @RequestBody CreateCallRequest createCallRequest); @Valid @RequestBody CreateCallRequestStep1 createCallRequest);
@Operation(summary = "Api to create call step 2",
responses = {
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })),
@ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@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 = "/step2", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
public ResponseEntity<Response<CreateCallResponseBean>> createCallStep2(HttpServletRequest request,
@Parameter(description = "Call request object", required = true)
@Valid @RequestBody CreateCallRequestStep2 createCallRequest);
} }

View File

@@ -3,7 +3,8 @@ package net.gepafin.tendermanagement.web.rest.api.impl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.model.request.CreateCallRequest; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1;
import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2;
import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; import net.gepafin.tendermanagement.model.response.CreateCallResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.CallService;
@@ -27,8 +28,16 @@ public class CallApiController implements CallApi {
@Override @Override
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public ResponseEntity<Response<CreateCallResponseBean>> createCall(HttpServletRequest request, CreateCallRequest createCallRequest) { public ResponseEntity<Response<CreateCallResponseBean>> createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) {
CreateCallResponseBean createCallResponseBean = callService.createCall(request, createCallRequest); CreateCallResponseBean createCallResponseBean = callService.createCallStep1(request, createCallRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_CREATED_SUCCESSFULLY_MSG)));
}
@Override
@Transactional(rollbackFor=Exception.class)
public ResponseEntity<Response<CreateCallResponseBean>> createCallStep2(HttpServletRequest request, CreateCallRequestStep2 createCallRequest) {
CreateCallResponseBean createCallResponseBean = callService.createCallStep2(request, createCallRequest);
return ResponseEntity.status(HttpStatus.CREATED) return ResponseEntity.status(HttpStatus.CREATED)
.body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_CREATED_SUCCESSFULLY_MSG))); .body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_CREATED_SUCCESSFULLY_MSG)));
} }

View File

@@ -171,7 +171,6 @@
<column name="submission_method" type="TEXT"> <column name="submission_method" type="TEXT">
</column> </column>
<column name="threshold" type="INTEGER"> <column name="threshold" type="INTEGER">
<constraints nullable="false"/>
</column> </column>
<column name="priority_area" type="TEXT"/> <column name="priority_area" type="TEXT"/>
<column name="confidi" type="BOOLEAN"/> <column name="confidi" type="BOOLEAN"/>

View File

@@ -43,6 +43,8 @@ call.created.successfully=Call created successfully.
file.deleted.successfully=File deleted successfully. file.deleted.successfully=File deleted successfully.
document.not.found=Document not found. document.not.found=Document not found.
document.id.not.found=Document ID not found. document.id.not.found=Document ID not found.
call.created.successfully=Call created successfully.
call.invalid.date=Invalid start or end date.
# Login-related messages # Login-related messages
login.successfully=Login successfully. login.successfully=Login successfully.

View File

@@ -43,6 +43,7 @@ call.created.successfully=Chiamata creata correttamente.
file.deleted.successfully=File eliminato con successo. file.deleted.successfully=File eliminato con successo.
document.not.found=Documento non trovato. document.not.found=Documento non trovato.
document.id.not.found=ID documento non trovato. document.id.not.found=ID documento non trovato.
call.invalid.date=Data di inizio o fine non valida.
# Login-related messages # Login-related messages
login.successfully=Accesso effettuato con successo. login.successfully=Accesso effettuato con successo.