package org.dicadeveloper.weplantaforest.admin.cart;
import java.util.ArrayList;
import java.util.List;
import org.dicadeveloper.weplantaforest.admin.support.Uris;
import org.dicadeveloper.weplantaforest.admin.tree.Tree;
import org.dicadeveloper.weplantaforest.admin.tree.TreeRepository;
import org.dicadeveloper.weplantaforest.admin.views.Views;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired) )
public class CartController {
private @NonNull CartRepository _cartRepository;
private @NonNull TreeRepository _treeRepository;
@RequestMapping(value = Uris.CARTS, method = RequestMethod.GET)
@JsonView(Views.OverviewCart.class)
public Iterable<Cart> getAllCarts() {
return _cartRepository.findAll();
}
@RequestMapping(value = Uris.CHANGE_CART_STATE, method = RequestMethod.POST)
public ResponseEntity<?> changeCartState(@RequestParam Long cartId, @RequestParam CartState cartState) {
if (_cartRepository.exists(cartId)) {
Cart cart = _cartRepository.findOne(cartId);
cart.setCartState(cartState);
if (CartState.DISCARDED.equals(cartState)) {
List<Tree> treesToDelete = new ArrayList<>();
for (CartItem cartItem : cart.getCartItems()) {
Tree tree = cartItem.getTree();
treesToDelete.add(tree);
cartItem.removeTree();
}
_treeRepository.delete(treesToDelete);
}
_cartRepository.save(cart);
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
}