From 14fabda184fb45f0bdd5be34360f1c1b6af7cfd4 Mon Sep 17 00:00:00 2001 From: Maslyna Date: Fri, 5 May 2023 21:44:24 +0200 Subject: [PATCH 1/4] AWS update --- src/main/java/com/provedcode/aws/service/S3Service.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/provedcode/aws/service/S3Service.java b/src/main/java/com/provedcode/aws/service/S3Service.java index 61414c9..2ec385f 100644 --- a/src/main/java/com/provedcode/aws/service/S3Service.java +++ b/src/main/java/com/provedcode/aws/service/S3Service.java @@ -125,7 +125,8 @@ private String getFullPath(String fileType, String userLogin) { } private String getFileType(MultipartFile file) { - return file.getContentType().split("/")[1]; + String fileName = file.getOriginalFilename(); + return fileName != null ? fileName.substring(fileName.lastIndexOf('.') + 1) : null; } private File convertMultiPartToFile(MultipartFile file) From 537a6587bc23861fa663f7ceb4e4a90ca0bc92e3 Mon Sep 17 00:00:00 2001 From: Maslyna Date: Fri, 5 May 2023 22:52:38 +0200 Subject: [PATCH 2/4] minore update --- .../controller/TalentSkillsController.java | 28 +++++++++ .../talent/model/dto/ProofSkillsDTO.java | 13 +++++ .../talent/repo/SkillsRepository.java | 7 +++ .../talent/service/TalentSkillsService.java | 57 +++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 src/main/java/com/provedcode/talent/controller/TalentSkillsController.java create mode 100644 src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java create mode 100644 src/main/java/com/provedcode/talent/repo/SkillsRepository.java create mode 100644 src/main/java/com/provedcode/talent/service/TalentSkillsService.java diff --git a/src/main/java/com/provedcode/talent/controller/TalentSkillsController.java b/src/main/java/com/provedcode/talent/controller/TalentSkillsController.java new file mode 100644 index 0000000..35d9acb --- /dev/null +++ b/src/main/java/com/provedcode/talent/controller/TalentSkillsController.java @@ -0,0 +1,28 @@ +package com.provedcode.talent.controller; + +import com.provedcode.talent.model.dto.ProofSkillsDTO; +import com.provedcode.talent.service.TalentSkillsService; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@Validated +@AllArgsConstructor + +@RestController +@RequestMapping("/api/v4/talents") +public class TalentSkillsController { + TalentSkillsService talentSkillsService; + + @PostMapping("/{talent-id}/proofs/{proof-id}/skills") + void addSkillOnProof(@PathVariable("talent-id") long talentId, + @PathVariable("proof-id") long proofId, + @RequestBody @Valid ProofSkillsDTO skills, + Authentication authentication) { + talentSkillsService.addSkillsOnProof(talentId, proofId, skills, authentication); + } +} diff --git a/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java b/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java new file mode 100644 index 0000000..7f03b7b --- /dev/null +++ b/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java @@ -0,0 +1,13 @@ +package com.provedcode.talent.model.dto; + +import jakarta.validation.constraints.Positive; +import lombok.Builder; + +import java.util.List; + +@Builder +public record ProofSkillsDTO( + @Positive + List skills +) { +} diff --git a/src/main/java/com/provedcode/talent/repo/SkillsRepository.java b/src/main/java/com/provedcode/talent/repo/SkillsRepository.java new file mode 100644 index 0000000..0f17989 --- /dev/null +++ b/src/main/java/com/provedcode/talent/repo/SkillsRepository.java @@ -0,0 +1,7 @@ +package com.provedcode.talent.repo; + +import com.provedcode.talent.model.entity.Skills; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SkillsRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/service/TalentSkillsService.java b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java new file mode 100644 index 0000000..ba92a13 --- /dev/null +++ b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java @@ -0,0 +1,57 @@ +package com.provedcode.talent.service; + +import com.provedcode.talent.model.dto.ProofSkillsDTO; +import com.provedcode.talent.model.entity.Skills; +import com.provedcode.talent.model.entity.TalentProof; +import com.provedcode.talent.repo.SkillsRepository; +import com.provedcode.talent.repo.TalentProofRepository; +import com.provedcode.talent.repo.TalentRepository; +import com.provedcode.user.model.entity.UserInfo; +import com.provedcode.user.repo.UserInfoRepository; +import lombok.AllArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.server.ResponseStatusException; + +import java.util.HashSet; +import java.util.Set; +import java.util.function.BiConsumer; + +import static org.springframework.http.HttpStatus.CONFLICT; +import static org.springframework.http.HttpStatus.NOT_FOUND; + +@Transactional +@Service +@AllArgsConstructor +public class TalentSkillsService { + SkillsRepository skillsRepository; + TalentRepository talentRepository; + UserInfoRepository userInfoRepository; + + static BiConsumer isValidUserEditTalent = (talentId, userInfo) -> { + if (!userInfo.getTalent().getId().equals(talentId)) { + throw new ResponseStatusException(CONFLICT, "you can`t change another talent"); + } + }; + private final TalentProofRepository talentProofRepository; + + public void addSkillsOnProof(long talentId, long proofId, ProofSkillsDTO skills, Authentication authentication) { + if (talentRepository.existsById(talentId)) { + throw new ResponseStatusException(NOT_FOUND, "talent with id = %s not found".formatted(talentId)); + } + UserInfo userInfo = userInfoRepository.findByLogin(authentication.getName()) + .orElseThrow(() -> new ResponseStatusException(NOT_FOUND)); + TalentProof talentProof = talentProofRepository.findById(proofId) + .orElseThrow(() -> new ResponseStatusException(NOT_FOUND, "proof with id = %s not found".formatted(proofId))); + + isValidUserEditTalent.accept(talentId, userInfo); + + Set skillsSet = new HashSet<>(skillsRepository.findAllById(skills.skills())); + + talentProof.getSkillses().addAll(skillsSet); + talentProofRepository.save(talentProof); + } + + +} From 411d4f78f1213507f6a2c0ed61df61818ddfd1f5 Mon Sep 17 00:00:00 2001 From: Maslyna Date: Fri, 5 May 2023 23:17:48 +0200 Subject: [PATCH 3/4] US1T3 FINISHED! --- .../com/provedcode/talent/model/dto/ProofSkillsDTO.java | 4 ++-- .../java/com/provedcode/talent/model/entity/Skills.java | 2 +- .../com/provedcode/talent/model/entity/TalentProof.java | 4 ++-- .../provedcode/talent/service/TalentSkillsService.java | 8 ++++++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java b/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java index 7f03b7b..d65e05e 100644 --- a/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java +++ b/src/main/java/com/provedcode/talent/model/dto/ProofSkillsDTO.java @@ -1,13 +1,13 @@ package com.provedcode.talent.model.dto; -import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.NotEmpty; import lombok.Builder; import java.util.List; @Builder public record ProofSkillsDTO( - @Positive + @NotEmpty List skills ) { } diff --git a/src/main/java/com/provedcode/talent/model/entity/Skills.java b/src/main/java/com/provedcode/talent/model/entity/Skills.java index 009d911..2bc6d0f 100644 --- a/src/main/java/com/provedcode/talent/model/entity/Skills.java +++ b/src/main/java/com/provedcode/talent/model/entity/Skills.java @@ -10,7 +10,7 @@ @Getter @Setter @Entity -@Table(name = "skills") +@Table(name = "skill") public class Skills { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentProof.java b/src/main/java/com/provedcode/talent/model/entity/TalentProof.java index b04ca20..549dbea 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentProof.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentProof.java @@ -44,8 +44,8 @@ public class TalentProof { @OneToMany(fetch = FetchType.EAGER, mappedBy = "proof", cascade = CascadeType.ALL, orphanRemoval = true) private List kudos; @ManyToMany - @JoinTable(name = "talent_skills", + @JoinTable(name = "talent_skill", joinColumns = @JoinColumn(name = "proof_id"), inverseJoinColumns = @JoinColumn(name = "skill_id")) - private Set skillses = new LinkedHashSet<>(); + private Set skills = new LinkedHashSet<>(); } \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/service/TalentSkillsService.java b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java index ba92a13..a5885f4 100644 --- a/src/main/java/com/provedcode/talent/service/TalentSkillsService.java +++ b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java @@ -1,5 +1,6 @@ package com.provedcode.talent.service; +import com.provedcode.talent.model.ProofStatus; import com.provedcode.talent.model.dto.ProofSkillsDTO; import com.provedcode.talent.model.entity.Skills; import com.provedcode.talent.model.entity.TalentProof; @@ -37,19 +38,22 @@ public class TalentSkillsService { private final TalentProofRepository talentProofRepository; public void addSkillsOnProof(long talentId, long proofId, ProofSkillsDTO skills, Authentication authentication) { - if (talentRepository.existsById(talentId)) { + if (!talentRepository.existsById(talentId)) { throw new ResponseStatusException(NOT_FOUND, "talent with id = %s not found".formatted(talentId)); } UserInfo userInfo = userInfoRepository.findByLogin(authentication.getName()) .orElseThrow(() -> new ResponseStatusException(NOT_FOUND)); TalentProof talentProof = talentProofRepository.findById(proofId) .orElseThrow(() -> new ResponseStatusException(NOT_FOUND, "proof with id = %s not found".formatted(proofId))); + if (!talentProof.getStatus().equals(ProofStatus.DRAFT)) { + throw new ResponseStatusException(CONFLICT, "proof status must be DRAFT"); + } isValidUserEditTalent.accept(talentId, userInfo); Set skillsSet = new HashSet<>(skillsRepository.findAllById(skills.skills())); - talentProof.getSkillses().addAll(skillsSet); + talentProof.getSkills().addAll(skillsSet); talentProofRepository.save(talentProof); } From 5f5ea545f21939782c900ee32c978518e6160ad8 Mon Sep 17 00:00:00 2001 From: Maslyna Date: Fri, 5 May 2023 23:25:18 +0200 Subject: [PATCH 4/4] bugfix --- .../provedcode/talent/service/TalentSkillsService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/provedcode/talent/service/TalentSkillsService.java b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java index a5885f4..7fdd351 100644 --- a/src/main/java/com/provedcode/talent/service/TalentSkillsService.java +++ b/src/main/java/com/provedcode/talent/service/TalentSkillsService.java @@ -16,11 +16,11 @@ import org.springframework.web.server.ResponseStatusException; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.function.BiConsumer; -import static org.springframework.http.HttpStatus.CONFLICT; -import static org.springframework.http.HttpStatus.NOT_FOUND; +import static org.springframework.http.HttpStatus.*; @Transactional @Service @@ -29,13 +29,13 @@ public class TalentSkillsService { SkillsRepository skillsRepository; TalentRepository talentRepository; UserInfoRepository userInfoRepository; + TalentProofRepository talentProofRepository; static BiConsumer isValidUserEditTalent = (talentId, userInfo) -> { if (!userInfo.getTalent().getId().equals(talentId)) { throw new ResponseStatusException(CONFLICT, "you can`t change another talent"); } }; - private final TalentProofRepository talentProofRepository; public void addSkillsOnProof(long talentId, long proofId, ProofSkillsDTO skills, Authentication authentication) { if (!talentRepository.existsById(talentId)) { @@ -50,6 +50,9 @@ public void addSkillsOnProof(long talentId, long proofId, ProofSkillsDTO skills, } isValidUserEditTalent.accept(talentId, userInfo); + if (skills.skills().stream().anyMatch(i -> !skillsRepository.existsById(i))) { + throw new ResponseStatusException(BAD_REQUEST, "no such skill with id"); + } Set skillsSet = new HashSet<>(skillsRepository.findAllById(skills.skills()));