diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/repository/SubmissionRepository.java b/src/main/java/gov/cabinetoffice/gap/applybackend/repository/SubmissionRepository.java index 70be66f9..fa6e6a32 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/repository/SubmissionRepository.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/repository/SubmissionRepository.java @@ -10,5 +10,5 @@ public interface SubmissionRepository extends JpaRepository { List findByApplicantId(long applicantId); - Optional findByIdAndApplicantUserId(UUID id, UUID userId); + Optional findByIdAndApplicantUserId(UUID id, String userId); } diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java b/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java index a4b6a82e..bdb525ec 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/service/SubmissionService.java @@ -55,7 +55,7 @@ public class SubmissionService { private final Clock clock; private final EnvironmentProperties envProperties; - public Submission getSubmissionFromDatabaseBySubmissionId(final UUID userId, final UUID submissionId) { + public Submission getSubmissionFromDatabaseBySubmissionId(final String userId, final UUID submissionId) { Submission submission = submissionRepository .findByIdAndApplicantUserId(submissionId, userId) .orElseThrow(() -> new NotFoundException( @@ -65,7 +65,7 @@ public Submission getSubmissionFromDatabaseBySubmissionId(final UUID userId, fin return submission; } - public SubmissionSection getSectionBySectionId(final UUID userId, final UUID submissionId, String sectionId) { + public SubmissionSection getSectionBySectionId(final String userId, final UUID submissionId, String sectionId) { return submissionRepository .findByIdAndApplicantUserId(submissionId, userId) .orElseThrow(() -> new NotFoundException( @@ -78,7 +78,7 @@ public SubmissionSection getSectionBySectionId(final UUID userId, final UUID sub String.format("No Section with ID %s was found", sectionId))); } - public SubmissionQuestion getQuestionByQuestionId(final UUID userId, final UUID submissionId, String questionId) { + public SubmissionQuestion getQuestionByQuestionId(final String userId, final UUID submissionId, String questionId) { return this.getSubmissionFromDatabaseBySubmissionId(userId, submissionId) .getDefinition() .getSections() @@ -94,7 +94,7 @@ public Submission saveSubmission(final Submission submission) { return this.submissionRepository.save(submission); } - public void saveQuestionResponse(final CreateQuestionResponseDto questionResponse, final UUID userId, final UUID submissionId, final String sectionId) { + public void saveQuestionResponse(final CreateQuestionResponseDto questionResponse, final String userId, final UUID submissionId, final String sectionId) { final Submission submission = this.getSubmissionFromDatabaseBySubmissionId(userId, submissionId); final SubmissionSection submissionSection = submission.getDefinition() @@ -139,7 +139,7 @@ public void saveQuestionResponse(final CreateQuestionResponseDto questionRespons submissionRepository.save(submission); } - public GetNavigationParamsDto getNextNavigation(final UUID userId, final UUID submissionId, final String sectionId, final String questionId, final boolean saveAndExit) { + public GetNavigationParamsDto getNextNavigation(final String userId, final UUID submissionId, final String sectionId, final String questionId, final boolean saveAndExit) { final SubmissionSection section = this.getSectionBySectionId(userId, submissionId, sectionId); final Map nextNavigation = this.buildNextNavigationMap(section, questionId, saveAndExit); @@ -178,7 +178,7 @@ private Optional getNextQuestionIdInSection(SubmissionSection section, S return nextQuestionId; } - public boolean isSubmissionReadyToBeSubmitted(final UUID userId, final UUID submissionId) { + public boolean isSubmissionReadyToBeSubmitted(final String userId, final UUID submissionId) { final Submission submission = getSubmissionFromDatabaseBySubmissionId(userId, submissionId); GrantApplication grantApplication = submission.getApplication(); if (!grantApplication.getApplicationStatus().equals(GrantApplicantStatus.PUBLISHED)) { @@ -204,7 +204,7 @@ public boolean isSubmissionReadyToBeSubmitted(final UUID userId, final UUID subm } @Transactional - public void submit(final Submission submission, final UUID userId, final String emailAddress) { + public void submit(final Submission submission, final String userId, final String emailAddress) { if (!isSubmissionReadyToBeSubmitted(userId, submission.getId())) { throw new SubmissionNotReadyException(String @@ -349,7 +349,7 @@ private boolean containsLocation(String[] locations, String locationToFind) { return Arrays.asList(locations).contains(locationToFind); } - public boolean hasSubmissionBeenSubmitted(final UUID userId, final UUID submissionId) { + public boolean hasSubmissionBeenSubmitted(final String userId, final UUID submissionId) { return !this.getSubmissionFromDatabaseBySubmissionId(userId, submissionId) .getStatus().equals(SubmissionStatus.IN_PROGRESS); } @@ -362,7 +362,7 @@ public boolean doesSubmissionExist(GrantApplicant grantApplicant, GrantApplicati } - public CreateSubmissionResponseDto createSubmissionFromApplication(final UUID userId, + public CreateSubmissionResponseDto createSubmissionFromApplication(final String userId, final GrantApplicant grantApplicant, final GrantApplication grantApplication) throws JsonProcessingException { final GrantScheme grantScheme = grantApplication.getGrantScheme(); @@ -399,7 +399,7 @@ public CreateSubmissionResponseDto createSubmissionFromApplication(final UUID us return submissionResponseDto; } - private void populateEssentialInformation(final UUID userId, final Submission submission) { + private void populateEssentialInformation(final String userId, final Submission submission) { GrantApplicantOrganisationProfile grantApplicantOrgProfile = submission.getApplicant().getOrganisationProfile(); if (grantApplicantOrgProfile != null) { @@ -428,7 +428,7 @@ private void populateEssentialInformation(final UUID userId, final Submission su } } - public void deleteQuestionResponse(final UUID userId, final UUID submissionId, final String questionId) { + public void deleteQuestionResponse(final String userId, final UUID submissionId, final String questionId) { final Submission submission = this.getSubmissionFromDatabaseBySubmissionId(userId, submissionId); submission.getDefinition() .getSections() @@ -468,7 +468,7 @@ private void getMultiResponseForEssentialInfo(SubmissionQuestion question, Submi } - public SubmissionSectionStatus handleSectionReview(final UUID userId, + public SubmissionSectionStatus handleSectionReview(final String userId, final UUID submissionId, final String sectionId, final boolean isComplete) { diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/utils/SecurityContextHelper.java b/src/main/java/gov/cabinetoffice/gap/applybackend/utils/SecurityContextHelper.java index 5a28574b..6b57f821 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/utils/SecurityContextHelper.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/utils/SecurityContextHelper.java @@ -6,8 +6,8 @@ import java.util.UUID; public class SecurityContextHelper { - public static UUID getUserIdFromSecurityContext() { + public static String getUserIdFromSecurityContext() { final JwtPayload jwtPayload = (JwtPayload) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return UUID.fromString(jwtPayload.getSub()); + return jwtPayload.getSub(); } } diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/validation/validators/QuestionResponseValidator.java b/src/main/java/gov/cabinetoffice/gap/applybackend/validation/validators/QuestionResponseValidator.java index acf0980c..90b3cda7 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/validation/validators/QuestionResponseValidator.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/validation/validators/QuestionResponseValidator.java @@ -22,6 +22,8 @@ import java.util.UUID; import java.util.stream.Stream; +import static gov.cabinetoffice.gap.applybackend.utils.SecurityContextHelper.getUserIdFromSecurityContext; + @RequiredArgsConstructor public class QuestionResponseValidator implements ConstraintValidator { @@ -61,8 +63,7 @@ private SubmissionQuestion getQuestionFromDatabase(CreateQuestionResponseDto sub throw new IllegalArgumentException("Question ID must not be null."); } - final JwtPayload jwtPayload = (JwtPayload) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - final UUID applicantId = UUID.fromString(jwtPayload.getSub()); + final String applicantId = getUserIdFromSecurityContext(); return submissionService.getQuestionByQuestionId(applicantId, submittedQuestion.getSubmissionId(), submittedQuestion.getQuestionId()); } diff --git a/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java b/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java index 22289561..8fde8378 100644 --- a/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java +++ b/src/main/java/gov/cabinetoffice/gap/applybackend/web/SubmissionController.java @@ -44,7 +44,7 @@ public class SubmissionController { @GetMapping public ResponseEntity> getSubmissions() { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); GrantApplicant applicant = grantApplicantService.getApplicantById((applicantId)); return ResponseEntity.ok(applicant.getSubmissions().stream() .map(this::buildSubmissionDto) @@ -54,19 +54,19 @@ public ResponseEntity> getSubmissions() { @GetMapping("/{submissionId}") public ResponseEntity getSubmission(@PathVariable final UUID submissionId) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); return ResponseEntity.ok(buildSubmissionDto(submissionService.getSubmissionFromDatabaseBySubmissionId(applicantId, submissionId))); } @GetMapping("/{submissionId}/sections/{sectionId}") public ResponseEntity getSection(@PathVariable final UUID submissionId, @PathVariable final String sectionId) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); return ResponseEntity.ok(submissionService.getSectionBySectionId(applicantId, submissionId, sectionId)); } @PostMapping("/{submissionId}/sections/{sectionId}/review") public ResponseEntity postSectionReview(@PathVariable final UUID submissionId, @PathVariable final String sectionId, final @RequestBody @Valid SubmissionReviewBodyDto body) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); final SubmissionSectionStatus sectionStatus = submissionService.handleSectionReview(applicantId, submissionId, sectionId, body.getIsComplete()); return ResponseEntity.ok(String.format("Section with ID %s status has been updated to %s.", sectionId, sectionStatus.toString())); } @@ -77,8 +77,7 @@ public ResponseEntity getQuestion( @PathVariable final UUID submissionId, @PathVariable final String sectionId, @PathVariable final String questionId) { - - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); Submission submission = submissionService.getSubmissionFromDatabaseBySubmissionId(applicantId, submissionId); SubmissionSection section = submission @@ -156,27 +155,27 @@ public ResponseEntity save(@PathVariable final UUID subm @PathVariable final String sectionId, @PathVariable final String questionId, @Valid @RequestBody CreateQuestionResponseDto questionResponse) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); submissionService.saveQuestionResponse(questionResponse, applicantId, submissionId, sectionId); return ResponseEntity.ok(submissionService.getNextNavigation(applicantId, submissionId, sectionId, questionId, false)); } @GetMapping("/{submissionId}/ready") public ResponseEntity isSubmissionReadyToBeSubmitted(@PathVariable final UUID submissionId) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); return ResponseEntity.ok(submissionService.isSubmissionReadyToBeSubmitted(applicantId, submissionId)); } @GetMapping("/{submissionId}/isSubmitted") public ResponseEntity isSubmissionSubmitted(@PathVariable final UUID submissionId) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); return ResponseEntity.ok(submissionService.hasSubmissionBeenSubmitted(applicantId, submissionId)); } @PostMapping("/submit") public ResponseEntity submitApplication(@RequestBody SubmitApplicationDto applicationSubmission) { final JwtPayload jwtPayload = (JwtPayload) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); final Submission submission = submissionService.getSubmissionFromDatabaseBySubmissionId(applicantId, applicationSubmission.getSubmissionId()); submissionService.submit(submission, applicantId, jwtPayload.getEmail()); @@ -185,7 +184,7 @@ public ResponseEntity submitApplication(@RequestBody SubmitApplicationDt @PostMapping("/createSubmission/{applicationId}") public ResponseEntity createApplication(@PathVariable final int applicationId) throws JsonProcessingException { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); final boolean isGrantApplicationPublished = grantApplicationService.isGrantApplicationPublished(applicationId); if (!isGrantApplicationPublished) { logger.debug("Grant Application {} is not been published yet.", applicationId); @@ -210,7 +209,7 @@ public ResponseEntity updateAttachment(@PathVariable final UUID submissi @PathVariable final String questionId, @RequestBody final UpdateAttachmentDto updateDetails, @RequestHeader(HttpHeaders.AUTHORIZATION) final String authHeader) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); secretAuthService.authenticateSecret(authHeader); @@ -234,7 +233,7 @@ public ResponseEntity postAttachment(@PathVariable final @PathVariable final String sectionId, @PathVariable final String questionId, @RequestBody final MultipartFile attachment) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); final GrantApplicant applicant = grantApplicantService.getApplicantFromPrincipal(); final Submission submission = submissionService.getSubmissionFromDatabaseBySubmissionId(applicantId, submissionId); final GrantApplication application = submission.getApplication(); @@ -286,7 +285,7 @@ public ResponseEntity removeAttachment(@PathVariable fin @PathVariable final String sectionId, @PathVariable final String questionId, @PathVariable final UUID attachmentId) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); final Submission submission = submissionService.getSubmissionFromDatabaseBySubmissionId(applicantId, submissionId); final int applicationId = submission.getApplication().getId(); @@ -311,7 +310,7 @@ public ResponseEntity getNextNavigationForQuestion(@Path @PathVariable final String sectionId, @PathVariable final String questionId, @RequestParam(required = false, defaultValue = "false") final boolean saveAndExit) { - final UUID applicantId = getUserIdFromSecurityContext(); + final String applicantId = getUserIdFromSecurityContext(); return ResponseEntity.ok(submissionService.getNextNavigation(applicantId, submissionId, sectionId, questionId, saveAndExit)); } } diff --git a/src/test/java/gov/cabinetoffice/gap/applybackend/validation/annotations/QuestionResponseValidatorTest.java b/src/test/java/gov/cabinetoffice/gap/applybackend/validation/annotations/QuestionResponseValidatorTest.java index c47da988..412f94dc 100644 --- a/src/test/java/gov/cabinetoffice/gap/applybackend/validation/annotations/QuestionResponseValidatorTest.java +++ b/src/test/java/gov/cabinetoffice/gap/applybackend/validation/annotations/QuestionResponseValidatorTest.java @@ -51,7 +51,7 @@ class QuestionResponseValidatorTest { static final String questionId = "1"; static final UUID submissionId = UUID.fromString("3a6cfe2d-bf58-440d-9e07-3579c7dcf205"); - private final UUID USER_ID = UUID.randomUUID(); + private final String USER_ID = String.valueOf(UUID.randomUUID()); @BeforeEach void setup() { diff --git a/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java b/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java index 7599618d..35ad5784 100644 --- a/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java +++ b/src/test/java/gov/cabinetoffice/gap/applybackend/web/SubmissionControllerTest.java @@ -162,7 +162,7 @@ class SubmissionControllerTest { .postcode("G2 1QQ") .county("Renfrewshire") .build(); - private final UUID APPLICANT_USER_ID = UUID.fromString("75ab5fbd-0682-4d3d-a467-01c7a447f07c"); + private final String APPLICANT_USER_ID ="75ab5fbd-0682-4d3d-a467-01c7a447f07c"; final GrantApplicant grantApplicant = GrantApplicant.builder() .id(APPLICANT_ID) .userId(APPLICANT_USER_ID) @@ -483,8 +483,8 @@ void createApplication() throws JsonProcessingException { .build(); when(securityContext.getAuthentication()).thenReturn(authentication); SecurityContextHolder.setContext(securityContext); - JwtPayload jwtPayload = JwtPayload.builder().sub(APPLICANT_USER_ID.toString()).build(); - final UUID applicantId = UUID.fromString(jwtPayload.getSub()); + JwtPayload jwtPayload = JwtPayload.builder().sub(APPLICANT_USER_ID).build(); + final String applicantId = jwtPayload.getSub(); final GrantApplicant grantApplicant = GrantApplicant.builder().userId(applicantId).build(); when(SecurityContextHolder.getContext().getAuthentication().getPrincipal()).thenReturn(jwtPayload);