ImageService.java
package com.ctrlbuy.webshop.service;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service
public class ImageService {
private static final Logger logger = LoggerFactory.getLogger(ImageService.class);
private final ResourceLoader resourceLoader;
private static final String DEFAULT_PHONE_IMAGE = "https://images.unsplash.com/photo-1592750475338-74b7b21085ab?w=400";
private static final String DEFAULT_LAPTOP_IMAGE = "https://images.unsplash.com/photo-1496181133206-80ce9b88a853?w=400";
private static final String DEFAULT_PRODUCT_IMAGE = "https://images.unsplash.com/photo-1560472354-b33ff0c44a43?w=400";
public ImageService(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
public String getProductImageUrl(String productName, String category, String originalImageUrl) {
if (originalImageUrl != null && originalImageUrl.startsWith("http")) {
return originalImageUrl;
}
String localImagePath = getLocalImagePath(originalImageUrl);
if (localImageExists(localImagePath)) {
logger.debug("🖼️ Använder lokal bild: {}", localImagePath);
return localImagePath;
}
return getCategoryFallbackImage(category);
}
private boolean localImageExists(String imagePath) {
try {
Resource resource = resourceLoader.getResource("classpath:static" + imagePath);
return resource.exists() && resource.isReadable();
} catch (Exception e) {
return false;
}
}
private String getLocalImagePath(String originalImageUrl) {
if (originalImageUrl != null && originalImageUrl.startsWith("/images/")) {
return originalImageUrl;
}
return "/images/placeholder-product.jpg";
}
private String getCategoryFallbackImage(String category) {
if (category == null) return DEFAULT_PRODUCT_IMAGE;
String lowerCategory = category.toLowerCase();
if (lowerCategory.contains("smartphone") || lowerCategory.contains("phone")) {
return DEFAULT_PHONE_IMAGE;
} else if (lowerCategory.contains("laptop") || lowerCategory.contains("computer")) {
return DEFAULT_LAPTOP_IMAGE;
}
return DEFAULT_PRODUCT_IMAGE;
}
}