diff --git a/src/main/java/ru/kayashov/bar/controller/CocktailController.java b/src/main/java/ru/kayashov/bar/controller/CocktailController.java index 2a3c579..441d300 100644 --- a/src/main/java/ru/kayashov/bar/controller/CocktailController.java +++ b/src/main/java/ru/kayashov/bar/controller/CocktailController.java @@ -62,6 +62,11 @@ public class CocktailController { return cocktailService.savePhoto(file); } + @PostMapping("/hidden/{id}") + public void hiddenCocktail(@PathVariable Long id) { + cocktailService.hiddenCocktail(id); + } + @GetMapping public CocktailForListResponseDto getOne(@RequestParam Long id) { return cocktailService.findById(id); diff --git a/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java b/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java index e07cc95..4d792b7 100644 --- a/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java +++ b/src/main/java/ru/kayashov/bar/model/entity/BarEntity.java @@ -32,4 +32,12 @@ public class BarEntity { inverseJoinColumns = @JoinColumn(name = "ingredient") ) private List ingredients; + + @ManyToMany + @JoinTable( + name = "hidden_cocktails", + joinColumns = @JoinColumn(name = "bar"), + inverseJoinColumns = @JoinColumn(name = "cocktail") + ) + private List hiddenCocktails; } diff --git a/src/main/java/ru/kayashov/bar/service/BarService.java b/src/main/java/ru/kayashov/bar/service/BarService.java index 212d398..b7ddecc 100644 --- a/src/main/java/ru/kayashov/bar/service/BarService.java +++ b/src/main/java/ru/kayashov/bar/service/BarService.java @@ -30,6 +30,7 @@ public class BarService { private final CocktailRepository cocktailRepository; private final EventService eventService; + @Transactional public void changeActiveBar(Long id) { Optional lastBarOpt = barEntityRepository.findByActiveTrue(); if (lastBarOpt.isPresent()) { @@ -55,7 +56,7 @@ public class BarService { .map(ingredientRepository::save) .toList(); - cocktailRepository.saveAll(findAllowedCocktails(ingredients)); + cocktailRepository.saveAll(findAllowedCocktails(ingredients, barEntity.getHiddenCocktails().stream().map(CocktailEntity::getId).toList())); barEntityRepository.save(barEntity); @@ -112,7 +113,7 @@ public class BarService { return BarResponseDto.mapToDto(entity); } - private List findAllowedCocktails(List ingredients) { + private List findAllowedCocktails(List ingredients, List hiddenCocktails) { List result = new ArrayList<>(); for (IngredientEntity ingredient : ingredients) { List cocktails = ingredient.getReceipts().stream() @@ -120,7 +121,8 @@ public class BarService { .toList(); for (CocktailEntity cocktail : cocktails) { - if (cocktail.getReceipt().stream().allMatch(r -> r.getIngredient().getIsHave())) { + if (cocktail.getReceipt().stream().allMatch(r -> r.getIngredient().getIsHave()) + && !hiddenCocktails.contains(cocktail.getId())) { cocktail.setAllowed(true); result.add(cocktail); } diff --git a/src/main/java/ru/kayashov/bar/service/CocktailService.java b/src/main/java/ru/kayashov/bar/service/CocktailService.java index 47e6798..a1a8def 100644 --- a/src/main/java/ru/kayashov/bar/service/CocktailService.java +++ b/src/main/java/ru/kayashov/bar/service/CocktailService.java @@ -18,6 +18,7 @@ import ru.kayashov.bar.controller.dto.cocktail.SortingEnum; import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.mapper.CocktailMapper; import ru.kayashov.bar.model.entity.Alcoholic; +import ru.kayashov.bar.model.entity.BarEntity; import ru.kayashov.bar.model.entity.Category; import ru.kayashov.bar.model.entity.CocktailEntity; import ru.kayashov.bar.model.entity.Event; @@ -25,6 +26,7 @@ import ru.kayashov.bar.model.entity.EventType; import ru.kayashov.bar.model.entity.Glass; import ru.kayashov.bar.model.entity.IngredientEntity; import ru.kayashov.bar.model.entity.ReceiptEntity; +import ru.kayashov.bar.repository.BarEntityRepository; import ru.kayashov.bar.repository.CocktailRepository; import ru.kayashov.bar.repository.IngredientRepository; import ru.kayashov.bar.repository.ReceiptRepository; @@ -52,6 +54,7 @@ public class CocktailService { private final CocktailRepository cocktailRepository; private final EventService eventService; + private final BarEntityRepository barRepository; @Value("${cocktail.photo.path}") private String photoFolder; @@ -219,11 +222,6 @@ public class CocktailService { repository.delete(cocktail); } - public String findInstructions(Long id) { - CocktailEntity cocktail = repository.findById(id).orElseThrow(RuntimeException::new); - return cocktail.getInstructions(); - } - public List findByIngredient(Long id) { return ingredientRepository.findById(id).orElseThrow(RuntimeException::new) .getReceipts() @@ -234,6 +232,18 @@ public class CocktailService { .toList(); } + public void hiddenCocktail(Long id) { + CocktailEntity cocktail = repository.findById(id).orElseThrow(RuntimeException::new); + + BarEntity bar = barRepository.findByActiveTrue().orElseThrow(); + bar.getHiddenCocktails().add(cocktail); + barRepository.save(bar); + + cocktail.setAllowed(false); + repository.save(cocktail); + log.info("Коктейль {} - {} был скрыт для бара {} - {}", cocktail.getId(), cocktail.getName(), bar.getId(), bar.getName()); + } + //todo: попробовать отыграть эту связку каскадами private void editCocktailReceipts(List old, List actual, CocktailEntity cocktail) { for (ReceiptResponseDto receipt : actual) {