diff --git a/src/main/java/com/provedcode/talent/controller/TalentProofController.java b/src/main/java/com/provedcode/talent/controller/TalentProofController.java index 7d8d8ee..8fc91ee 100644 --- a/src/main/java/com/provedcode/talent/controller/TalentProofController.java +++ b/src/main/java/com/provedcode/talent/controller/TalentProofController.java @@ -12,9 +12,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.*; import java.util.Optional; @@ -58,4 +55,12 @@ FullProofDTO getTalentInformationWithProofs(Authentication authentication, @RequestParam(value = "sort", defaultValue = "created") String... sort) { return talentProofService.getTalentProofs(talentId, page, size, direction, authentication, sort); } + + @PreAuthorize("hasRole('TALENT')") + @GetMapping("/{talent-id}/proofs/{proof-id}") + ProofDTO getTalentProof(@PathVariable(value = "talent-id") long talentId, + @PathVariable(value = "proof-id") long proofId, + Authentication authentication) { + return talentProofService.getTalentProof(talentId, proofId, authentication); + } } diff --git a/src/main/java/com/provedcode/talent/model/dto/ProofDTO.java b/src/main/java/com/provedcode/talent/model/dto/ProofDTO.java index b88739a..e5036cf 100644 --- a/src/main/java/com/provedcode/talent/model/dto/ProofDTO.java +++ b/src/main/java/com/provedcode/talent/model/dto/ProofDTO.java @@ -3,9 +3,6 @@ import com.provedcode.talent.model.ProofStatus; import lombok.Builder; -import java.time.LocalDateTime; -import java.util.Date; - @Builder public record ProofDTO( long id, diff --git a/src/main/java/com/provedcode/talent/service/TalentProofService.java b/src/main/java/com/provedcode/talent/service/TalentProofService.java index 772133b..24de23c 100644 --- a/src/main/java/com/provedcode/talent/service/TalentProofService.java +++ b/src/main/java/com/provedcode/talent/service/TalentProofService.java @@ -12,7 +12,7 @@ import com.provedcode.user.model.dto.SessionInfoDTO; import com.provedcode.user.model.entity.UserInfo; import com.provedcode.user.repo.UserInfoRepository; -import com.provedcode.utill.ValidateTalentForCompliance; +import com.provedcode.talent.utill.ValidateTalentForCompliance; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -30,8 +30,7 @@ import java.time.LocalDateTime; import java.util.Optional; -import static org.springframework.http.HttpStatus.BAD_REQUEST; -import static org.springframework.http.HttpStatus.NOT_IMPLEMENTED; +import static org.springframework.http.HttpStatus.*; @Service @AllArgsConstructor @@ -54,25 +53,25 @@ public Page getAllProofsPage(Optional page, Optional addProof(AddProofDTO addProofDTO, long talentId, Authen validateTalentForCompliance.userVerification(talent, userInfo, talentId); TalentProof talentProof = TalentProof.builder() - .talent(talent.get()) - .talentId(talentId) - .link(addProofDTO.link()) - .text(addProofDTO.text()) - .status(ProofStatus.DRAFT) - .created(LocalDateTime.now()) - .build(); + .talent(talent.get()) + .talentId(talentId) + .link(addProofDTO.link()) + .text(addProofDTO.text()) + .status(ProofStatus.DRAFT) + .created(LocalDateTime.now()) + .build(); talentProofRepository.save(talentProof); @@ -117,13 +116,13 @@ public FullProofDTO getTalentProofs(Long talentId, Optional page, Optio Optional direction, Authentication authentication, String... sortProperties) { Talent talent = talentRepository.findById(talentId) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, - "Talent with id = %s not found".formatted( - talentId))); + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, + "Talent with id = %s not found".formatted( + talentId))); UserInfo userInfo = userInfoRepository.findByLogin(authentication.getName()) - .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, - "Talent with id = %s not found".formatted( - talentId))); + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, + "Talent with id = %s not found".formatted( + talentId))); Page proofs; PageRequest pageRequest; String sortDirection = direction.orElseGet(Sort.DEFAULT_DIRECTION::name); @@ -135,7 +134,7 @@ public FullProofDTO getTalentProofs(Long talentId, Optional page, Optio throw new ResponseStatusException(BAD_REQUEST, "'size' query parameter must be greater than or equal to 1"); } if (!sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name()) && - !sortDirection.equalsIgnoreCase(Sort.Direction.DESC.name())) { + !sortDirection.equalsIgnoreCase(Sort.Direction.DESC.name())) { throw new ResponseStatusException(BAD_REQUEST, "'direction' query param must be equals ASC or DESC"); } @@ -156,17 +155,42 @@ public FullProofDTO getTalentProofs(Long talentId, Optional page, Optio } return FullProofDTO.builder() - .id(talent.getId()) - .image(talent.getImage()) - .firstName(talent.getFirstName()) - .lastName(talent.getLastName()) - .specialization(talent.getSpecialization()) - .proofs(proofs.map(i -> ProofDTO.builder() - .id(i.getId()) - .created(i.getCreated().toString()) - .link(i.getLink()) - .text(i.getText()) - .status(i.getStatus()).build())) - .build(); + .id(talent.getId()) + .image(talent.getImage()) + .firstName(talent.getFirstName()) + .lastName(talent.getLastName()) + .specialization(talent.getSpecialization()) + .proofs(proofs.map(i -> ProofDTO.builder() + .id(i.getId()) + .created(i.getCreated().toString()) + .link(i.getLink()) + .text(i.getText()) + .status(i.getStatus()).build())) + .build(); + } + + public ProofDTO getTalentProof(long talentId, long proofId, Authentication authentication) { + Optional talentProof = talentProofRepository.findById(proofId); + if (talentProof.isPresent()) { + if (talentProof.get().getTalentId() != talentId) { + throw new ResponseStatusException(BAD_REQUEST, + String.format("proof with id = %d not equal to talent id = %d", proofId, talentId)); + } + } else { + throw new ResponseStatusException(NOT_FOUND, String.format("proof with id = %d not found", proofId)); + } + Optional userInfo = userInfoRepository.findByLogin(authentication.getName()); + if (userInfo.get().getTalentId() == talentId || + talentProof.get().getStatus().equals(ProofStatus.PUBLISHED)) { + return ProofDTO.builder() + .id(talentProof.get().getTalentId()) + .link(talentProof.get().getLink()) + .status(talentProof.get().getStatus()) + .created(talentProof.get().getCreated().toString()) + .text(talentProof.get().getText()) + .build(); + } else { + throw new ResponseStatusException(FORBIDDEN); + } } } \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java b/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java index d472df5..92c341f 100644 --- a/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java +++ b/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java @@ -8,7 +8,7 @@ import com.provedcode.user.model.dto.SessionInfoDTO; import com.provedcode.user.model.entity.UserInfo; import com.provedcode.user.repo.UserInfoRepository; -import com.provedcode.utill.ValidateTalentForCompliance; +import com.provedcode.talent.utill.ValidateTalentForCompliance; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/provedcode/utill/ValidateTalentForCompliance.java b/src/main/java/com/provedcode/talent/utill/ValidateTalentForCompliance.java similarity index 93% rename from src/main/java/com/provedcode/utill/ValidateTalentForCompliance.java rename to src/main/java/com/provedcode/talent/utill/ValidateTalentForCompliance.java index b6103e0..3f2d486 100644 --- a/src/main/java/com/provedcode/utill/ValidateTalentForCompliance.java +++ b/src/main/java/com/provedcode/talent/utill/ValidateTalentForCompliance.java @@ -1,4 +1,4 @@ -package com.provedcode.utill; +package com.provedcode.talent.utill; import com.provedcode.talent.model.entity.Talent; import com.provedcode.talent.model.entity.TalentProof; @@ -19,7 +19,7 @@ public void userVerification(Optional talent, Optional userInf throw new ResponseStatusException(NOT_FOUND, String.format("talent with id = %d not found", id)); } if (userInfo.get().getTalent().getId() != id) { - throw new ResponseStatusException(FORBIDDEN, "you can`t add proof another user"); + throw new ResponseStatusException(FORBIDDEN); } }