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 }