Могу ли я получить лайки пользователей, используя SpEL и прогнозы? - PullRequest
0 голосов
/ 26 апреля 2020

Настройка проста: есть пользователи и предметы. Пользователь может любить предметы. Далее есть ящики. У ящиков могут быть предметы.

Если я возьму один или несколько ящиков, я также хочу извлечь предметы из этого ящика. Однако, если в систему вошел пользователь, я также хотел бы предоставить свойство liked, которое может определить, нравится ли пользователю элемент в данный момент.

Приведенный ниже код должен дать приблизительное представление. о том, как это будет выглядеть в приложении Spring Boot:

@Entity
public class UserEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
}


@Entity
public class LikeEntity {
  @ManyToOne
  private UserEntity user;

  @ManyToOne
  private ItemEntity item;
}

@Entity
public class ItemEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
}

Кроме того, у нас есть Drawer и DrawerItem сущности, такие как:

@Entity
public class DrawerItemEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @ManyToOne
  private DrawerEntity drawer

  @ManyToOne
  private ItemEntity item
}


@Entity
public class DrawerEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @OneToMany(mappedBy = drawer)
  private List<DrawerItemEntity> drawerItems;
}

Для клиента I Вы хотите создать проекции, подобные этой, где DrawerItem предоставляет информацию о том, нравится ли элементу currentUser, если он доступен, элементу или нет.

Проблема в том, что выражение SpEL для метода getLiked() не будет работа:

public interface DrawerItem {

  Item getItem();

  @Value("#{currentUser != null ? currentUser.getLikes().contains(target)} : false")
  Boolean getLiked();

}

public interface Drawer {
  List<DrawerItem> getItems();
}

Я не знаю, возможно ли и как это возможно, и / или это хорошая идея в отношении производительности вычислений, но это то, что мне нужно. Прогнозы действительно ограничивают возможность подготовки данных для клиента, и для того, чтобы сделать их плохим выбором, кажется, требуется всего одна маленькая вещь. Я начинаю понимать, что только сейчас ..

...