| Line 201... |
Line 201... |
| 201 |
logger.info("Item ids {}", itemIds);
|
201 |
logger.info("Item ids {}", itemIds);
|
| 202 |
List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds);
|
202 |
List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(itemIds, tagIds);
|
| 203 |
Map<Integer, TagListing> tagListingsMap = tagListings.stream()
|
203 |
Map<Integer, TagListing> tagListingsMap = tagListings.stream()
|
| 204 |
.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
|
204 |
.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
|
| 205 |
|
205 |
|
| - |
|
206 |
// N+1 fix: Pre-fetch all items before the loop
|
| - |
|
207 |
Map<Integer, Item> itemMap = itemRepository.selectByIds(itemIds).stream()
|
| - |
|
208 |
.collect(Collectors.toMap(Item::getId, item -> item));
|
| - |
|
209 |
|
| 206 |
User user = saholicUserRepository.selectByCartId(cartId);
|
210 |
User user = saholicUserRepository.selectByCartId(cartId);
|
| 207 |
FofoStore fs = fofoStoreRepository.selectByRetailerId(user.getId());
|
211 |
FofoStore fs = fofoStoreRepository.selectByRetailerId(user.getId());
|
| 208 |
Map<Integer, Integer> warehouseItemQtyMap = saholicInventoryService.getSaholicNetAvailability(fs.getWarehouseId(), new ArrayList<>(itemIds));
|
212 |
Map<Integer, Integer> warehouseItemQtyMap = saholicInventoryService.getSaholicNetAvailability(fs.getWarehouseId(), new ArrayList<>(itemIds));
|
| 209 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fs.getId(), LocalDate.now());
|
213 |
PartnerType partnerType = partnerTypeChangeService.getTypeOnDate(fs.getId(), LocalDate.now());
|
| 210 |
// Get in-transit data for this warehouse
|
214 |
// Get in-transit data for this warehouse
|
| Line 225... |
Line 229... |
| 225 |
int nonAccessoryQuantity = 0;
|
229 |
int nonAccessoryQuantity = 0;
|
| 226 |
for (CartLine cartLine : cartLines) {
|
230 |
for (CartLine cartLine : cartLines) {
|
| 227 |
CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
|
231 |
CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
|
| 228 |
int oldEstimate = cartLine.getEstimate();
|
232 |
int oldEstimate = cartLine.getEstimate();
|
| 229 |
int itemId = cartLine.getItemId();
|
233 |
int itemId = cartLine.getItemId();
|
| 230 |
Item item = null;
|
234 |
// N+1 fix: Use pre-fetched itemMap instead of querying per item
|
| 231 |
try {
|
- |
|
| 232 |
item = itemRepository.selectById(itemId);
|
235 |
Item item = itemMap.get(itemId);
|
| 233 |
cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
|
- |
|
| 234 |
} catch (ProfitMandiBusinessException e) {
|
- |
|
| 235 |
e.printStackTrace();
|
236 |
if (item == null) {
|
| 236 |
logger.info("Error finding item with id {}", itemId);
|
237 |
logger.info("Error finding item with id {}", itemId);
|
| 237 |
cartLineRepository.delete(cartLine);
|
238 |
cartLineRepository.delete(cartLine);
|
| 238 |
continue;
|
239 |
continue;
|
| 239 |
}
|
240 |
}
|
| - |
|
241 |
cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
|
| 240 |
cartItemResponseModel.setItemId(itemId);
|
242 |
cartItemResponseModel.setItemId(itemId);
|
| 241 |
cartItemResponseModel.setQuantity(cartLine.getQuantity());
|
243 |
cartItemResponseModel.setQuantity(cartLine.getQuantity());
|
| 242 |
cartItemResponseModel.setColor(item.getColor());
|
244 |
cartItemResponseModel.setColor(item.getColor());
|
| 243 |
cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
|
245 |
cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
|
| 244 |
cartItemResponseModel.setMinBuyQuantity(1);
|
246 |
cartItemResponseModel.setMinBuyQuantity(1);
|