Coverage Summary for Class: ProductService (com.app.SuperMarketSystem.service)

Class Class, % Method, % Line, %
ProductService 100% (1/1) 100% (7/7) 56.5% (61/108)


1 package com.app.SuperMarketSystem.service; 2  3 import com.app.SuperMarketSystem.dto.ApiResponse; 4 import com.app.SuperMarketSystem.dto.ProductDTO; 5 import com.app.SuperMarketSystem.model.Order; 6 import com.app.SuperMarketSystem.model.Product; 7 import com.app.SuperMarketSystem.model.User; 8 import com.app.SuperMarketSystem.repository.OrderRepository; 9 import com.app.SuperMarketSystem.repository.ProductRepository; 10 import com.app.SuperMarketSystem.repository.UserRepository; 11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.http.HttpStatus; 13 import org.springframework.stereotype.Service; 14  15 import java.time.LocalDateTime; 16 import java.util.List; 17  18 @Service 19 public class ProductService { 20  private final ProductRepository productRepository; 21  private final UserRepository userRepository; 22  private final OrderRepository orderRepository; 23  24  @Autowired 25  public ProductService(ProductRepository productRepository, UserRepository userRepository, OrderRepository orderRepository) { 26  this.productRepository = productRepository; 27  this.userRepository = userRepository; 28  this.orderRepository = orderRepository; 29  } 30  31  public ApiResponse findAllProducts() { 32  ApiResponse apiResponse = new ApiResponse(); 33  try { 34  List<Product> productList = productRepository.findAll(); 35  if (productList.isEmpty()) { 36  apiResponse.setMessage("No products found within the database"); 37  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 38  apiResponse.setData(null); 39  } else { 40  apiResponse.setMessage("Successfully fetched products from the database"); 41  apiResponse.setData(productList); 42  apiResponse.setStatus(HttpStatus.OK.value()); 43  } 44  return apiResponse; 45  } catch (Exception e) { 46  apiResponse.setData(null); 47  apiResponse.setMessage(e.getMessage()); 48  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 49  return apiResponse; 50  } 51  } 52  53  public ApiResponse addProduct(Product product) { 54  ApiResponse apiResponse = new ApiResponse(); 55  try { 56  productRepository.save(product); 57  apiResponse.setMessage("Successfully added product within the database"); 58  apiResponse.setData(product); 59  apiResponse.setStatus(HttpStatus.OK.value()); 60  return apiResponse; 61  } catch (Exception e) { 62  apiResponse.setData(null); 63  apiResponse.setMessage(e.getMessage()); 64  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 65  return apiResponse; 66  } 67  } 68  69  public ApiResponse deleteProduct(String productId) { 70  ApiResponse apiResponse = new ApiResponse(); 71  try { 72  Product product = productRepository.getById(productId); 73  if (null != product) { 74  productRepository.delete(product); 75  apiResponse.setStatus(HttpStatus.OK.value()); 76  apiResponse.setMessage("Successfully deleted product from the database"); 77  } else { 78  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 79  apiResponse.setMessage("No such product found against this ID"); 80  } 81  apiResponse.setData(null); 82  return apiResponse; 83  } catch (Exception e) { 84  apiResponse.setData(null); 85  apiResponse.setMessage(e.getMessage()); 86  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 87  return apiResponse; 88  } 89  } 90  91  public ApiResponse updateProduct(Product updatedProduct) { 92  ApiResponse apiResponse = new ApiResponse(); 93  try { 94  Product existingProduct = productRepository.getById(updatedProduct.getId()); 95  if (null != existingProduct) { 96  productRepository.save(updatedProduct); 97  apiResponse.setMessage("Successfully updated product within the database"); 98  apiResponse.setData(updatedProduct); 99  apiResponse.setStatus(HttpStatus.OK.value()); 100  } else { 101  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 102  apiResponse.setMessage("No such product found against this ID"); 103  apiResponse.setData(null); 104  } 105  return apiResponse; 106  107  } catch (Exception e) { 108  apiResponse.setData(null); 109  apiResponse.setMessage(e.getMessage()); 110  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 111  return apiResponse; 112  } 113  } 114  115  public ApiResponse getProductById(String productId) { 116  ApiResponse apiResponse = new ApiResponse(); 117  try { 118  Product product = productRepository.getById(productId); 119  if (null != product) { 120  apiResponse.setStatus(HttpStatus.OK.value()); 121  apiResponse.setMessage("Successful"); 122  apiResponse.setData(product); 123  } else { 124  apiResponse.setData(null); 125  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 126  apiResponse.setMessage("No such product found within the database"); 127  } 128  return apiResponse; 129  } catch (Exception e) { 130  apiResponse.setData(null); 131  apiResponse.setMessage(e.getMessage()); 132  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 133  return apiResponse; 134  } 135  } 136  137  public ApiResponse purchaseProducts(Integer userId, List<ProductDTO> productsList) { 138  ApiResponse apiResponse = new ApiResponse(); 139  try { 140  User user = userRepository.getById(userId); 141  if (null != user) { 142  Order order = new Order(); 143  order.setTotalPrice(0.0); 144  for (ProductDTO product : productsList 145  ) { 146  Product productToBuy = productRepository.getById(product.getProductId()); 147  if (null != productToBuy) { 148  order.setTotalPrice(productToBuy.getPrice() * product.getQuantityToPurchase() + order.getTotalPrice()); 149  order.getProducts().add(productToBuy); 150  } else { 151  apiResponse.setData(null); 152  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 153  apiResponse.setMessage("No such product found against " + product.getProductId() + " within the database"); 154  } 155  } 156  order.setDeliveryStatus("Pending"); 157  order.setOrderTime(LocalDateTime.now()); 158  orderRepository.save(order); 159  user.getOrders().add(order); 160  161  apiResponse.setStatus(HttpStatus.OK.value()); 162  apiResponse.setMessage("Successfully placed the orders"); 163  apiResponse.setData(order); 164  userRepository.save(user); 165  } else { 166  apiResponse.setData(null); 167  apiResponse.setStatus(HttpStatus.NOT_FOUND.value()); 168  apiResponse.setMessage("No such user found against this ID within the database"); 169  } 170  return apiResponse; 171  } catch (Exception e) { 172  apiResponse.setData(null); 173  apiResponse.setMessage(e.getMessage()); 174  apiResponse.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); 175  return apiResponse; 176  } 177  } 178 }