validate assigned application

This commit is contained in:
rajesh
2024-10-25 12:00:21 +05:30
parent 4ef26827e7
commit 84636abbc5
6 changed files with 72 additions and 27 deletions

View File

@@ -1,5 +1,6 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
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.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEntity;
@@ -14,6 +15,7 @@ import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository;
import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.Validator;
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;
@@ -42,6 +44,9 @@ public class AssignedApplicationsDao {
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private Validator validator;
public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest){ public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest){
log.info("Assigning application to pre-Instructor with details: {}", applicationId,userId); log.info("Assigning application to pre-Instructor with details: {}", applicationId,userId);
@@ -137,38 +142,47 @@ public class AssignedApplicationsDao {
return assignedApplication; return assignedApplication;
} }
public void deleteById(Long id) { public void deleteById(HttpServletRequest request, Long id) {
log.info("Deleting assigned application with ID: {}", id); log.info("Deleting assigned application with ID: {}", id);
AssignedApplicationsEntity assignedApplicationsEntity= validateAssignedApplication(id); AssignedApplicationsEntity assignedApplicationsEntity= validateAssignedApplication(id);
validator.validatePreInstructor(request, assignedApplicationsEntity.getUserId());
assignedApplicationsEntity.setIsDeleted(true); assignedApplicationsEntity.setIsDeleted(true);
assignedApplicationsEntity= saveAssignedApplication(assignedApplicationsEntity); assignedApplicationsEntity= saveAssignedApplication(assignedApplicationsEntity);
log.info("Assigned Application deleted with ID: {}", id); log.info("Assigned Application deleted with ID: {}", id);
} }
public List<AssignedApplicationsResponse> getAllAssignedApplications(Long userId){ public List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId) {
Specification<AssignedApplicationsEntity> spec = search(userId); UserEntity user = validator.validateUser(request);
if(validator.checkIsPreInstructor() && userId == null) {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG));
}
if(userId != null) {
validator.validatePreInstructor(request, userId);
}
Specification<AssignedApplicationsEntity> spec = search(user.getHub().getId() ,userId);
List<AssignedApplicationsEntity> assignedApplicationsEntityList = assignedApplicationsRepository.findAll(spec); List<AssignedApplicationsEntity> assignedApplicationsEntityList = assignedApplicationsRepository.findAll(spec);
return assignedApplicationsEntityList.stream() return assignedApplicationsEntityList.stream()
.map(entity -> convertEntityToResponse(entity)) .map(entity -> convertEntityToResponse(entity))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private Specification<AssignedApplicationsEntity> search(Long userId) { private Specification<AssignedApplicationsEntity> search(Long hubId, Long userId) {
return (root, query, builder) -> { return (root, query, builder) -> {
Predicate predicate = builder.isFalse(root.get("isDeleted")); Predicate predicate = builder.isFalse(root.get("isDeleted"));
if (userId != null) { if (userId != null) {
predicate = builder.and(predicate, builder.equal(root.get("userId"), userId)); predicate = builder.and(predicate, builder.equal(root.get("userId"), userId));
} }
predicate = builder.and(predicate, builder.equal(root.get("application").get("hubId"), userId));
return predicate; return predicate;
}; };
} }
public AssignedApplicationsResponse updateAssignedApplication( public AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request,
Long id, AssignedApplicationsRequest updateRequest, UserEntity updatedByUser) { Long id, AssignedApplicationsRequest updateRequest) {
UserEntity updatedByUser = validator.validateUser(request);
log.info("Updating assigned application with ID: {}", id); log.info("Updating assigned application with ID: {}", id);
AssignedApplicationsEntity existingAssignment = validateAssignedApplication(id); AssignedApplicationsEntity existingAssignment = validateAssignedApplication(id);
validator.validatePreInstructor(request, existingAssignment.getUserId());
setIfUpdated(existingAssignment::getNote, existingAssignment::setNote, updateRequest.getNote()); setIfUpdated(existingAssignment::getNote, existingAssignment::setNote, updateRequest.getNote());
setIfUpdated(existingAssignment::getStatus, existingAssignment::setStatus, updateRequest.getStatus().name()); setIfUpdated(existingAssignment::getStatus, existingAssignment::setStatus, updateRequest.getStatus().name());
setIfUpdated(existingAssignment::getAssignedBy, existingAssignment::setAssignedBy, updatedByUser.getId()); setIfUpdated(existingAssignment::getAssignedBy, existingAssignment::setAssignedBy, updatedByUser.getId());
@@ -181,9 +195,10 @@ public class AssignedApplicationsDao {
return response; return response;
} }
public AssignedApplicationsResponse getAssignedApplicationById(Long id) { public AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id) {
log.info("Fetching assigned application with ID: {}", id); log.info("Fetching assigned application with ID: {}", id);
AssignedApplicationsEntity assignedApplication = validateAssignedApplication(id); AssignedApplicationsEntity assignedApplication = validateAssignedApplication(id);
validator.validatePreInstructor(request, assignedApplication.getUserId());
AssignedApplicationsResponse response = convertEntityToResponse(assignedApplication); AssignedApplicationsResponse response = convertEntityToResponse(assignedApplication);
log.info("Assigned application fetched successfully: {}", response); log.info("Assigned application fetched successfully: {}", response);
return response; return response;

View File

@@ -13,7 +13,7 @@ public interface AssignedApplicationsService {
void deleteApplication(HttpServletRequest request, Long id); void deleteApplication(HttpServletRequest request, Long id);
List<AssignedApplicationsResponse> getAllAssignedApplications(Long userId); List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId);
AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest assignedApplicationsRequest); AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest assignedApplicationsRequest);
AssignedApplicationsResponse getAssignedApplicationById(Long id); AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id);
} }

