diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 31e5dcbc..9f3d63ef 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -45,6 +45,7 @@ public class GepafinConstant { public static final String INVALID_DATE_MSG = "call.invalid.date"; public static final String STEP_1 = "STEP_1"; public static final String STEP_2 = "STEP_2"; + public static final String VALIDATE_REQUEST = "VALIDATE_REQUEST"; public static final String CALL_UPDATE_SUCCESSFULLY_MSG = "call.update.successfully"; public static final String CALL_NOT_FOUND = "call.not.found"; public static final String CALL_FETCH_SUCCESS_MSG = "call.fetch.success"; @@ -75,5 +76,8 @@ public class GepafinConstant { public static final String LOGOUT_SUCCESSFUL_MSG = "logout.successful.msg"; public static final String SUCCESS_PASSWORD_CHANGED = "success.password.changed"; public static final String UPDATE_USER_STATUS_SUCCESS_MSG = "update.user.status.success"; + public static final String FIELD_NOT_NULL = "field.not.null"; + public static final String FIELD_NOT_EMPTY = "field.not.empty"; + } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 95cb337a..647696ab 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -24,7 +24,7 @@ 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.CallStatusEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; @@ -41,6 +41,7 @@ import net.gepafin.tendermanagement.repositories.FaqRepository; import net.gepafin.tendermanagement.repositories.LookUpDataRepository; import net.gepafin.tendermanagement.repositories.RegionRepository; import net.gepafin.tendermanagement.service.UserService; +import net.gepafin.tendermanagement.service.impl.CallValidatorServiceImpl; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -75,7 +76,7 @@ public class CallDao { @Autowired private UserService userService; - public CreateCallResponseBean createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { + public CallResponse createCallStep1(CreateCallRequestStep1 createCallRequest, Long userId) { CallEntity callEntity = convertToCallEntity(createCallRequest); convertToFaqEntities(createCallRequest.getFaq(), callEntity, userId); convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, @@ -84,7 +85,7 @@ public class CallDao { // Collections.emptyList(), faqEntities, Collections.emptyList()); // createCallResponseBean.setAimedTo(amiedTo); // createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); - CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); + CallResponse createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; @@ -102,7 +103,7 @@ public class CallDao { callEntity.setDescriptionLong(createCallRequest.getDescriptionLong()); callEntity.setStartDate(createCallRequest.getStartDate()); callEntity.setEndDate(createCallRequest.getEndDate()); - callEntity.setStatus(CallTypeEnum.DRAFT.getValue()); + callEntity.setStatus(CallStatusEnum.DRAFT.getValue()); callEntity.setAmountMax(createCallRequest.getAmountMax()); callEntity.setAmount(createCallRequest.getAmountMax()); callEntity.setConfidi(false); @@ -144,7 +145,7 @@ public class CallDao { if (criteriaReq.getId() == null && criteriaReq.getId().equals(0l)) { criteriaEntity = evaluationCriteriaRepository.findById(criteriaReq.getId()) .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); + Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND))); } else { criteriaEntity = new EvaluationCriteriaEntity(); criteriaEntity.setCall(callEntity); @@ -264,15 +265,15 @@ public class CallDao { } - public CreateCallResponseBean convertToCallResponseBean(CallEntity callEntity) { - CreateCallResponseBean createCallResponseBean = new CreateCallResponseBean(); + public CallResponse convertToCallResponseBean(CallEntity callEntity) { + CallResponse createCallResponseBean = new CallResponse(); createCallResponseBean.setId(callEntity.getId()); createCallResponseBean.setName(callEntity.getName()); createCallResponseBean.setStartDate(callEntity.getStartDate()); createCallResponseBean.setEndDate(callEntity.getEndDate()); createCallResponseBean.setDescriptionShort(callEntity.getDescriptionShort()); createCallResponseBean.setDescriptionLong(callEntity.getDescriptionLong()); - createCallResponseBean.setStatus(CallTypeEnum.valueOf(callEntity.getStatus())); + createCallResponseBean.setStatus(CallStatusEnum.valueOf(callEntity.getStatus())); createCallResponseBean.setRegionId(callEntity.getRegion().getId()); createCallResponseBean.setAmount(callEntity.getAmount()); createCallResponseBean.setAmountMax(callEntity.getAmountMax()); @@ -281,6 +282,7 @@ public class CallDao { createCallResponseBean.setThreshold(callEntity.getThreshold()); createCallResponseBean.setDocumentationReqested(callEntity.getDocumentationRequested()); createCallResponseBean.setPriorityArea(callEntity.getPriorityArea()); + createCallResponseBean.setConfidi(callEntity.getConfidi()); createCallResponseBean.setCreatedDate(callEntity.getCreatedDate()); createCallResponseBean.setUpdatedDate(callEntity.getUpdatedDate()); return createCallResponseBean; @@ -323,11 +325,11 @@ public class CallDao { return responseBean; } - public CreateCallResponseBean assembleCreateCallResponseBean(CallEntity callEntity, + public CallResponse assembleCreateCallResponseBean(CallEntity callEntity, List evaluationCriteriaEntities, List documentEntities, List faqEntities, List images) { - CreateCallResponseBean callResponseBean = convertToCallResponseBean(callEntity); + CallResponse callResponseBean = convertToCallResponseBean(callEntity); List evaluationCriteriaResponseBeans = evaluationCriteriaEntities.stream() .map(this::convertToEvaluationCriteriaResponseBean).collect(Collectors.toList()); @@ -340,7 +342,7 @@ public class CallDao { List imagesResponseBean = images.stream().map(this::convertToDocumentResponseBean) .collect(Collectors.toList()); - CreateCallResponseBean createCallResponseBean = callResponseBean; + CallResponse createCallResponseBean = callResponseBean; createCallResponseBean.setCriteria(evaluationCriteriaResponseBeans); createCallResponseBean.setDocs(documentResponseBeans); createCallResponseBean.setFaq(faqResponseBeans); @@ -403,14 +405,14 @@ public class CallDao { return callRepository.findById(callId).orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); } - public CreateCallResponseBean getCallById(Long callId) { + public CallResponse getCallById(Long callId) { CallEntity callEntity = callRepository.findById(callId) .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); return getCallResponseBean(callEntity); } - public CreateCallResponseBean createCallStep2(Long callId, CreateCallRequestStep2 createCallRequest, Long userId) { + public CallResponse createCallStep2(Long callId, CreateCallRequestStep2 createCallRequest, Long userId) { CallEntity callEntity = callRepository.findById(callId) .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); @@ -433,7 +435,7 @@ public class CallDao { // documentEntities, faqEntities, imageEntities); // createCallResponseBean.setAimedTo(amiedTo); // createCallResponseBean.setCheckList(checkList); - CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); + CallResponse createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_2); return createCallResponseBean; } @@ -460,7 +462,7 @@ public class CallDao { } } - public CreateCallResponseBean updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) { + public CallResponse updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) { CallEntity callEntity = validateCall(callId); UserEntity userEntity = userService.validateUser(userId); isValidDateRange(updateCallRequest, callEntity); @@ -478,7 +480,7 @@ public class CallDao { setIfUpdated(callEntity::getConfidi, callEntity::setConfidi, updateCallRequest.getConfidi()); updateLookUpData(callEntity, updateCallRequest.getAimedTo(), LookUpDataTypeEnum.AIMED_TO); updateFaq(callEntity, updateCallRequest.getFaq(), userEntity); - CreateCallResponseBean createCallResponseBean = getCallResponseBean(callEntity); + CallResponse createCallResponseBean = getCallResponseBean(callEntity); createCallResponseBean.setCurrentStep(GepafinConstant.STEP_1); return createCallResponseBean; } @@ -506,7 +508,7 @@ public class CallDao { if (isExistingFaq(faqReq)) { faqEntity = faqRepository.findById(faqReq.getId()) .orElseThrow(() -> new ResourceNotFoundException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); + Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); } else { faqEntity = new FaqEntity(); faqEntity.setCall(callEntity); @@ -576,7 +578,7 @@ public class CallDao { callDetailsResponseBean.setDates(List.of(callEntity.getStartDate(), callEntity.getEndDate())); callDetailsResponseBean.setDescriptionShort(callEntity.getDescriptionShort()); callDetailsResponseBean.setDescriptionLong(callEntity.getDescriptionLong()); - callDetailsResponseBean.setStatus(CallTypeEnum.valueOf(callEntity.getStatus())); + callDetailsResponseBean.setStatus(CallStatusEnum.valueOf(callEntity.getStatus())); callDetailsResponseBean.setRegionId(callEntity.getRegion().getId()); callDetailsResponseBean.setAmount(callEntity.getAmount()); callDetailsResponseBean.setAmountMax(callEntity.getAmountMax()); @@ -589,7 +591,7 @@ public class CallDao { callDetailsResponseBean.setUpdatedDate(callEntity.getUpdatedDate()); return callDetailsResponseBean; } - private CreateCallResponseBean getCallResponseBean(CallEntity callEntity) { + private CallResponse getCallResponseBean(CallEntity callEntity) { List documentEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), DocumentTypeEnum.DOCUMENT.getValue()); List imageEntities = documentRepository.findByCallIdAndTypeAndIsDeletedFalse(callEntity.getId(), @@ -605,7 +607,7 @@ public class CallDao { List evaluationCriteriaEntities = evaluationCriteriaRepository .findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), LookUpDataTypeEnum.EVALUATION_CRITERIA.getValue()); - CreateCallResponseBean createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, + CallResponse createCallResponseBean = assembleCreateCallResponseBean(callEntity, evaluationCriteriaEntities, documentEntities, faqEntities, imageEntities); createCallResponseBean.setAimedTo(amiedTo); createCallResponseBean.setCheckList(checkList); @@ -617,4 +619,13 @@ public class CallDao { .map(this::convertToCallDetailsResponseBean) .collect(Collectors.toList()); } + + public CallResponse validateCall(CallEntity callEntity) { + CallResponse callResponseBean = getCallResponseBean(callEntity); + CallValidatorServiceImpl.validateResponse(callResponseBean); + callEntity.setStatus(CallStatusEnum.READY_TO_PUBLISH.getValue()); + callRepository.save(callEntity); + callResponseBean.setCurrentStep(GepafinConstant.VALIDATE_REQUEST); + return callResponseBean; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/CallTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java similarity index 69% rename from src/main/java/net/gepafin/tendermanagement/enums/CallTypeEnum.java rename to src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java index 46b88869..b1befe86 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/CallTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/CallStatusEnum.java @@ -2,15 +2,16 @@ package net.gepafin.tendermanagement.enums; import com.fasterxml.jackson.annotation.JsonValue; -public enum CallTypeEnum { +public enum CallStatusEnum { DRAFT("DRAFT"), PUBLISH("PUBLISH"), - EXPIRE("EXPIRE"); + EXPIRE("EXPIRE"), + READY_TO_PUBLISH("READY_TO_PUBLISH"); private String value; - CallTypeEnum(String value) { + CallStatusEnum(String value) { this.value = value; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java index f100446f..0e19dd69 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallDetailsResponseBean.java @@ -1,7 +1,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Data; -import net.gepafin.tendermanagement.enums.CallTypeEnum; +import net.gepafin.tendermanagement.enums.CallStatusEnum; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -19,7 +19,7 @@ public class CallDetailsResponseBean { private List dates; - private CallTypeEnum status; + private CallStatusEnum status; private Long regionId; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java similarity index 87% rename from src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java rename to src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java index 34a361d9..4deaef67 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CreateCallResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CallResponse.java @@ -5,10 +5,10 @@ import java.time.LocalDateTime; import java.util.List; import lombok.Data; -import net.gepafin.tendermanagement.enums.CallTypeEnum; +import net.gepafin.tendermanagement.enums.CallStatusEnum; @Data -public class CreateCallResponseBean { +public class CallResponse { private Long id; @@ -22,7 +22,7 @@ public class CreateCallResponseBean { private LocalDateTime endDate; - private CallTypeEnum status; + private CallStatusEnum status; private Long regionId; @@ -39,6 +39,8 @@ public class CreateCallResponseBean { private String priorityArea; private String documentationReqested; + + private Boolean confidi; private LocalDateTime createdDate; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java index f631b0ed..62da59a7 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/CallTargetAudienceChecklistRepository.java @@ -16,5 +16,5 @@ public interface CallTargetAudienceChecklistRepository extends JpaRepository findById(@Param("id") Long id); - List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long id, String value); + List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long id, String type); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/CallService.java b/src/main/java/net/gepafin/tendermanagement/service/CallService.java index f518a216..1008f062 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CallService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CallService.java @@ -7,18 +7,20 @@ import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; -import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; +import net.gepafin.tendermanagement.model.response.CallResponse; public interface CallService { - CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest); + CallResponse createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest); - CreateCallResponseBean createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest); + CallResponse createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest); - CreateCallResponseBean updateCallStep1(HttpServletRequest request, Long callId, UpdateCallRequestStep1 updateCallRequest); + CallResponse updateCallStep1(HttpServletRequest request, Long callId, UpdateCallRequestStep1 updateCallRequest); - CreateCallResponseBean getCallById (Long callId); + CallResponse getCallById (Long callId); List getAllCalls(); + CallResponse validateCall(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 ab5cafaa..0dc37efd 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallServiceImpl.java @@ -7,7 +7,7 @@ import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; -import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; +import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.service.CallService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,28 +28,28 @@ public class CallServiceImpl implements CallService { @Override @Transactional(rollbackFor = Exception.class) - public CreateCallResponseBean createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) { + public CallResponse createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) { Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); return callDao.createCallStep1(createCallRequest, Long.parseLong(userInfo.get("userId").toString())); } @Override @Transactional(rollbackFor = Exception.class) - public CreateCallResponseBean createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest) { + public CallResponse createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest) { Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); return callDao.createCallStep2(callId, createCallRequest, Long.parseLong(userInfo.get("userId").toString())); } @Override @Transactional(rollbackFor = Exception.class) - public CreateCallResponseBean updateCallStep1(HttpServletRequest request, Long callId, + public CallResponse updateCallStep1(HttpServletRequest request, Long callId, UpdateCallRequestStep1 updateCallRequest) { Map userInfo= tokenProvider.getUserInfoAndUserIdFromToken(request); return callDao.updateCallStep1(callId, updateCallRequest, Long.parseLong(userInfo.get("userId").toString())); } @Override @Transactional(readOnly = true) - public CreateCallResponseBean getCallById(Long callId) { + public CallResponse getCallById(Long callId) { return callDao.getCallById(callId); } @@ -59,4 +59,10 @@ public class CallServiceImpl implements CallService { return callDao.getAllCalls(); } + + @Override + @Transactional(rollbackFor = Exception.class) + public CallResponse validateCall(Long callId) { + return callDao.validateCall(callDao.validateCall(callId)); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java new file mode 100644 index 00000000..d2079cdf --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CallValidatorServiceImpl.java @@ -0,0 +1,31 @@ +package net.gepafin.tendermanagement.service.impl; + +import net.gepafin.tendermanagement.model.response.CallResponse; +import net.gepafin.tendermanagement.util.FieldValidator; + +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.getStartDate(), "startDate") + .notNull(response.getEndDate(), "endDate") + .notNull(response.getStatus(), "status") + .notNull(response.getRegionId(), "regionId") + .notNull(response.getAmount(), "amount") + .notNull(response.getAmountMax(), "amountMax") + .notNull(response.getThreshold(), "threshold") + .notNull(response.getDocumentationReqested(), "documentationReqested") + .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(); + } + +} diff --git a/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java new file mode 100644 index 00000000..e57909d2 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/util/FieldValidator.java @@ -0,0 +1,40 @@ +package net.gepafin.tendermanagement.util; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import net.gepafin.tendermanagement.config.Translator; +import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.web.rest.api.errors.Status; +import net.gepafin.tendermanagement.web.rest.api.errors.ValidationException; + +public class FieldValidator { + + private final List errors = new ArrayList<>(); + + public static FieldValidator create() { + return new FieldValidator(); + } + + public FieldValidator notNull(Object object, String fieldName) { + if (Objects.isNull(object)) { + errors.add(MessageFormat.format(Translator.toLocale(GepafinConstant.FIELD_NOT_NULL), fieldName)); + } + return this; + } + + public FieldValidator notEmpty(List list, String fieldName) { + if (list == null || list.isEmpty()) { + errors.add(MessageFormat.format(Translator.toLocale(GepafinConstant.FIELD_NOT_EMPTY), fieldName)); + } + return this; + } + + public void validate() { + if (!errors.isEmpty()) { + throw new ValidationException(Status.VALIDATION_ERROR, errors); + } + } +} 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 02ffc988..1b4771a8 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 @@ -23,7 +23,7 @@ import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; -import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; +import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; @@ -42,7 +42,7 @@ public interface CallApi { }) @PostMapping(value = "/step1", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") - public ResponseEntity> createCallStep1(HttpServletRequest request, + public ResponseEntity> createCallStep1(HttpServletRequest request, @Parameter(description = "Call request object", required = true) @Valid @RequestBody CreateCallRequestStep1 createCallRequest); @@ -58,7 +58,7 @@ public interface CallApi { }) @PutMapping(value = "/step2/{callId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") - public ResponseEntity> createCallStep2(HttpServletRequest request, + public ResponseEntity> createCallStep2(HttpServletRequest request, @Parameter(description = "The call id", required = true) @PathVariable("callId") Long callId, @Parameter(description = "Call request object", required = true) @Valid @RequestBody CreateCallRequestStep2 createCallRequest); @@ -74,7 +74,7 @@ public interface CallApi { }) @PutMapping(value = "/step1/{callId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") - public ResponseEntity> updateCallStep1(HttpServletRequest request, + public ResponseEntity> updateCallStep1(HttpServletRequest request, @Parameter(description = "The call id", required = true) @PathVariable("callId") Long callId, @Parameter(description = "Call request object", required = true) @Valid @RequestBody UpdateCallRequestStep1 updateCallRequest); @Operation(summary = "Api to get call by id", @@ -88,8 +88,10 @@ public interface CallApi { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @GetMapping(value = "/{callId}", produces = { "application/json" }) - ResponseEntity> getCallById( + ResponseEntity> getCallById( @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); + + @Operation(summary = "Api to get all calls", responses = { @ApiResponse(responseCode = "200", description = "OK"), @@ -102,5 +104,21 @@ public interface CallApi { @GetMapping(value = "", produces = { "application/json" }) ResponseEntity>> getAllCalls(); + + + @Operation(summary = "Api to validate call", + 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 = "/validate/{callId}", produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('ROLE_SUPER_ADMIN')") + public ResponseEntity> validateCall(HttpServletRequest request, + @Parameter(description = "The call id", required = true) @PathVariable("callId") Long callId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationCriteriaApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationCriteriaApi.java index 41bfbc92..c102f42a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationCriteriaApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/EvaluationCriteriaApi.java @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*; public interface EvaluationCriteriaApi { - @Operation(summary = "API to create evaluation criteria", + @Operation(summary = "Api to create evaluation criteria", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -28,12 +28,12 @@ public interface EvaluationCriteriaApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PostMapping(value = "/criteria", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = "", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) ResponseEntity> createEvaluationCriteria(HttpServletRequest request, @Parameter(description = "Evaluation criteria request object", required = true) @Valid @RequestBody EvaluationCriteriaRequest createCallRequest); - @Operation(summary = "API to get evaluation criteria by id", + @Operation(summary = "Api to get evaluation criteria by id", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -41,7 +41,7 @@ public interface EvaluationCriteriaApi { @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })) }) - @GetMapping(value = "/criteria/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) ResponseEntity> getEvaluationCriteriaById(HttpServletRequest request, @Parameter(description = "evaluation criteria id", required = true) @PathVariable Long id); @@ -56,7 +56,7 @@ public interface EvaluationCriteriaApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) - @PutMapping(value = "/criteria/{id}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) ResponseEntity> updateEvaluationCriteria(HttpServletRequest request, @Parameter(description = "evaluation criteria id", required = true) @PathVariable Long id, @@ -71,7 +71,7 @@ public interface EvaluationCriteriaApi { @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })) }) - @DeleteMapping(value = "/criteria/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) ResponseEntity deleteEvaluationCriteria(HttpServletRequest request, @Parameter(description = "evaluation criteria id", required = true) @PathVariable Long id); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/ValidationException.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/ValidationException.java new file mode 100644 index 00000000..855177db --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/errors/ValidationException.java @@ -0,0 +1,27 @@ +package net.gepafin.tendermanagement.web.rest.api.errors; + +import java.util.List; + +public class ValidationException extends CustomValidationException { + + private final Status status; + private static final long serialVersionUID = 1L; + private final List errors; + + public ValidationException(Status status, List errors) { + super(status, errors.toString()); + this.errors = errors; + this.status = status; + } + + + public List getErrors() { + return errors; + } + + public Status getStatus() { + return status; + } + + +} 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 176b6c49..7c96aa7e 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 @@ -16,7 +16,7 @@ import net.gepafin.tendermanagement.model.request.CreateCallRequestStep1; import net.gepafin.tendermanagement.model.request.CreateCallRequestStep2; import net.gepafin.tendermanagement.model.request.UpdateCallRequestStep1; import net.gepafin.tendermanagement.model.response.CallDetailsResponseBean; -import net.gepafin.tendermanagement.model.response.CreateCallResponseBean; +import net.gepafin.tendermanagement.model.response.CallResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.web.rest.api.CallApi; @@ -33,31 +33,31 @@ public class CallApiController implements CallApi { @Override @Transactional(rollbackFor=Exception.class) - public ResponseEntity> createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) { - CreateCallResponseBean createCallResponseBean = callService.createCallStep1(request, createCallRequest); + public ResponseEntity> createCallStep1(HttpServletRequest request, CreateCallRequestStep1 createCallRequest) { + CallResponse 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, Long callId, CreateCallRequestStep2 createCallRequest) { - CreateCallResponseBean createCallResponseBean = callService.createCallStep2(request, callId, createCallRequest); + public ResponseEntity> createCallStep2(HttpServletRequest request, Long callId, CreateCallRequestStep2 createCallRequest) { + CallResponse createCallResponseBean = callService.createCallStep2(request, callId, 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> updateCallStep1(HttpServletRequest request, Long callId, UpdateCallRequestStep1 updateCallRequest) { - CreateCallResponseBean createCallResponseBean = callService.updateCallStep1(request, callId, updateCallRequest); + public ResponseEntity> updateCallStep1(HttpServletRequest request, Long callId, UpdateCallRequestStep1 updateCallRequest) { + CallResponse createCallResponseBean = callService.updateCallStep1(request, callId, updateCallRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_UPDATE_SUCCESSFULLY_MSG))); } @Override @Transactional(readOnly = true) - public ResponseEntity> getCallById(Long callId) { - CreateCallResponseBean createCallResponseBean = callService.getCallById(callId); + public ResponseEntity> getCallById(Long callId) { + CallResponse createCallResponseBean = callService.getCallById(callId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(createCallResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); } @@ -71,4 +71,11 @@ public class CallApiController implements CallApi { .body(new Response<>(calls, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); } + @Override + public ResponseEntity> validateCall(HttpServletRequest request, Long callId) { + CallResponse call = callService.validateCall(callId); + + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(call, Status.SUCCESS, Translator.toLocale(GepafinConstant.CALL_FETCH_SUCCESS_MSG))); + } } \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java index 7ee581e2..6c6286ae 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("${openapi.gepafin.base-path:/v1/evaluation}") +@RequestMapping("${openapi.gepafin.base-path:/v1/evaluationCriteria}") public class EvaluationCriteriaApiController implements EvaluationCriteriaApi { @Autowired diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LookUpDataApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LookUpDataApiController.java index 79fae0de..eb29c622 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LookUpDataApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LookUpDataApiController.java @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("${openapi.gepafin.base-path:/v1/lookupdata}") +@RequestMapping("${openapi.gepafin.base-path:/v1/lookUpData}") public class LookUpDataApiController implements LookUpDataApi { @Autowired diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index b09ba35e..17154713 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -49,6 +49,8 @@ call.update.successfully=Call updated successfully. call.fetch.success=Call details fetched successfully. call.not.found=Call not found. score.not.null=Score cannot be null or cannot be zero. +field.not.null={0} cannot be null. +field.not.empty={0} cannot be empty. # Login-related messages login.successfully=Login successfully. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index eeb33a23..43fd781d 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -48,6 +48,8 @@ call.update.successfully=Chiamata aggiornata con successo. call.fetch.success=Dettagli della chiamata recuperati con successo. call.not.found=Chiamata non trovata. score.not.null=Il punteggio non puļæ½ essere nullo o zero. +field.not.null={0} non puņ essere nullo. +field.not.empty=la {0} non puņ essere vuota. # Login-related messages login.successfully=Accesso effettuato con successo.