diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index c3de4e48..ab9f75cc 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -42,6 +42,7 @@ public class GepafinConstant { 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 DOCUMENT_ID_NOT_FOUND="document.id.not.found"; + public static final String INVALID_DATE_MSG = "call.invalid.date"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 179b3f4e..0b99ceb6 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -1,28 +1,52 @@ 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.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Collections; import java.util.List; 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.model.request.*; -import net.gepafin.tendermanagement.model.response.*; -import net.gepafin.tendermanagement.repositories.*; +import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; +import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; +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.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; -import org.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 public class CallDao { @@ -51,30 +75,23 @@ public class CallDao { @Autowired private UserRepository userRepository; - public CreateCallResponseBean createCall(CreateCallRequest createCallRequest, Long userId) { + public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { CreateCallResponseBean createCallResponseBean = null; CallEntity callEntity = convertToCallEntity(createCallRequest); - List evaluationCriteriaEntities = convertToEvaluationCriteriaEntities( - createCallRequest.getCriteria(), callEntity); - List documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity); - List imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity); List faqEntities = convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); List amiedTo = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, LookUpDataTypeEnum.AIMED_TO); - List checkList = convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, - LookUpDataTypeEnum.CHECKLIST); - createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, - documentEntities, faqEntities, imageEntities); + createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(), + Collections.emptyList(), faqEntities, Collections.emptyList()); createCallResponseBean.setAimedTo(amiedTo); - createCallResponseBean.setCheckList(checkList); return createCallResponseBean; } - public CallEntity convertToCallEntity(CreateCallRequest createCallRequest) { + public CallEntity convertToCallEntity(CreateCallRequestStep1 createCallRequest) { CallEntity callEntity = new CallEntity(); - validateCallEntity(createCallRequest.getRegionId(), createCallRequest.getAmount()); + validateCallEntity(createCallRequest); RegionEntity region = regionRepository.findById(createCallRequest.getRegionId()) .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND))); callEntity.setRegion(region); @@ -86,12 +103,11 @@ public class CallDao { callEntity.setStatus(String.valueOf(createCallRequest.getStatus())); callEntity.setAmountMax(createCallRequest.getAmountMax()); callEntity.setAmount(createCallRequest.getAmountMax()); - callEntity.setThreshold(createCallRequest.getThreshold()); callEntity.setConfidi(false); if(createCallRequest.getConfidi()!=null){ callEntity.setConfidi(createCallRequest.getConfidi()); } - callEntity.setDocumentation_requested(createCallRequest.getDocumentationRequested()); + callEntity.setDocumentationRequested(createCallRequest.getDocumentationRequested()); callEntity = callRepository.save(callEntity); return callEntity; } @@ -121,13 +137,15 @@ public class CallDao { private DocumentEntity convertToDocumentEntity(DocumentReq documentReq, CallEntity callEntity) { validateDocumentEntity(documentReq.getId(),documentReq.getFileName()); - DocumentEntity documentEntity = documentRepository.findById(documentReq.getId()); - if(documentEntity==null){ - throw new ResourceNotFoundException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); - } - documentEntity.setFileName(documentReq.getFileName()); - documentEntity.setFilePath(documentReq.getUrl()); - documentEntity.setCall(callEntity); + DocumentEntity documentEntity = documentRepository.findById(documentReq.getId()) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); +// if(documentEntity==null){ +// throw ; +// } +// documentEntity.setFileName(documentReq.getFileName()); +// documentEntity.setFilePath(documentReq.getUrl()); +// documentEntity.setCall(callEntity); return documentEntity; } @@ -170,9 +188,9 @@ public class CallDao { throw new CustomValidationException(Status.VALIDATION_ERROR,Translator.toLocale(GepafinConstant.DOCUMENT_ID_NOT_FOUND)); } - if (!StringUtils.hasText(name)) { - throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); - } +// if (!StringUtils.hasText(name)) { +// throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.NAME_NOT_EMPTY_MSG)); +// } } public void validateEvolutionCrieteriaEntity(String name) { @@ -181,14 +199,17 @@ public class CallDao { } } - public void validateCallEntity(Long regionId, BigDecimal fundingAmount) { - if (regionId == null) { + public void validateCallEntity(CreateCallRequestStep1 createCallRequest) { + if (createCallRequest.getRegionId() == null) { 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)); } + 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) { CreateCallResponseBean createCallResponseBean = new CreateCallResponseBean(); @@ -204,7 +225,7 @@ public class CallDao { createCallResponseBean.setContactInfo(callEntity.getContactInfo()); createCallResponseBean.setSubmissionMethod(callEntity.getSubmissionMethod()); createCallResponseBean.setThreshold(callEntity.getThreshold()); - createCallResponseBean.setDocumentationReqested(callEntity.getDocumentation_requested()); + createCallResponseBean.setDocumentationReqested(callEntity.getDocumentationRequested()); createCallResponseBean.setPriorityArea(callEntity.getPriorityArea()); createCallResponseBean.setCreatedDate(callEntity.getCreatedDate()); createCallResponseBean.setUpdatedDate(callEntity.getUpdatedDate()); @@ -291,13 +312,13 @@ public class CallDao { callTargetAudienceChecklistEntity.setLookupData(lookUpDataEntity); callTargetAudienceChecklistEntity.setCall(callEntity); callTargetAudienceChecklistEntity= callTargetAudienceChecklistRepository.save(callTargetAudienceChecklistEntity); - lookUpDataResponses.add(convertToLookUpDataResponseBean(lookUpDataEntity,callTargetAudienceChecklistEntity)); + lookUpDataResponses.add(convertToLookUpDataResponseBean(callTargetAudienceChecklistEntity)); } return lookUpDataResponses; } 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(); newEntity.setValue(req.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))); } - public LookUpDataResponse convertToLookUpDataResponseBean(LookUpDataEntity lookUpDataEntity,CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { + public LookUpDataResponse convertToLookUpDataResponseBean(CallTargetAudienceChecklistEntity callTargetAudienceChecklistEntity) { LookUpDataResponse lookUpDataResponse = new LookUpDataResponse(); + LookUpDataEntity lookUpDataEntity = callTargetAudienceChecklistEntity.getLookupData(); lookUpDataResponse.setId(callTargetAudienceChecklistEntity.getId()); lookUpDataResponse.setLookUpDataId(lookUpDataEntity.getId()); lookUpDataResponse.setValue(lookUpDataEntity.getValue()); @@ -318,6 +340,32 @@ public class CallDao { lookUpDataResponse.setUpdatedDate(lookUpDataEntity.getUpdatedDate()); 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 evaluationCriteriaEntities = convertToEvaluationCriteriaEntities( + createCallRequest.getCriteria(), callEntity); + List documentEntities = convertToDocumentEntities(createCallRequest.getDocs(), callEntity); + List imageEntities = convertToDocumentEntities(createCallRequest.getImages(), callEntity); + List checkList = convertLookUpDataEntities(createCallRequest.getCheckList(), callEntity, + LookUpDataTypeEnum.CHECKLIST); + List faqEntities = faqRepository.findByCallId(callEntity.getId()); + List 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; + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java index 3c5cd708..f9603b70 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java @@ -1,5 +1,16 @@ 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.constants.GepafinConstant; 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.web.rest.api.errors.ResourceNotFoundException; 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 public class DocumentDao { @@ -34,15 +34,6 @@ public class DocumentDao { @Autowired 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 uploadFiles(List files, DocumentTypeEnum fileType) { List documentEntities = new ArrayList<>(); @@ -65,16 +56,15 @@ public class DocumentDao { .map(callDao::convertToDocumentResponseBean) .collect(Collectors.toList()); } - public Void deleteFile(Long documentId){ - DocumentEntity documentEntity= documentRepository.findById(documentId); - if(documentEntity==null){ - new ResourceNotFoundException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND)); - } - String fileName= Utils.extractFileName(documentEntity.getFilePath()); - try { - amazonS3Service.delete(bucketName, fileName); - documentRepository.delete(documentEntity); - }catch (Exception e){} - return null; - } + + public void deleteFile(Long documentId) { + DocumentEntity documentEntity = documentRepository.findById(documentId) + .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, + Translator.toLocale(GepafinConstant.DOCUMENT_NOT_FOUND))); + + String fileName = Utils.extractFileName(documentEntity.getFilePath()); + amazonS3Service.delete(fileName); + documentRepository.delete(documentEntity); + + } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java index 1ee48d6b..81da7209 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/CallEntity.java @@ -52,10 +52,10 @@ public class CallEntity extends BaseEntity { private String submissionMethod; @Column(name = "THRESHOLD", nullable = false) - private Integer threshold; + private Long threshold; @Column(name="DOCUMENTATION_REQUESTED",columnDefinition = "TEXT") - private String documentation_requested; + private String documentationRequested; @Column(name = "PRIORITY_AREA", columnDefinition = "TEXT") private String priorityArea; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java similarity index 73% rename from src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequest.java rename to src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java index 80d828fc..e6cbc3e9 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep1.java @@ -7,43 +7,47 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; -@Data -public class CreateCallRequest { +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +@Data +public class CreateCallRequestStep1 { + + @NotEmpty private String name; + @NotEmpty private String descriptionShort; + @NotEmpty private String descriptionLong; + @NotNull private LocalDateTime startDate; + @NotNull private LocalDateTime endDate; + @NotNull private Long regionId; + @NotNull private BigDecimal amount; + @NotNull private BigDecimal amountMax; + @NotNull private List aimedTo; + @NotEmpty private String documentationRequested; - private Integer threshold; - private Boolean Confidi; - List criteria; - private List faq; - private List checkList; - - private List docs; - - private List images; - + @NotNull private CallTypeEnum status; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java new file mode 100644 index 00000000..7908c9ae --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/CreateCallRequestStep2.java @@ -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 criteria; + + @NotNull + private List checkList; + + private List docs; + + private List images; + + private CallTypeEnum status; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java index 18b847b4..5fe41b41 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/LookUpDataReq.java @@ -1,10 +1,12 @@ package net.gepafin.tendermanagement.model.request; +import jakarta.validation.constraints.NotNull; import lombok.Data; @Data public class LookUpDataReq { + @NotNull private Long lookUpDataId; private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java index b913f85b..56a42a2a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java @@ -32,7 +32,7 @@ public class CreateCallResponseBean { private String submissionMethod; - private Integer threshold; + private Long threshold; private String priorityArea; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java index ef6e144f..093e4086 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallRepository.java @@ -1,8 +1,10 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.CallEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; -public interface CallRepository extends JpaRepository { +@Repository +public interface CallRepository extends JpaRepository { } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java index fe70f982..8d4912fe 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java @@ -1,7 +1,14 @@ package net.gepafin.tendermanagement.repositories; -import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; -import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import net.gepafin.tendermanagement.entities.CallTargetAudienceChecklistEntity; + +@Repository public interface CallTargetAudienceChecklistRepository extends JpaRepository { + + List findByCallIdAndLookupDataType(Long id, String value); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java index d8d4f07a..9a2a4639 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/DocumentRepository.java @@ -1,9 +1,10 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.DocumentEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; -public interface DocumentRepository extends JpaRepository { +@Repository +public interface DocumentRepository extends JpaRepository { - DocumentEntity findById(Long id); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java index 9453ade3..7b4b7610 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java @@ -1,7 +1,14 @@ package net.gepafin.tendermanagement.repositories; 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 { + + List findByCallId(Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/AmazonS3Service.java b/src/main/java/net/gepafin/tendermanagement/service/AmazonS3Service.java index 188d131a..1ff3a7fd 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/AmazonS3Service.java +++ b/src/main/java/net/gepafin/tendermanagement/service/AmazonS3Service.java @@ -1,6 +1,5 @@ package net.gepafin.tendermanagement.service; - import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; @@ -10,11 +9,9 @@ import java.io.InputStream; @Component public interface AmazonS3Service { + public String upload(String fileName, MultipartFile file) throws IOException; - public String upload(String fileName, - MultipartFile file) throws IOException; + public Boolean delete(String fileName); - public Boolean delete(String bucketName ,String fileName); - - InputStream getFile(String filePath) throws IOException; + InputStream getFile(String filePath) throws IOException; } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index 40dfd65f..f8a07093 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -1,11 +1,14 @@ package net.gepafin.tendermanagement.service; 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; public interface CallService { - CreateCallResponseBean createCall(HttpServletRequest request, CreateCallRequest createCallRequest); + CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest); + + CreateCallResponseBean createCallStep2(HttpServletRequest request, CreateCallRequestStep2 createCallRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java index 806d81cc..4081af53 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java @@ -10,5 +10,5 @@ public interface DocumentService { public List uploadFile(List files, DocumentTypeEnum fileType); - public Void deleteFile(Long documentId); + public void deleteFile(Long documentId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java index ad865d13..3657d115 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java @@ -63,7 +63,7 @@ public class AmazonS3ServiceImpl implements AmazonS3Service { } @Override - public Boolean delete(String bucketName,String fileName) { + public Boolean delete(String fileName) { final DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, fileName); if(Boolean.FALSE.equals(isTestProfileActivated())) { 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 cb4b76bc..53edaf6d 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -3,7 +3,8 @@ package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.jwt.TokenProvider; 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.service.CallService; import org.springframework.beans.factory.annotation.Autowired; @@ -22,8 +23,14 @@ public class CallServiceImpl implements CallService { private TokenProvider tokenProvider; @Override - public CreateCallResponseBean createCall(HttpServletRequest request, CreateCallRequest createCallRequest) { + public CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) { Map 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 userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); + return callDao.createCallStep2(createCallRequest, Long.parseLong(userInfo.get("userId").toString())); } } 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 e7bf864e..55c6165b 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java @@ -1,14 +1,15 @@ 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.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; 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 public class DocumentServiceImpl implements DocumentService { @@ -22,7 +23,7 @@ public class DocumentServiceImpl implements DocumentService { return fileDao.uploadFiles(files,fileType); } @Override - public Void deleteFile(Long documentId){ - return fileDao.deleteFile(documentId); + public void deleteFile(Long documentId){ + fileDao.deleteFile(documentId); } } 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 637ad6f8..3da8bab6 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 @@ -7,20 +7,22 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; 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.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; 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.RequestBody; - +@Validated public interface CallApi { - @Operation(summary = "Api to create call", + @Operation(summary = "Api to create call step 1", responses = { @ApiResponse(responseCode = "200", description = "OK"), @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 = { @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')") - public ResponseEntity> createCall(HttpServletRequest request, + public ResponseEntity> createCallStep1(HttpServletRequest request, @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> createCallStep2(HttpServletRequest request, + @Parameter(description = "Call request object", required = true) + @Valid @RequestBody CreateCallRequestStep2 createCallRequest); } 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 d4165383..0ff654bc 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 @@ -3,7 +3,8 @@ 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.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.util.Response; import net.gepafin.tendermanagement.service.CallService; @@ -27,8 +28,16 @@ public class CallApiController implements CallApi { @Override @Transactional(rollbackFor=Exception.class) - public ResponseEntity> createCall(HttpServletRequest request, CreateCallRequest createCallRequest) { - CreateCallResponseBean createCallResponseBean = callService.createCall(request, createCallRequest); + public ResponseEntity> createCallStep1(HttpServletRequest request, CreateCallRequestStep1 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> createCallStep2(HttpServletRequest request, CreateCallRequestStep2 createCallRequest) { + CreateCallResponseBean createCallResponseBean = callService.createCallStep2(request, createCallRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_CREATED_SUCCESSFULLY_MSG))); } 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 d090e106..5293ec62 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 @@ -171,7 +171,6 @@ - diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index c35db8ac..15aa6498 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -43,6 +43,8 @@ call.created.successfully=Call created successfully. file.deleted.successfully=File deleted successfully. document.not.found=Document 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.successfully=Login successfully. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 085c1ce4..ae93ff53 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -43,6 +43,7 @@ call.created.successfully=Chiamata creata correttamente. file.deleted.successfully=File eliminato con successo. document.not.found=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.successfully=Accesso effettuato con successo.