[8d11f8c] | 1 | package com.example.fooddeliverysystem.service.impl;
|
---|
| 2 |
|
---|
| 3 | import com.example.fooddeliverysystem.exceptions.FoodItemNotFoundException;
|
---|
| 4 | import com.example.fooddeliverysystem.exceptions.OrderNotFoundException;
|
---|
| 5 | import com.example.fooddeliverysystem.exceptions.SalePlaceNotFoundException;
|
---|
| 6 | import com.example.fooddeliverysystem.model.*;
|
---|
| 7 | import com.example.fooddeliverysystem.repository.*;
|
---|
| 8 | import com.example.fooddeliverysystem.service.OrderService;
|
---|
| 9 | import com.example.fooddeliverysystem.service.PriceService;
|
---|
| 10 | import com.example.fooddeliverysystem.service.SalePlaceService;
|
---|
| 11 | import com.example.fooddeliverysystem.service.UserService;
|
---|
| 12 | import org.springframework.stereotype.Service;
|
---|
| 13 |
|
---|
| 14 | import java.sql.Timestamp;
|
---|
| 15 | import java.time.LocalDate;
|
---|
| 16 | import java.time.LocalDateTime;
|
---|
| 17 | import java.util.ArrayList;
|
---|
| 18 | import java.util.List;
|
---|
| 19 |
|
---|
| 20 | @Service
|
---|
| 21 | public class OrderServiceImpl implements OrderService {
|
---|
| 22 |
|
---|
| 23 | private final SalePlaceService salePlaceService;
|
---|
| 24 | private final OrderRepository orderRepository;
|
---|
| 25 | private final OrderHasFoodRepository orderHasFoodRepository;
|
---|
| 26 | private final UserRepository userRepository;
|
---|
| 27 | private final ConsumerRepository consumerRepository;
|
---|
| 28 |
|
---|
| 29 | private final FoodItemRepository foodItemRepository;
|
---|
| 30 | private final DeliverRepository deliverRepository;
|
---|
| 31 | private final PriceService priceService;
|
---|
| 32 | public OrderServiceImpl(SalePlaceService salePlaceRepository, OrderRepository orderRepository, OrderHasFoodRepository orderHasFoodRepository, UserRepository userRepository,
|
---|
| 33 | ConsumerRepository consumerRepository, FoodItemRepository foodItemRepository, PriceService priceService, DeliverRepository deliverRepository) {
|
---|
| 34 | this.salePlaceService = salePlaceRepository;
|
---|
| 35 | this.orderRepository = orderRepository;
|
---|
| 36 | this.orderHasFoodRepository = orderHasFoodRepository;
|
---|
| 37 | this.userRepository = userRepository;
|
---|
| 38 | this.consumerRepository = consumerRepository;
|
---|
| 39 | this.foodItemRepository = foodItemRepository;
|
---|
| 40 | this.priceService = priceService;
|
---|
| 41 | this.deliverRepository = deliverRepository;
|
---|
| 42 | }
|
---|
| 43 |
|
---|
| 44 | @Override
|
---|
| 45 | public void placeOrder(String typeOfPayment, Long salePlaceId, List<Long> foodIds, List<Integer> foodPrices, List<Integer> foodQuantities, String username) throws SalePlaceNotFoundException {
|
---|
| 46 | SalePlace salePlace = this.salePlaceService.findSalePlaceServiceById(salePlaceId);
|
---|
| 47 | User user = this.userRepository.findByUsername(username).get();
|
---|
| 48 | Consumer consumer = this.consumerRepository.findById(user.getUser_id()).get();
|
---|
| 49 |
|
---|
| 50 | Order order = new Order(typeOfPayment,"kreirana", Timestamp.valueOf(LocalDateTime.now()), salePlace ,consumer);
|
---|
| 51 | List<OrderHasFood> orderHasFoodList = new ArrayList<>();
|
---|
| 52 | order = orderRepository.save(order);
|
---|
| 53 | for(int i = 0; i < foodIds.size(); i++){
|
---|
| 54 |
|
---|
| 55 | if(foodQuantities.get(i) != null) {
|
---|
| 56 | OrderHasFood orderHasFood = new OrderHasFood(new OrderHasFoodKey(foodIds.get(i), order.getOrderId()), foodQuantities.get(i));
|
---|
| 57 | orderHasFoodList.add(orderHasFood);
|
---|
| 58 | }
|
---|
| 59 | }
|
---|
| 60 | this.orderHasFoodRepository.saveAll(orderHasFoodList);
|
---|
| 61 |
|
---|
| 62 |
|
---|
| 63 |
|
---|
| 64 | }
|
---|
| 65 |
|
---|
| 66 | @Override
|
---|
| 67 | public Order changeOrderStatus(Long orderId, String status) {
|
---|
| 68 | Order order = this.orderRepository.findById(orderId).get();
|
---|
| 69 | order.setOrderStatus(status);
|
---|
| 70 |
|
---|
| 71 | return this.orderRepository.save(order);
|
---|
| 72 | }
|
---|
| 73 |
|
---|
| 74 | @Override
|
---|
| 75 | public Integer calculateCostOfOrder(Long orderId) throws FoodItemNotFoundException {
|
---|
| 76 | Integer totalCost = 0;
|
---|
| 77 | List<OrderHasFood> orderHasFoodList = this.orderHasFoodRepository.findAllByOrderHasFoodKeyOrderId(orderId);
|
---|
| 78 | for(OrderHasFood orderHasFood: orderHasFoodList){
|
---|
| 79 | Long foodItemId = orderHasFood.getOrderHasFoodKey().getFoodItemId();
|
---|
| 80 | FoodItem foodItem = this.foodItemRepository.findById(foodItemId).get();
|
---|
| 81 | Integer quantity = orderHasFood.getQuantity();
|
---|
| 82 | Integer price = this.priceService.findCurrentPriceForFoodItem(foodItem).getCost();
|
---|
| 83 | totalCost += quantity * price;
|
---|
| 84 |
|
---|
| 85 | }
|
---|
| 86 |
|
---|
| 87 | return totalCost;
|
---|
| 88 | }
|
---|
| 89 |
|
---|
| 90 | @Override
|
---|
| 91 | public List<Order> findAllOrdersReadyToBeDelivered() {
|
---|
| 92 | return this.orderRepository.findAllByOrderStatus("spremna");
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | @Override
|
---|
| 96 | public List<Order> findAllOrdersForDeliver(String username) {
|
---|
| 97 | User user = this.userRepository.findByUsername(username).get();
|
---|
| 98 | Deliver deliver = this.deliverRepository.findById(user.getUser_id()).get();
|
---|
| 99 | return this.orderRepository.findAllByOrderStatusAndDeliver("prevzemena", deliver);
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | @Override
|
---|
| 103 | public Order updateOrderDeliver(String username, Long orderId) {
|
---|
| 104 | User user = this.userRepository.findByUsername(username).get();
|
---|
| 105 | Deliver deliver = this.deliverRepository.findById(user.getUser_id()).get();
|
---|
| 106 | Order order = this.orderRepository.findById(orderId).get();
|
---|
| 107 | order.setDeliver(deliver);
|
---|
| 108 | return this.orderRepository.save(order);
|
---|
| 109 | }
|
---|
| 110 |
|
---|
| 111 | @Override
|
---|
| 112 | public Order findOrderById(Long orderId) throws OrderNotFoundException {
|
---|
| 113 | return this.orderRepository.findById(orderId).orElseThrow(() -> new OrderNotFoundException("order cannot be found"));
|
---|
| 114 | }
|
---|
| 115 |
|
---|
| 116 | @Override
|
---|
| 117 | public List<Order> findAllOrdersForCustomer(String username) {
|
---|
| 118 | User user = this.userRepository.findByUsername(username).get();
|
---|
| 119 | Consumer customer = this.consumerRepository.findById(user.getUser_id()).get();
|
---|
| 120 | return this.orderRepository.findAllByConsumer(customer);
|
---|
| 121 | }
|
---|
| 122 |
|
---|
| 123 | @Override
|
---|
| 124 | public void saveOrder(Order order) {
|
---|
| 125 | this.orderRepository.save(order);
|
---|
| 126 | }
|
---|
| 127 | }
|
---|