View File

@@ -26,32 +26,32 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AssignedApplicationsResponse createAssignedApplications(HttpServletRequest request, Long applicationId, Long userId, AssignedApplicationsRequest assignedApplicationsRequest) { public AssignedApplicationsResponse createAssignedApplications(HttpServletRequest request, Long applicationId, Long userId, AssignedApplicationsRequest assignedApplicationsRequest) {
UserEntity assignedByUser= validator.validateUser(request); UserEntity assignedByUser= validator.validateUser(request);
validator.validatePreInstructor(request, userId);
return assignedApplicationsDao.createAssignedApplications(applicationId,userId,assignedByUser, assignedApplicationsRequest); return assignedApplicationsDao.createAssignedApplications(applicationId,userId,assignedByUser, assignedApplicationsRequest);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteApplication(HttpServletRequest request, Long id) { public void deleteApplication(HttpServletRequest request, Long id) {
assignedApplicationsDao.deleteById(id); assignedApplicationsDao.deleteById(request, id);
} }
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public List<AssignedApplicationsResponse> getAllAssignedApplications(Long userId) { public List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId) {
return assignedApplicationsDao.getAllAssignedApplications(userId); return assignedApplicationsDao.getAllAssignedApplications(request, userId);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id , AssignedApplicationsRequest updatedAssignedApplicationRequest) { public AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest updatedAssignedApplicationRequest) {
UserEntity updatedByUser= validator.validateUser(request); return assignedApplicationsDao.updateAssignedApplication(request, id, updatedAssignedApplicationRequest);
return assignedApplicationsDao.updateAssignedApplication(id,updatedAssignedApplicationRequest,updatedByUser);
} }
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public AssignedApplicationsResponse getAssignedApplicationById(Long id) { public AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id) {
return assignedApplicationsDao.getAssignedApplicationById(id); return assignedApplicationsDao.getAssignedApplicationById(request, id);
} }
} }

View File

@@ -64,6 +64,20 @@ public class Validator {
} }
return false; return false;
} }
public Boolean checkIsPreInstructor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.isAuthenticated()) {
// Check if the user has the ROLE_SUPER_ADMIN authority
for (GrantedAuthority authority : authentication.getAuthorities()) {
if (RoleStatusEnum.ROLE_PRE_INSTRUCTOR.getValue().equals(authority.getAuthority())) {
return true;
}
}
}
return false;
}
public void validateRequest(HttpServletRequest request,RoleStatusEnum role) { public void validateRequest(HttpServletRequest request,RoleStatusEnum role) {
if (RoleStatusEnum.ROLE_SUPER_ADMIN.equals(role) && Boolean.FALSE.equals(checkIsSuperAdmin())) { if (RoleStatusEnum.ROLE_SUPER_ADMIN.equals(role) && Boolean.FALSE.equals(checkIsSuperAdmin())) {
@@ -138,5 +152,20 @@ public class Validator {
String[] activeProfiles = environment.getActiveProfiles(); String[] activeProfiles = environment.getActiveProfiles();
return Arrays.stream(activeProfiles).anyMatch("production"::equals); return Arrays.stream(activeProfiles).anyMatch("production"::equals);
} }
public UserEntity validatePreInstructor(HttpServletRequest request, Long preInstructorUserId) {
UserEntity preInstructorUser = userService.validateUser(preInstructorUserId);
if (checkIsSuperAdmin()) {
if (preInstructorUserId != null) {
validateHubId(request, preInstructorUser.getHub().getId());
}
return preInstructorUser;
} else if (checkIsPreInstructor()) {
return validateUserId(request, preInstructorUserId);
} else {
throw new ForbiddenAccessException(Status.FORBIDDEN,
Translator.toLocale(GepafinConstant.PERMISSION_DENIED));
}
}
} }

View File

@@ -6,9 +6,7 @@ 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.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
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;
@@ -66,7 +64,8 @@ public interface AssignedApplicationsApi {
@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) })) })
@GetMapping(value = "", produces = "application/json") @GetMapping(value = "", produces = "application/json")
ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(@Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId); ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(HttpServletRequest request,
@Parameter(description = "The User ID", required = false) @RequestParam(value = "userId",required = false) Long userId);
@Operation(summary = "Api to update assigned application", @Operation(summary = "Api to update assigned application",
responses = { responses = {
@@ -94,7 +93,9 @@ public interface AssignedApplicationsApi {
@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) })) })
@GetMapping(value = "/{id}", produces = "application/json") @GetMapping(value = "/{id}", produces = "application/json")
ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(@Parameter(description = "The assigned application id", required = true) @PathVariable(value = "id", required = true) Long id); ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(HttpServletRequest request,
@Parameter(description = "The assigned application id", required = true) @PathVariable(value = "id", required = true) Long id);

View File

@@ -43,9 +43,9 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
} }
@Override @Override
public ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(Long userId) { public ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(HttpServletRequest request, Long userId) {
log.info("Get All Assigned Applications"); log.info("Get All Assigned Applications");
List<AssignedApplicationsResponse> applications = assignedApplicationsService.getAllAssignedApplications(userId); List<AssignedApplicationsResponse> applications = assignedApplicationsService.getAllAssignedApplications(request, userId);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); .body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG)));
} }
@@ -59,9 +59,9 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
} }
@Override @Override
public ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(Long id) { public ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(HttpServletRequest request, Long id) {
log.info("Get Assigned Applications By Id"); log.info("Get Assigned Applications By Id");
AssignedApplicationsResponse application = assignedApplicationsService.getAssignedApplicationById(id); AssignedApplicationsResponse application = assignedApplicationsService.getAssignedApplicationById(request, id);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG)));
} }