diff --git a/src/main/java/com/provedcode/annotations/UrlList.java b/src/main/java/com/provedcode/annotations/UrlList.java new file mode 100644 index 0000000..6a792bc --- /dev/null +++ b/src/main/java/com/provedcode/annotations/UrlList.java @@ -0,0 +1,21 @@ +package com.provedcode.annotations; + +import com.provedcode.annotations.impl.UrlListValidator; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = UrlListValidator.class) +public @interface UrlList { + String message() default "The list should contain only URLs"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} \ No newline at end of file diff --git a/src/main/java/com/provedcode/annotations/impl/UrlListValidator.java b/src/main/java/com/provedcode/annotations/impl/UrlListValidator.java new file mode 100644 index 0000000..ac473d7 --- /dev/null +++ b/src/main/java/com/provedcode/annotations/impl/UrlListValidator.java @@ -0,0 +1,32 @@ +package com.provedcode.annotations.impl; + +import com.provedcode.annotations.UrlList; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + +import java.net.URL; +import java.util.List; + +public class UrlListValidator implements ConstraintValidator> { + @Override + public boolean isValid(List value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + for (String url : value) { + if (!isUrl(url)) { + return false; + } + } + return true; + } + + private boolean isUrl(String url) { + try { + new URL(url).toURI(); + return true; + } catch (Exception e) { + return false; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/TalentController.java b/src/main/java/com/provedcode/talent/TalentController.java index a372bdb..b1e5f8d 100644 --- a/src/main/java/com/provedcode/talent/TalentController.java +++ b/src/main/java/com/provedcode/talent/TalentController.java @@ -3,11 +3,14 @@ import com.provedcode.talent.model.dto.FullTalentDTO; import com.provedcode.talent.model.dto.ShortTalentDTO; import com.provedcode.talent.service.TalentService; +import com.provedcode.user.model.dto.SessionInfoDTO; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; import java.util.Optional; @@ -15,7 +18,8 @@ @Slf4j @RestController @AllArgsConstructor -@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}) +@CrossOrigin(origins = "*", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, + RequestMethod.DELETE}) @RequestMapping("/api") public class TalentController { TalentService talentService; @@ -33,4 +37,18 @@ Page getTalents(@RequestParam(value = "page") Optional return talentService.getTalentsPage(page, size); } + @PreAuthorize("hasRole('TALENT')") + @PatchMapping("/talents/{talent-id}") + FullTalentDTO editTalent(@PathVariable("talent-id") long id, + @RequestBody @Valid FullTalentDTO fullTalent, + Authentication authentication) { + return talentService.editTalent(id, fullTalent, authentication); + } + + @PreAuthorize("hasRole('TALENT')") + @DeleteMapping("/talents/{id}") + SessionInfoDTO deleteTalent(@PathVariable("id") long id, Authentication authentication) { + return talentService.deleteTalentById(id, authentication); + } + } diff --git a/src/main/java/com/provedcode/talent/model/dto/FullTalentDTO.java b/src/main/java/com/provedcode/talent/model/dto/FullTalentDTO.java index 4bd9394..dc5d09b 100644 --- a/src/main/java/com/provedcode/talent/model/dto/FullTalentDTO.java +++ b/src/main/java/com/provedcode/talent/model/dto/FullTalentDTO.java @@ -1,20 +1,35 @@ package com.provedcode.talent.model.dto; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.provedcode.annotations.UrlList; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Builder; +import org.hibernate.validator.constraints.URL; import java.util.List; @Builder -public record FullTalentDTO ( - Long id, - String firstName, - String lastName, - String image, - String specialization, - String additionalInfo, - String bio, - List skills, - List links, - List contacts, - List attachedFiles -) {} +public record FullTalentDTO( + Long id, + @NotEmpty + @JsonProperty("first_name") + String firstName, + @NotEmpty + @JsonProperty("last_name") + String lastName, + String image, + @NotEmpty + String specialization, + @JsonProperty("additional_info") + String additionalInfo, + String bio, + List skills, + @UrlList + List links, + List contacts, + @UrlList + @JsonProperty("attached_files") + List attachedFiles +) { +} diff --git a/src/main/java/com/provedcode/talent/model/entity/Talent.java b/src/main/java/com/provedcode/talent/model/entity/Talent.java index 232de47..a8cc0df 100644 --- a/src/main/java/com/provedcode/talent/model/entity/Talent.java +++ b/src/main/java/com/provedcode/talent/model/entity/Talent.java @@ -4,12 +4,14 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.*; +import lombok.experimental.Accessors; import org.hibernate.validator.constraints.URL; import java.util.ArrayList; import java.util.List; @Builder +@Accessors(chain = true) @AllArgsConstructor @NoArgsConstructor @Getter @@ -22,28 +24,33 @@ public class Talent { @Column(nullable = false, insertable = false, updatable = false) private Long id; @NotEmpty - @NotNull @Column(name = "first_name", length = 20) private String firstName; @NotEmpty - @NotNull @Column(name = "last_name", length = 20) private String lastName; @NotEmpty - @NotNull @Column(name = "specialization", length = 30) private String specialization; @URL @Column(name = "image", length = 100) private String image; - @OneToOne(mappedBy = "talent", orphanRemoval = true) + @OneToOne(mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true) private TalentDescription talentDescription; - @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true) private List talentLinks = new ArrayList<>(); - @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true) private List talentSkills = new ArrayList<>(); - @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true) private List talentContacts = new ArrayList<>(); - @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", orphanRemoval = true) + @OneToMany(fetch = FetchType.EAGER, mappedBy = "talent", cascade = CascadeType.ALL, orphanRemoval = true) private List talentAttachedFiles = new ArrayList<>(); + + public void addTalentSkill(TalentSkill talentSkill) { + talentSkills.add(talentSkill); + } + + public void removeTalentSkill(TalentSkill talentSkill) { + talentSkills.remove(talentSkill); + } } \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentAttachedFile.java b/src/main/java/com/provedcode/talent/model/entity/TalentAttachedFile.java index d0eada0..36e2e04 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentAttachedFile.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentAttachedFile.java @@ -2,10 +2,11 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; +import lombok.*; import org.hibernate.validator.constraints.URL; - +@NoArgsConstructor +@AllArgsConstructor +@Builder @Getter @Setter @Entity diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentContact.java b/src/main/java/com/provedcode/talent/model/entity/TalentContact.java index 78bc1e8..83858f4 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentContact.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentContact.java @@ -2,9 +2,11 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; +import lombok.*; +@NoArgsConstructor +@AllArgsConstructor +@Builder @Getter @Setter @Entity diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentDescription.java b/src/main/java/com/provedcode/talent/model/entity/TalentDescription.java index ff48a7c..dbf4188 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentDescription.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentDescription.java @@ -3,8 +3,10 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; +import lombok.experimental.Accessors; @Builder +@Accessors(chain = true) @AllArgsConstructor @NoArgsConstructor @Getter diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentLink.java b/src/main/java/com/provedcode/talent/model/entity/TalentLink.java index 8ff7d7c..a567f5e 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentLink.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentLink.java @@ -2,10 +2,11 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; +import lombok.*; import org.hibernate.validator.constraints.URL; - +@NoArgsConstructor +@AllArgsConstructor +@Builder @Getter @Setter @Entity diff --git a/src/main/java/com/provedcode/talent/model/entity/TalentSkill.java b/src/main/java/com/provedcode/talent/model/entity/TalentSkill.java index 4f312b1..884fb87 100644 --- a/src/main/java/com/provedcode/talent/model/entity/TalentSkill.java +++ b/src/main/java/com/provedcode/talent/model/entity/TalentSkill.java @@ -2,9 +2,11 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; +import lombok.*; +@NoArgsConstructor +@AllArgsConstructor +@Builder @Getter @Setter @Entity diff --git a/src/main/java/com/provedcode/talent/repo/TalentRepository.java b/src/main/java/com/provedcode/talent/repo/TalentRepository.java index c077eb8..57723f6 100644 --- a/src/main/java/com/provedcode/talent/repo/TalentRepository.java +++ b/src/main/java/com/provedcode/talent/repo/TalentRepository.java @@ -1,14 +1,16 @@ package com.provedcode.talent.repo; import com.provedcode.talent.model.entity.Talent; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; +import com.provedcode.talent.model.entity.TalentSkill; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; -import java.util.Optional; - -public interface TalentRepository { - - Page findAll(Pageable pageable); - - Optional findById(Long aLong); +public interface TalentRepository extends + JpaRepository { + @Transactional + @Modifying + @Query("update Talent t set t.talentSkills = ?1") + int updateTalentSkillsBy(TalentSkill talentSkills); } \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/repo/TalentSkillRepository.java b/src/main/java/com/provedcode/talent/repo/TalentSkillRepository.java new file mode 100644 index 0000000..2c0648e --- /dev/null +++ b/src/main/java/com/provedcode/talent/repo/TalentSkillRepository.java @@ -0,0 +1,11 @@ +package com.provedcode.talent.repo; + +import com.provedcode.talent.model.entity.Talent; +import com.provedcode.talent.model.entity.TalentSkill; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface TalentSkillRepository extends JpaRepository { + List deleteByTalent(Talent talent); +} \ No newline at end of file diff --git a/src/main/java/com/provedcode/talent/service/TalentService.java b/src/main/java/com/provedcode/talent/service/TalentService.java index e583ff2..838f74d 100644 --- a/src/main/java/com/provedcode/talent/service/TalentService.java +++ b/src/main/java/com/provedcode/talent/service/TalentService.java @@ -2,9 +2,10 @@ import com.provedcode.talent.model.dto.FullTalentDTO; import com.provedcode.talent.model.dto.ShortTalentDTO; +import com.provedcode.user.model.dto.SessionInfoDTO; +import org.springframework.security.core.Authentication; import org.springframework.data.domain.Page; -import java.util.List; import java.util.Optional; @@ -12,4 +13,8 @@ public interface TalentService { Page getTalentsPage(Optional page, Optional size); FullTalentDTO getTalentById(long id); + + FullTalentDTO editTalent(long id, FullTalentDTO fullTalent, Authentication authentication); + + SessionInfoDTO deleteTalentById(long id, Authentication authentication); } \ 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 eb1217d..900920f 100644 --- a/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java +++ b/src/main/java/com/provedcode/talent/service/impl/TalentServiceImpl.java @@ -4,30 +4,41 @@ import com.provedcode.talent.mapper.TalentMapper; import com.provedcode.talent.model.dto.FullTalentDTO; import com.provedcode.talent.model.dto.ShortTalentDTO; -import com.provedcode.talent.model.entity.Talent; +import com.provedcode.talent.model.entity.*; import com.provedcode.talent.repo.TalentRepository; +import com.provedcode.talent.repo.TalentSkillRepository; import com.provedcode.talent.service.TalentService; +import com.provedcode.user.model.dto.SessionInfoDTO; +import com.provedcode.user.model.entity.UserInfo; +import com.provedcode.user.repo.AuthorityRepository; +import com.provedcode.user.repo.UserInfoRepository; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +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.List; import java.util.Optional; -import static org.springframework.http.HttpStatus.BAD_REQUEST; -import static org.springframework.http.HttpStatus.NOT_FOUND; +import static org.springframework.http.HttpStatus.*; @Service @Slf4j @AllArgsConstructor @Transactional public class TalentServiceImpl implements TalentService { + private final AuthorityRepository authorityRepository; TalentMapper talentMapper; TalentRepository talentRepository; + TalentSkillRepository talentSkillRepository; + UserInfoRepository userInfoRepository; PageProperties pageProperties; + TalentRepository talentEntityRepository; + @Override @Transactional(readOnly = true) @@ -53,4 +64,103 @@ public FullTalentDTO getTalentById(long id) { } return talentMapper.talentToFullTalentDTO(talent.get()); } + + @Override + public FullTalentDTO editTalent(long id, FullTalentDTO fullTalent, Authentication authentication) { + Optional talent = talentRepository.findById(id); + Optional userInfo = userInfoRepository.findByLogin(authentication.getName()); + + if (talent.isEmpty() || userInfo.isEmpty()) { + 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 update another user"); + } + + Talent oldTalent = talent.get(); + long oldTalentId = oldTalent.getId(); + + TalentDescription oldTalentDescription = oldTalent.getTalentDescription(); + if (oldTalentDescription != null) { + oldTalentDescription + .setAdditionalInfo(fullTalent.additionalInfo()) + .setBio(fullTalent.bio()); + } else { + oldTalentDescription = TalentDescription.builder() + .talentId(oldTalentId) + .additionalInfo(fullTalent.additionalInfo()) + .bio(fullTalent.bio()) + .talent(oldTalent) + .build(); + } + + List oldTalentSkills = oldTalent.getTalentSkills(); + oldTalentSkills.clear(); + oldTalentSkills.addAll(fullTalent.skills().stream().map(s -> TalentSkill.builder() + .talentId(oldTalentId) + .talent(oldTalent) + .skill(s).build()).toList()); + + List oldTalentLinks = oldTalent.getTalentLinks(); + oldTalentLinks.clear(); + oldTalentLinks.addAll(fullTalent.links().stream().map(l -> TalentLink.builder() + .talentId(oldTalentId) + .talent(oldTalent) + .link(l).build()).toList()); + + List oldTalentContacts = oldTalent.getTalentContacts(); + oldTalentContacts.clear(); + oldTalentContacts.addAll(fullTalent.contacts().stream().map(s -> TalentContact.builder() + .talentId(oldTalentId) + .talent(oldTalent) + .contact(s).build()).toList()); + List oldTalentAttachedFile = oldTalent.getTalentAttachedFiles(); + oldTalentAttachedFile.clear(); + oldTalentAttachedFile.addAll(fullTalent.attachedFiles().stream().map(s -> TalentAttachedFile.builder() + .talentId( + oldTalentId) + .talent(oldTalent) + .attachedFile(s) + .build()).toList()); + + oldTalent.setFirstName(fullTalent.firstName()) + .setLastName(fullTalent.lastName()) + .setSpecialization(fullTalent.specialization()) + .setImage(fullTalent.image()) + .setTalentDescription(oldTalentDescription) + .setTalentSkills(oldTalentSkills) + .setTalentLinks(oldTalentLinks) + .setTalentContacts(oldTalentContacts) + .setTalentAttachedFiles(oldTalentAttachedFile); + + talentRepository.save(oldTalent); + + return talentMapper.talentToFullTalentDTO(oldTalent); + } + + @Override + public SessionInfoDTO deleteTalentById(long id, Authentication authentication) { + Optional talent = talentRepository.findById(id); + Optional userInfo = userInfoRepository.findByLogin(authentication.getName()); + + if (talent.isEmpty() || userInfo.isEmpty()) { + 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 delete another user"); + } + + userInfoRepository.delete(userInfo.get()); + talentRepository.deleteById(id); + return new SessionInfoDTO("deleted", "null"); + } + +// public void userVerification(Optional talent, Optional userInfo, long id) { +// if (talent.isEmpty()) { +// throw new ResponseStatusException(NOT_FOUND, String.format("talent with id = %d not found", id)); +// } +// if (userInfo.get().getTalent().getId() != id) { +// throw new ResponseStatusException(UNAUTHORIZED); +// } +// } } diff --git a/src/main/java/com/provedcode/talent/service/mock/TalentServiceMock.java b/src/main/java/com/provedcode/talent/service/mock/TalentServiceMock.java deleted file mode 100644 index b305f3a..0000000 --- a/src/main/java/com/provedcode/talent/service/mock/TalentServiceMock.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.provedcode.talent.service.mock; - -import com.provedcode.config.PageProperties; -import com.provedcode.talent.service.TalentService; -import com.provedcode.talent.mapper.TalentMapper; -import com.provedcode.talent.model.dto.FullTalentDTO; -import com.provedcode.talent.model.dto.ShortTalentDTO; -import com.provedcode.talent.model.entity.Talent; -import com.provedcode.talent.repo.TalentRepository; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.web.server.ResponseStatusException; - -import java.util.Optional; - -import static org.springframework.http.HttpStatus.BAD_REQUEST; -import static org.springframework.http.HttpStatus.NOT_FOUND; - -//@Service -@Slf4j -@AllArgsConstructor -public class TalentServiceMock implements TalentService { - TalentMapper talentMapper; - TalentRepository talentRepository; - PageProperties pageProperties; - - @Override - public Page getTalentsPage(Optional page, Optional size) { - if (page.orElse(pageProperties.defaultPageNum()) < 0) { - throw new ResponseStatusException(BAD_REQUEST, "'page' query parameter must be greater than or equal to 0"); - } - if (size.orElse(pageProperties.defaultPageSize()) <= 0) { - throw new ResponseStatusException(BAD_REQUEST, "'size' query parameter must be greater than or equal to 1"); - } - return new PageImpl<>(talentRepository.findAll( - PageRequest.of(page.orElse(pageProperties.defaultPageNum()), size.orElse(pageProperties.defaultPageSize()))) - .stream().map(talentMapper::talentToShortTalentDTO) - .toList()); - } - - @Override - public FullTalentDTO getTalentById(long id) { - Optional talent = talentRepository.findById(id); - if (talent.isEmpty()){ - throw new ResponseStatusException(NOT_FOUND, String.format("talent with id = %d not found", id)); - } - return talentMapper.talentToFullTalentDTO(talent.get()); - } -} \ No newline at end of file diff --git a/src/main/java/com/provedcode/user/controller/AuthenticationController.java b/src/main/java/com/provedcode/user/controller/AuthenticationController.java index 1111d1e..4bd9bd0 100644 --- a/src/main/java/com/provedcode/user/controller/AuthenticationController.java +++ b/src/main/java/com/provedcode/user/controller/AuthenticationController.java @@ -24,7 +24,7 @@ SessionInfoDTO login(Authentication authentication) { } @PostMapping("/register") - @ResponseStatus(HttpStatus.OK) + @ResponseStatus(HttpStatus.CREATED) SessionInfoDTO register(@RequestBody @Valid RegistrationDTO user) { return authenticationService.register(user); } diff --git a/src/main/java/com/provedcode/user/model/dto/RegistrationDTO.java b/src/main/java/com/provedcode/user/model/dto/RegistrationDTO.java index ae3ae5f..ed2e8bf 100644 --- a/src/main/java/com/provedcode/user/model/dto/RegistrationDTO.java +++ b/src/main/java/com/provedcode/user/model/dto/RegistrationDTO.java @@ -1,12 +1,13 @@ package com.provedcode.user.model.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotEmpty; import lombok.Builder; @Builder public record RegistrationDTO( - @NotEmpty String login, + @NotEmpty @Email String login, @NotEmpty String password, @JsonProperty("first_name") @NotEmpty diff --git a/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java b/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java index b195ccd..45fc34f 100644 --- a/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java +++ b/src/main/java/com/provedcode/user/service/impl/AuthenticationServiceImpl.java @@ -1,7 +1,7 @@ package com.provedcode.user.service.impl; import com.provedcode.talent.model.entity.Talent; -import com.provedcode.talent.repo.db.TalentEntityRepository; +import com.provedcode.talent.repo.TalentRepository; import com.provedcode.user.model.Role; import com.provedcode.user.model.dto.RegistrationDTO; import com.provedcode.user.model.dto.SessionInfoDTO; @@ -37,7 +37,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { JwtEncoder jwtEncoder; UserInfoRepository userInfoRepository; - TalentEntityRepository talentEntityRepository; + TalentRepository talentEntityRepository; UserAuthorityRepository userAuthorityRepository; AuthorityRepository authorityRepository; PasswordEncoder passwordEncoder; @@ -90,7 +90,7 @@ private String generateJWTToken(String name, Collection