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

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);
}
@PostMapping("/hidden/{id}")
public void hiddenCocktail(@PathVariable Long id) {
cocktailService.hiddenCocktail(id);
}
@GetMapping
public CocktailForListResponseDto getOne(@RequestParam Long id) {
return cocktailService.findById(id);

View File

@@ -32,4 +32,12 @@ public class BarEntity {
inverseJoinColumns = @JoinColumn(name = "ingredient")
)
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 EventService eventService;
@Transactional
public void changeActiveBar(Long id) {
Optional<BarEntity> 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<CocktailEntity> findAllowedCocktails(List<IngredientEntity> ingredients) {
private List<CocktailEntity> findAllowedCocktails(List<IngredientEntity> ingredients, List<Long> hiddenCocktails) {
List<CocktailEntity> result = new ArrayList<>();
for (IngredientEntity ingredient : ingredients) {
List<CocktailEntity> 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);
}

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.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<CocktailForIngredientModalDto> 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<ReceiptEntity> old, List<ReceiptResponseDto> actual, CocktailEntity cocktail) {
for (ReceiptResponseDto receipt : actual) {