package de.gedoplan.seminar.sbt.di.exercise.service;
|
|
import de.gedoplan.seminar.sbt.di.exercise.domain.Cocktail;
|
import de.gedoplan.seminar.sbt.di.exercise.domain.CocktailOrder;
|
import de.gedoplan.seminar.sbt.di.exercise.repository.CocktailOrderRepository;
|
import de.gedoplan.seminar.sbt.di.exercise.repository.CocktailRepository;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
@Component
|
public class CocktailOrderService {
|
|
@Autowired
|
CocktailOrderRepository cocktailOrderRepository;
|
|
@Autowired
|
CocktailRepository cocktailRepository;
|
|
@Autowired
|
private ApplicationEventPublisher eventPublisher;
|
|
public Integer createNewOrder() {
|
CocktailOrder cocktailOrder = new CocktailOrder();
|
this.cocktailOrderRepository.save(cocktailOrder);
|
this.cocktailOrderRepository.flush();
|
return cocktailOrder.getId();
|
}
|
|
@Transactional
|
public void addCocktail(Integer id, String cocktailId) {
|
CocktailOrder cocktailOrder = this.cocktailOrderRepository.findById(id)
|
.orElseThrow(() -> new IllegalArgumentException());
|
Cocktail cocktail = cocktailRepository.findById(cocktailId)
|
.orElseThrow(() -> new IllegalArgumentException());
|
|
eventPublisher.publishEvent(cocktail);
|
|
cocktailOrder.addCocktail(cocktailId);
|
}
|
|
@Transactional
|
public void placeOrder(Integer id) {
|
CocktailOrder cocktailOrder = this.cocktailOrderRepository.findById(id)
|
.orElseThrow(() -> new IllegalArgumentException());
|
|
if (!cocktailOrder.isPlaced()) {
|
cocktailOrder.place();
|
eventPublisher.publishEvent(cocktailOrder);
|
}
|
}
|
|
public void cancelOrder(Integer id) {
|
this.cocktailOrderRepository.deleteById(id);
|
}
|
|
}
|