diff --git a/src/main/java/ru/nsu/fit/directors/userservice/model/Company.java b/src/main/java/ru/nsu/fit/directors/userservice/model/Company.java index 61e066b..53c74b2 100644 --- a/src/main/java/ru/nsu/fit/directors/userservice/model/Company.java +++ b/src/main/java/ru/nsu/fit/directors/userservice/model/Company.java @@ -6,6 +6,9 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import org.hibernate.proxy.HibernateProxy; + +import java.util.Objects; @Entity @Table(name = "company") @@ -16,4 +19,19 @@ public class Company { @Id private Long id; + @Override + public final boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + Class oEffectiveClass = o instanceof HibernateProxy ? ((HibernateProxy) o).getHibernateLazyInitializer().getPersistentClass() : o.getClass(); + Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); + if (thisEffectiveClass != oEffectiveClass) return false; + Company company = (Company) o; + return getId() != null && Objects.equals(getId(), company.getId()); + } + + @Override + public final int hashCode() { + return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + } } diff --git a/src/main/java/ru/nsu/fit/directors/userservice/model/User.java b/src/main/java/ru/nsu/fit/directors/userservice/model/User.java index 7ec2cd8..42f427b 100644 --- a/src/main/java/ru/nsu/fit/directors/userservice/model/User.java +++ b/src/main/java/ru/nsu/fit/directors/userservice/model/User.java @@ -1,5 +1,6 @@ package ru.nsu.fit.directors.userservice.model; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -36,7 +37,7 @@ public class User implements UserDetails { private String phoneNumber; private String password; private Long vkUserId; - @ManyToMany(fetch = FetchType.EAGER) + @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}) @JoinTable( name = "favourite_companies", joinColumns = @JoinColumn(name = "user_id"), diff --git a/src/main/java/ru/nsu/fit/directors/userservice/repository/CompanyService.java b/src/main/java/ru/nsu/fit/directors/userservice/repository/CompanyService.java index 47eca13..42c169a 100644 --- a/src/main/java/ru/nsu/fit/directors/userservice/repository/CompanyService.java +++ b/src/main/java/ru/nsu/fit/directors/userservice/repository/CompanyService.java @@ -7,7 +7,6 @@ import ru.nsu.fit.directors.userservice.model.Company; import java.util.List; -import java.util.stream.Stream; @Component @RequiredArgsConstructor @@ -22,7 +21,7 @@ public Company getCompanyById(Long establishmentId) { ); } - public List getCompaniesByIds(Stream ids) { + public List getCompaniesByIds(List ids) { return establishmentApi.syncListGetWithParams( uriBuilder -> uriBuilder.path("/internal/establishment").queryParam("ids", ids).build(), new ParameterizedTypeReference<>() {} diff --git a/src/main/java/ru/nsu/fit/directors/userservice/service/FavouritesServiceImpl.java b/src/main/java/ru/nsu/fit/directors/userservice/service/FavouritesServiceImpl.java index 6f71ed5..cd4198b 100644 --- a/src/main/java/ru/nsu/fit/directors/userservice/service/FavouritesServiceImpl.java +++ b/src/main/java/ru/nsu/fit/directors/userservice/service/FavouritesServiceImpl.java @@ -35,7 +35,7 @@ public void addToFavourites(Long establishmentId) { @Transactional public void deleteFromFavourites(Long establishmentId) { User loggedUser = securityService.getLoggedInUser(); - loggedUser.getFavourites().remove(new Company().setId(establishmentId)); + loggedUser.getFavourites().remove(companyRepository.findById(establishmentId).orElseThrow()); userRepository.save(loggedUser); } @@ -43,6 +43,6 @@ public void deleteFromFavourites(Long establishmentId) { @Transactional public List getFavourites() { User loggedUser = securityService.getLoggedInUser(); - return companyService.getCompaniesByIds(loggedUser.getFavourites().stream().map(Company::getId)); + return companyService.getCompaniesByIds(loggedUser.getFavourites().stream().map(Company::getId).toList()); } }