conflicts resolved
This commit is contained in:
@@ -15,12 +15,10 @@ import org.springframework.security.config.http.SessionCreationPolicy;
|
|||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.security.web.SecurityFilterChain;
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
import org.springframework.security.web.access.intercept.AuthorizationFilter;
|
|
||||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||||
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
|
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher;
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
||||||
import org.springframework.web.cors.CorsConfiguration;
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
import org.springframework.web.cors.CorsConfigurationSource;
|
|
||||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||||
import org.springframework.web.filter.CorsFilter;
|
import org.springframework.web.filter.CorsFilter;
|
||||||
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
|
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
|
||||||
@@ -39,12 +37,10 @@ import net.gepafin.tendermanagement.config.jwt.TokenProvider;
|
|||||||
public class SecurityConfig {
|
public class SecurityConfig {
|
||||||
|
|
||||||
private final TokenProvider tokenProvider;
|
private final TokenProvider tokenProvider;
|
||||||
private final CorsConfigurationSource corsConfigurationSource;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public SecurityConfig(TokenProvider tokenProvider, CorsConfigurationSource corsConfigurationSource) {
|
public SecurityConfig(TokenProvider tokenProvider) {
|
||||||
this.tokenProvider = tokenProvider;
|
this.tokenProvider = tokenProvider;
|
||||||
this.corsConfigurationSource = corsConfigurationSource;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@@ -71,17 +67,25 @@ public class SecurityConfig {
|
|||||||
.requestMatchers(new AntPathRequestMatcher("/swagger-ui/**"));
|
.requestMatchers(new AntPathRequestMatcher("/swagger-ui/**"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Bean
|
|
||||||
// public CorsConfigurationSource corsConfigurationSource() {
|
@Bean
|
||||||
// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
public CorsFilter corsFilter() {
|
||||||
// CorsConfiguration config = new CorsConfiguration();
|
|
||||||
// config.setAllowCredentials(true);
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||||
// config.addAllowedOrigin("http://localhost:3000"); // Change this to your frontend URL
|
|
||||||
// config.addAllowedHeader("*");
|
CorsConfiguration config = new CorsConfiguration();
|
||||||
// config.addAllowedMethod("*");
|
config.addAllowedOrigin("*");
|
||||||
// source.registerCorsConfiguration("/**", config);
|
config.addAllowedMethod("*");
|
||||||
// return source;
|
config.addAllowedHeader("*");
|
||||||
// }
|
config.setMaxAge(3600l);
|
||||||
|
|
||||||
|
if (config.getAllowedOrigins() != null && !config.getAllowedOrigins().isEmpty()) {
|
||||||
|
source.registerCorsConfiguration("/v1/**", config);
|
||||||
|
source.registerCorsConfiguration("/management/**", config);
|
||||||
|
source.registerCorsConfiguration("/v1/api-docs", config);
|
||||||
|
}
|
||||||
|
return new CorsFilter(source);
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public CorsFilter corsFilter() {
|
public CorsFilter corsFilter() {
|
||||||
@@ -94,7 +98,6 @@ public class SecurityConfig {
|
|||||||
.csrf(AbstractHttpConfigurer::disable)
|
.csrf(AbstractHttpConfigurer::disable)
|
||||||
.authorizeHttpRequests(auth -> auth
|
.authorizeHttpRequests(auth -> auth
|
||||||
.requestMatchers(mvc.pattern(HttpMethod.POST, "/v1/user/login")).permitAll()
|
.requestMatchers(mvc.pattern(HttpMethod.POST, "/v1/user/login")).permitAll()
|
||||||
.requestMatchers(mvc.pattern(HttpMethod.POST, "/v1/user")).permitAll()
|
|
||||||
.requestMatchers("/swagger-ui/**").permitAll()
|
.requestMatchers("/swagger-ui/**").permitAll()
|
||||||
.requestMatchers("/v1/api-docs/**").permitAll()
|
.requestMatchers("/v1/api-docs/**").permitAll()
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ public class GepafinConstant {
|
|||||||
public static final String UPDATE_USER_ERROR_MSG = "update_user_error_msg";
|
public static final String UPDATE_USER_ERROR_MSG = "update_user_error_msg";
|
||||||
public static final String DELETE_USER_ERROR_MSG = "delete_user_error_msg";
|
public static final String DELETE_USER_ERROR_MSG = "delete_user_error_msg";
|
||||||
public static final String GET_USER_SUCCESS_MSG = "get_user_success_msg";
|
public static final String GET_USER_SUCCESS_MSG = "get_user_success_msg";
|
||||||
|
public static final String USER_NOT_ACTIVE_MSG = "user.not.active";
|
||||||
|
|
||||||
public static final String ROLE_CREATED_SUCCESS_MSG = "role.created.success";
|
public static final String ROLE_CREATED_SUCCESS_MSG = "role.created.success";
|
||||||
public static final String ROLE_UPDATED_SUCCESS_MSG = "role.updated.success";
|
public static final String ROLE_UPDATED_SUCCESS_MSG = "role.updated.success";
|
||||||
@@ -41,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";
|
||||||
|
|
||||||
public static final String RESET_PASSWORD_INITIATED = "password.reset.initiated";
|
public static final String RESET_PASSWORD_INITIATED = "password.reset.initiated";
|
||||||
public static final String PASSWORD_RESET_SUCCESS = "password.reset.success";
|
public static final String PASSWORD_RESET_SUCCESS = "password.reset.success";
|
||||||
|
|||||||
@@ -1,27 +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.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
import net.gepafin.tendermanagement.entities.LookUpDataEntity.LookUpDataTypeEnum;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class CallDao {
|
public class CallDao {
|
||||||
@@ -50,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);
|
||||||
@@ -85,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;
|
||||||
}
|
}
|
||||||
@@ -120,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,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) {
|
||||||
@@ -180,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();
|
||||||
@@ -203,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());
|
||||||
@@ -290,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());
|
||||||
@@ -307,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());
|
||||||
@@ -317,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;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
String fileName = Utils.extractFileName(documentEntity.getFilePath());
|
||||||
try {
|
amazonS3Service.delete(fileName);
|
||||||
amazonS3Service.delete(bucketName, fileName);
|
|
||||||
documentRepository.delete(documentEntity);
|
documentRepository.delete(documentEntity);
|
||||||
}catch (Exception e){}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public class RoleDao {
|
|||||||
private RoleEntity convertRoleRequestToRoleEntity(RoleReq roleReq) {
|
private RoleEntity convertRoleRequestToRoleEntity(RoleReq roleReq) {
|
||||||
RoleEntity roleEntity = new RoleEntity();
|
RoleEntity roleEntity = new RoleEntity();
|
||||||
roleEntity.setRoleName(roleReq.getRoleName());
|
roleEntity.setRoleName(roleReq.getRoleName());
|
||||||
|
roleEntity.setRoleType(roleReq.getRoleType());
|
||||||
roleEntity.setPermissions(roleReq.getPermissions());
|
roleEntity.setPermissions(roleReq.getPermissions());
|
||||||
roleEntity.setDescription(roleReq.getDescription());
|
roleEntity.setDescription(roleReq.getDescription());
|
||||||
roleEntity.setRegion(regionService.getRegionById(roleReq.getRegionId()));
|
roleEntity.setRegion(regionService.getRegionById(roleReq.getRegionId()));
|
||||||
@@ -57,6 +58,7 @@ public class RoleDao {
|
|||||||
roleResponseBean.setCreatedDate(roleEntity.getCreatedDate());
|
roleResponseBean.setCreatedDate(roleEntity.getCreatedDate());
|
||||||
roleResponseBean.setUpdatedDate(roleEntity.getUpdatedDate());
|
roleResponseBean.setUpdatedDate(roleEntity.getUpdatedDate());
|
||||||
roleResponseBean.setRoleName(roleEntity.getRoleName());
|
roleResponseBean.setRoleName(roleEntity.getRoleName());
|
||||||
|
roleResponseBean.setRoleType(roleEntity.getRoleType());
|
||||||
roleResponseBean.setDescription(roleEntity.getDescription());
|
roleResponseBean.setDescription(roleEntity.getDescription());
|
||||||
roleResponseBean.setPermissions(roleEntity.getPermissions());
|
roleResponseBean.setPermissions(roleEntity.getPermissions());
|
||||||
RegionResponseBean regionResponseBean = regionDao.convertRegionEntityToRegionResponse(roleEntity.getRegion());
|
RegionResponseBean regionResponseBean = regionDao.convertRegionEntityToRegionResponse(roleEntity.getRegion());
|
||||||
@@ -73,6 +75,7 @@ public class RoleDao {
|
|||||||
log.info("New role details: {}", roleReq);
|
log.info("New role details: {}", roleReq);
|
||||||
|
|
||||||
setIfUpdated(existingRole::getRoleName, existingRole::setRoleName, roleReq.getRoleName());
|
setIfUpdated(existingRole::getRoleName, existingRole::setRoleName, roleReq.getRoleName());
|
||||||
|
setIfUpdated(existingRole::getRoleType, existingRole::setRoleType, roleReq.getRoleType());
|
||||||
setIfUpdated(existingRole::getDescription, existingRole::setDescription, roleReq.getDescription());
|
setIfUpdated(existingRole::getDescription, existingRole::setDescription, roleReq.getDescription());
|
||||||
setIfUpdated(existingRole::getPermissions, existingRole::setPermissions, roleReq.getPermissions());
|
setIfUpdated(existingRole::getPermissions, existingRole::setPermissions, roleReq.getPermissions());
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class UserDao {
|
|||||||
|
|
||||||
public UserResponseBean createUser(UserReq userReq) {
|
public UserResponseBean createUser(UserReq userReq) {
|
||||||
log.info("Creating user with email: {}", userReq.getEmail());
|
log.info("Creating user with email: {}", userReq.getEmail());
|
||||||
if (userRepository.existsByEmail(userReq.getEmail())) {
|
if (userRepository.existsByEmailIgnoreCase(userReq.getEmail())) {
|
||||||
log.error("User creation failed: Email {} already exists", userReq.getEmail());
|
log.error("User creation failed: Email {} already exists", userReq.getEmail());
|
||||||
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.EMAIL_ALREADY_EXISTS));
|
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.EMAIL_ALREADY_EXISTS));
|
||||||
}
|
}
|
||||||
@@ -98,7 +98,7 @@ public class UserDao {
|
|||||||
userEntity.setPassword(passwordEncoder.encode(userReq.getPassword()));
|
userEntity.setPassword(passwordEncoder.encode(userReq.getPassword()));
|
||||||
userEntity.setEmail(userReq.getEmail());
|
userEntity.setEmail(userReq.getEmail());
|
||||||
userEntity.setFirstName(userReq.getFirstName());
|
userEntity.setFirstName(userReq.getFirstName());
|
||||||
userEntity.setStatus(userReq.getStatus().getValue());
|
userEntity.setStatus(UserStatusEnum.PENDING_VERIFICATION.getValue());
|
||||||
userEntity.setLastName(userReq.getLastName());
|
userEntity.setLastName(userReq.getLastName());
|
||||||
userEntity.setOrganization(userReq.getOrganization());
|
userEntity.setOrganization(userReq.getOrganization());
|
||||||
userEntity.setAddress(userReq.getAddress());
|
userEntity.setAddress(userReq.getAddress());
|
||||||
@@ -131,10 +131,10 @@ public class UserDao {
|
|||||||
log.info("Fetching user with ID: {}", id);
|
log.info("Fetching user with ID: {}", id);
|
||||||
UserEntity userEntity = userRepository.findById(id)
|
UserEntity userEntity = userRepository.findById(id)
|
||||||
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)));
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)));
|
||||||
if (!UserStatusEnum.ACTIVE.getValue().equals(userEntity.getStatus())) {
|
// if (!UserStatusEnum.ACTIVE.getValue().equals(userEntity.getStatus())) {
|
||||||
log.info("User with ID: {} is not active", id);
|
// log.info("User with ID: {} is not active", id);
|
||||||
throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG));
|
// throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG));
|
||||||
}
|
// }
|
||||||
log.info("User found: {}", userEntity);
|
log.info("User found: {}", userEntity);
|
||||||
return convertUserEntityToUserResponse(userEntity);
|
return convertUserEntityToUserResponse(userEntity);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import lombok.Setter;
|
|||||||
@Setter
|
@Setter
|
||||||
public class RoleEntity extends BaseEntity {
|
public class RoleEntity extends BaseEntity {
|
||||||
|
|
||||||
@Column(name = "ROLE_NAME", length = 50, nullable = true)
|
@Column(name = "ROLE_NAME", length = 255, nullable = true)
|
||||||
private String roleName;
|
private String roleName;
|
||||||
|
|
||||||
@Column(name = "DESCRIPTION", length = 255, nullable = true)
|
@Column(name = "DESCRIPTION", length = 255, nullable = true)
|
||||||
@@ -19,8 +19,12 @@ public class RoleEntity extends BaseEntity {
|
|||||||
|
|
||||||
@Column(name = "PERMISSIONS", length = 255, nullable = true)
|
@Column(name = "PERMISSIONS", length = 255, nullable = true)
|
||||||
private String permissions;
|
private String permissions;
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@JoinColumn(name = "REGION_ID", nullable = true)
|
@JoinColumn(name = "REGION_ID", nullable = true)
|
||||||
private RegionEntity region;
|
private RegionEntity region;
|
||||||
|
|
||||||
|
@Column(name = "ROLE_TYPE", length = 255, nullable = true)
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package net.gepafin.tendermanagement.model.request;
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -22,4 +20,6 @@ public class RoleReq {
|
|||||||
|
|
||||||
private Long regionId;
|
private Long regionId;
|
||||||
|
|
||||||
|
private String roleType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package net.gepafin.tendermanagement.model.request;
|
package net.gepafin.tendermanagement.model.request;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import net.gepafin.tendermanagement.enums.UserStatusEnum;
|
import net.gepafin.tendermanagement.enums.UserStatusEnum;
|
||||||
|
|||||||
@@ -36,6 +36,4 @@ public class UserReq {
|
|||||||
|
|
||||||
private String country;
|
private String country;
|
||||||
|
|
||||||
private UserStatusEnum status;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ public class RoleResponseBean extends BaseBean {
|
|||||||
private String description;
|
private String description;
|
||||||
private String permissions;
|
private String permissions;
|
||||||
private RegionResponseBean region;
|
private RegionResponseBean region;
|
||||||
|
private String roleType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public interface UserRepository extends JpaRepository<UserEntity, Long> {
|
public interface UserRepository extends JpaRepository<UserEntity, Long> {
|
||||||
UserEntity findByEmail(String email);
|
Optional<UserEntity> findByEmailIgnoreCase(String email);
|
||||||
boolean existsByEmail(String email);
|
boolean existsByEmailIgnoreCase(String email);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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())) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.gepafin.tendermanagement.config.jwt.TokenProvider;
|
|||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.dao.RoleDao;
|
import net.gepafin.tendermanagement.dao.RoleDao;
|
||||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
|
import net.gepafin.tendermanagement.enums.UserStatusEnum;
|
||||||
import net.gepafin.tendermanagement.model.request.LoginReq;
|
import net.gepafin.tendermanagement.model.request.LoginReq;
|
||||||
import net.gepafin.tendermanagement.model.request.LogoutReq;
|
import net.gepafin.tendermanagement.model.request.LogoutReq;
|
||||||
import net.gepafin.tendermanagement.model.response.LoginResponse;
|
import net.gepafin.tendermanagement.model.response.LoginResponse;
|
||||||
@@ -50,14 +51,16 @@ public class AuthenticationService {
|
|||||||
|
|
||||||
public JWTToken login(LoginReq loginReq) {
|
public JWTToken login(LoginReq loginReq) {
|
||||||
log.info("Attempting login for email: {}", loginReq.getEmail());
|
log.info("Attempting login for email: {}", loginReq.getEmail());
|
||||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginReq.getEmail(), loginReq.getPassword());
|
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
|
||||||
|
loginReq.getEmail(), loginReq.getPassword());
|
||||||
Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
|
Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
|
||||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||||
log.info("Authentication successful for email: {}", loginReq.getEmail());
|
log.info("Authentication successful for email: {}", loginReq.getEmail());
|
||||||
UserEntity user = userRepository.findByEmail(loginReq.getEmail());
|
UserEntity user = userRepository.findByEmailIgnoreCase(loginReq.getEmail()).orElseThrow(()-> new CustomValidationException(Status.NOT_FOUND,
|
||||||
if (user == null) {
|
Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)));
|
||||||
log.error("User not found for email: {}", loginReq.getEmail());
|
if (Boolean.FALSE.equals(UserStatusEnum.ACTIVE.getValue().equals(user.getStatus()))) {
|
||||||
throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG));
|
new CustomValidationException(Status.NOT_FOUND,
|
||||||
|
Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG));
|
||||||
}
|
}
|
||||||
user.setLastLogin(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
user.setLastLogin(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
|
||||||
userRepository.save(user);
|
userRepository.save(user);
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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('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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants;
|
|||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
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.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ public interface UserApi {
|
|||||||
@RequestMapping(value = "",
|
@RequestMapping(value = "",
|
||||||
produces = {"application/json"},
|
produces = {"application/json"},
|
||||||
method = RequestMethod.POST)
|
method = RequestMethod.POST)
|
||||||
|
@PreAuthorize("hasRole('ROLE_SUPER_ADMIN')")
|
||||||
default ResponseEntity<Response<UserResponseBean>> createUser(
|
default ResponseEntity<Response<UserResponseBean>> createUser(
|
||||||
@Parameter(description = "User request object", required = true) @Validated @RequestBody UserReq userReq) {
|
@Parameter(description = "User request object", required = true) @Validated @RequestBody UserReq userReq) {
|
||||||
return new ResponseEntity<Response<UserResponseBean>>(HttpStatus.NOT_IMPLEMENTED);
|
return new ResponseEntity<Response<UserResponseBean>>(HttpStatus.NOT_IMPLEMENTED);
|
||||||
|
|||||||
@@ -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)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
package net.gepafin.tendermanagement.web.rest.api.impl;
|
package net.gepafin.tendermanagement.web.rest.api.impl;
|
||||||
|
|
||||||
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.RoleEntity;
|
import net.gepafin.tendermanagement.entities.RoleEntity;
|
||||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||||
import net.gepafin.tendermanagement.repositories.RoleRepository;
|
|
||||||
import net.gepafin.tendermanagement.repositories.UserRepository;
|
import net.gepafin.tendermanagement.repositories.UserRepository;
|
||||||
|
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
||||||
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
@@ -22,11 +26,9 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
private final Logger log = LoggerFactory.getLogger(CustomUserDetailsService.class);
|
private final Logger log = LoggerFactory.getLogger(CustomUserDetailsService.class);
|
||||||
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final RoleRepository roleRepository;
|
|
||||||
|
|
||||||
public CustomUserDetailsService(UserRepository userRepository, RoleRepository roleRepository) {
|
public CustomUserDetailsService(UserRepository userRepository) {
|
||||||
this.userRepository = userRepository;
|
this.userRepository = userRepository;
|
||||||
this.roleRepository = roleRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -34,17 +36,15 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
public UserDetails loadUserByUsername(final String email) throws UsernameNotFoundException {
|
public UserDetails loadUserByUsername(final String email) throws UsernameNotFoundException {
|
||||||
log.debug("Authenticating {}", email);
|
log.debug("Authenticating {}", email);
|
||||||
|
|
||||||
UserEntity user = userRepository.findByEmail(email);
|
UserEntity user = userRepository.findByEmailIgnoreCase(email)
|
||||||
if (user == null) {
|
.orElseThrow(
|
||||||
throw new UsernameNotFoundException("User " + email + " was not found in the database");
|
() -> new UsernameNotFoundException("User " + email + " was not found in the database"));
|
||||||
}
|
|
||||||
|
|
||||||
return createSpringSecurityUser(user);
|
return createSpringSecurityUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
private org.springframework.security.core.userdetails.User createSpringSecurityUser(UserEntity user) {
|
private org.springframework.security.core.userdetails.User createSpringSecurityUser(UserEntity user) {
|
||||||
RoleEntity role = user.getRoleEntity();
|
RoleEntity role = user.getRoleEntity();
|
||||||
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getRoleName());
|
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getRoleType());
|
||||||
|
|
||||||
return new org.springframework.security.core.userdetails.User(
|
return new org.springframework.security.core.userdetails.User(
|
||||||
user.getEmail(),
|
user.getEmail(),
|
||||||
|
|||||||
@@ -66,6 +66,9 @@
|
|||||||
</column>
|
</column>
|
||||||
<column name="role_name" type="VARCHAR(255)">
|
<column name="role_name" type="VARCHAR(255)">
|
||||||
<constraints nullable="false"/>
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
<column name="role_type" type="VARCHAR(255)">
|
||||||
|
<constraints nullable="false"/>
|
||||||
</column>
|
</column>
|
||||||
<column name="description" type="VARCHAR(255)">
|
<column name="description" type="VARCHAR(255)">
|
||||||
<constraints nullable="true"/>
|
<constraints nullable="true"/>
|
||||||
@@ -168,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"/>
|
||||||
@@ -314,7 +316,8 @@
|
|||||||
<changeSet id="22-08-2024_2" author="Harish Bagora">
|
<changeSet id="22-08-2024_2" author="Harish Bagora">
|
||||||
<!-- Insert data for Beneficiaries role -->
|
<!-- Insert data for Beneficiaries role -->
|
||||||
<insert tableName="role">
|
<insert tableName="role">
|
||||||
<column name="role_name" value="BENEFICIARIES"/>
|
<column name="role_name" value="beneficiary"/>
|
||||||
|
<column name="role_type" value="ROLE_BENEFICIARY"/>
|
||||||
<column name="description" value="Companies or individuals looking for financing opportunities. They can view, search, and apply to available calls."/>
|
<column name="description" value="Companies or individuals looking for financing opportunities. They can view, search, and apply to available calls."/>
|
||||||
<column name="created_date" value="2024-08-14 00:00:00"/>
|
<column name="created_date" value="2024-08-14 00:00:00"/>
|
||||||
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
||||||
@@ -324,7 +327,8 @@
|
|||||||
|
|
||||||
<!-- Insert data for Super Admin role -->
|
<!-- Insert data for Super Admin role -->
|
||||||
<insert tableName="role">
|
<insert tableName="role">
|
||||||
<column name="role_name" value="SUPER_ADMIN"/>
|
<column name="role_name" value="super admin"/>
|
||||||
|
<column name="role_type" value="ROLE_SUPER_ADMIN"/>
|
||||||
<column name="description" value="Manages the creation and publication of tenders and administers internal system users."/>
|
<column name="description" value="Manages the creation and publication of tenders and administers internal system users."/>
|
||||||
<column name="created_date" value="2024-08-14 00:00:00"/>
|
<column name="created_date" value="2024-08-14 00:00:00"/>
|
||||||
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
||||||
@@ -334,7 +338,8 @@
|
|||||||
|
|
||||||
<!-- Insert data for Pre-instructors role -->
|
<!-- Insert data for Pre-instructors role -->
|
||||||
<insert tableName="role">
|
<insert tableName="role">
|
||||||
<column name="role_name" value="PRE_INSTRUCTORS"/>
|
<column name="role_name" value="pre instructor"/>
|
||||||
|
<column name="role_type" value="ROLE_PRE_INSTRUCTOR"/>
|
||||||
<column name="description" value="They evaluate the applications sent by beneficiaries and manage the preliminary relief process."/>
|
<column name="description" value="They evaluate the applications sent by beneficiaries and manage the preliminary relief process."/>
|
||||||
<column name="created_date" value="2024-08-14 00:00:00"/>
|
<column name="created_date" value="2024-08-14 00:00:00"/>
|
||||||
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
||||||
@@ -344,7 +349,8 @@
|
|||||||
|
|
||||||
<!-- Insert data for Gepafin Operators role -->
|
<!-- Insert data for Gepafin Operators role -->
|
||||||
<insert tableName="role">
|
<insert tableName="role">
|
||||||
<column name="role_name" value="GEPAFIN_OPERATORS"/>
|
<column name="role_name" value="gepafin operator"/>
|
||||||
|
<column name="role_type" value="ROLE_GEPAFIN_OPERATOR"/>
|
||||||
<column name="description" value="They manage the subsequent phases of the evaluation after the pre-investigation."/>
|
<column name="description" value="They manage the subsequent phases of the evaluation after the pre-investigation."/>
|
||||||
<column name="created_date" value="2024-08-14 00:00:00"/>
|
<column name="created_date" value="2024-08-14 00:00:00"/>
|
||||||
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
<column name="updated_date" value="2024-08-14 00:00:00"/>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ update_user_error_msg=An error occurred while updating the user.
|
|||||||
delete_user_error_msg=An error occurred while deleting the user.
|
delete_user_error_msg=An error occurred while deleting the user.
|
||||||
get_user_success_msg=User retrieved successfully.
|
get_user_success_msg=User retrieved successfully.
|
||||||
get_user_error_msg=An error occurred while retrieving the user.
|
get_user_error_msg=An error occurred while retrieving the user.
|
||||||
|
user.not.active=User is not active. Please contact support.
|
||||||
# Role-related messages
|
# Role-related messages
|
||||||
role.created.success=Role created successfully.
|
role.created.success=Role created successfully.
|
||||||
role.updated.success=Role updated successfully.
|
role.updated.success=Role updated successfully.
|
||||||
@@ -42,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.
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ update_user_error_msg=Si <20> verificato un errore durante l'aggiornamento dell'u
|
|||||||
delete_user_error_msg=Si � verificato un errore durante l'eliminazione dell'utente.
|
delete_user_error_msg=Si � verificato un errore durante l'eliminazione dell'utente.
|
||||||
get_user_success_msg=Utente recuperato con successo.
|
get_user_success_msg=Utente recuperato con successo.
|
||||||
get_user_error_msg=Si � verificato un errore durante il recupero dell'utente.
|
get_user_error_msg=Si � verificato un errore durante il recupero dell'utente.
|
||||||
|
user.not.active=Utente non attivo. Si prega di contattare il supporto.
|
||||||
# Role-related messages
|
# Role-related messages
|
||||||
role.created.success=Ruolo creato con successo.
|
role.created.success=Ruolo creato con successo.
|
||||||
role.updated.success=Ruolo aggiornato con successo.
|
role.updated.success=Ruolo aggiornato con successo.
|
||||||
@@ -42,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.
|
||||||
|
|||||||
Reference in New Issue
Block a user