добавлена возможность скрытия коктейля из подборки

This commit is contained in:
Kayashov.SM
2025-12-27 20:19:12 +04:00
parent ed72511ed4
commit 21e44246b9
4 changed files with 33 additions and 8 deletions

View File

@@ -62,6 +62,11 @@ public class CocktailController {
return cocktailService.savePhoto(file); return cocktailService.savePhoto(file);
} }
@PostMapping("/hidden/{id}")
public void hiddenCocktail(@PathVariable Long id) {
cocktailService.hiddenCocktail(id);
}
@GetMapping @GetMapping
public CocktailForListResponseDto getOne(@RequestParam Long id) { public CocktailForListResponseDto getOne(@RequestParam Long id) {
return cocktailService.findById(id); return cocktailService.findById(id);

View File

@@ -32,4 +32,12 @@ public class BarEntity {
inverseJoinColumns = @JoinColumn(name = "ingredient") inverseJoinColumns = @JoinColumn(name = "ingredient")
) )
private List<IngredientEntity> ingredients; private List<IngredientEntity> ingredients;
@ManyToMany
@JoinTable(
name = "hidden_cocktails",
joinColumns = @JoinColumn(name = "bar"),
inverseJoinColumns = @JoinColumn(name = "cocktail")
)
private List<CocktailEntity> hiddenCocktails;
} }

View File

@@ -30,6 +30,7 @@ public class BarService {
private final CocktailRepository cocktailRepository; private final CocktailRepository cocktailRepository;
private final EventService eventService; private final EventService eventService;
@Transactional
public void changeActiveBar(Long id) { public void changeActiveBar(Long id) {
Optional<BarEntity> lastBarOpt = barEntityRepository.findByActiveTrue(); Optional<BarEntity> lastBarOpt = barEntityRepository.findByActiveTrue();
if (lastBarOpt.isPresent()) { if (lastBarOpt.isPresent()) {
@@ -55,7 +56,7 @@ public class BarService {
.map(ingredientRepository::save) .map(ingredientRepository::save)
.toList(); .toList();
cocktailRepository.saveAll(findAllowedCocktails(ingredients)); cocktailRepository.saveAll(findAllowedCocktails(ingredients, barEntity.getHiddenCocktails().stream().map(CocktailEntity::getId).toList()));
barEntityRepository.save(barEntity); barEntityRepository.save(barEntity);
@@ -112,7 +113,7 @@ public class BarService {
return BarResponseDto.mapToDto(entity); return BarResponseDto.mapToDto(entity);
} }
private List<CocktailEntity> findAllowedCocktails(List<IngredientEntity> ingredients) { private List<CocktailEntity> findAllowedCocktails(List<IngredientEntity> ingredients, List<Long> hiddenCocktails) {
List<CocktailEntity> result = new ArrayList<>(); List<CocktailEntity> result = new ArrayList<>();
for (IngredientEntity ingredient : ingredients) { for (IngredientEntity ingredient : ingredients) {
List<CocktailEntity> cocktails = ingredient.getReceipts().stream() List<CocktailEntity> cocktails = ingredient.getReceipts().stream()
@@ -120,7 +121,8 @@ public class BarService {
.toList(); .toList();
for (CocktailEntity cocktail : cocktails) { 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); cocktail.setAllowed(true);
result.add(cocktail); result.add(cocktail);
} }

View File

@@ -18,6 +18,7 @@ import ru.kayashov.bar.controller.dto.cocktail.SortingEnum;
import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto; import ru.kayashov.bar.controller.dto.ingredient.IngredientSimpleResponseDto;
import ru.kayashov.bar.mapper.CocktailMapper; import ru.kayashov.bar.mapper.CocktailMapper;
import ru.kayashov.bar.model.entity.Alcoholic; 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.Category;
import ru.kayashov.bar.model.entity.CocktailEntity; import ru.kayashov.bar.model.entity.CocktailEntity;
import ru.kayashov.bar.model.entity.Event; 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.Glass;
import ru.kayashov.bar.model.entity.IngredientEntity; import ru.kayashov.bar.model.entity.IngredientEntity;
import ru.kayashov.bar.model.entity.ReceiptEntity; import ru.kayashov.bar.model.entity.ReceiptEntity;
import ru.kayashov.bar.repository.BarEntityRepository;
import ru.kayashov.bar.repository.CocktailRepository; import ru.kayashov.bar.repository.CocktailRepository;
import ru.kayashov.bar.repository.IngredientRepository; import ru.kayashov.bar.repository.IngredientRepository;
import ru.kayashov.bar.repository.ReceiptRepository; import ru.kayashov.bar.repository.ReceiptRepository;
@@ -52,6 +54,7 @@ public class CocktailService {
private final CocktailRepository cocktailRepository; private final CocktailRepository cocktailRepository;
private final EventService eventService; private final EventService eventService;
private final BarEntityRepository barRepository;
@Value("${cocktail.photo.path}") @Value("${cocktail.photo.path}")
private String photoFolder; private String photoFolder;
@@ -219,11 +222,6 @@ public class CocktailService {
repository.delete(cocktail); repository.delete(cocktail);
} }
public String findInstructions(Long id) {
CocktailEntity cocktail = repository.findById(id).orElseThrow(RuntimeException::new);
return cocktail.getInstructions();
}
public List<CocktailForIngredientModalDto> findByIngredient(Long id) { public List<CocktailForIngredientModalDto> findByIngredient(Long id) {
return ingredientRepository.findById(id).orElseThrow(RuntimeException::new) return ingredientRepository.findById(id).orElseThrow(RuntimeException::new)
.getReceipts() .getReceipts()
@@ -234,6 +232,18 @@ public class CocktailService {
.toList(); .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: попробовать отыграть эту связку каскадами //todo: попробовать отыграть эту связку каскадами
private void editCocktailReceipts(List<ReceiptEntity> old, List<ReceiptResponseDto> actual, CocktailEntity cocktail) { private void editCocktailReceipts(List<ReceiptEntity> old, List<ReceiptResponseDto> actual, CocktailEntity cocktail) {
for (ReceiptResponseDto receipt : actual) { for (ReceiptResponseDto receipt : actual) {