package com.tourguide.config; import com.tourguide.config.properties.StorageProperties; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.nio.file.Paths; @Configuration public class WebMvcConfig implements WebMvcConfigurer { private final StorageProperties storageProperties; public WebMvcConfig(StorageProperties storageProperties) { this.storageProperties = storageProperties; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registerResourceHandler(registry, storageProperties.getAvatarPublicPath(), storageProperties.getAvatarDirectory(), "/uploads/avatars"); registerResourceHandler(registry, storageProperties.getGuideApplicationPublicPath(), storageProperties.getGuideApplicationDirectory(), "/uploads/guide-applications"); } private void registerResourceHandler(ResourceHandlerRegistry registry, String publicPath, String directory, String defaultPublicPath) { String normalizedPublicPath = normalizePublicPath(publicPath, defaultPublicPath); String resourceLocation = Paths.get(directory).toAbsolutePath().normalize().toUri().toString(); registry.addResourceHandler(normalizedPublicPath + "/**") .addResourceLocations(resourceLocation.endsWith("/") ? resourceLocation : resourceLocation + "/"); } private String normalizePublicPath(String publicPath, String defaultPublicPath) { String normalized = publicPath == null ? defaultPublicPath : publicPath.trim(); if (!normalized.startsWith("/")) { normalized = "/" + normalized; } while (normalized.endsWith("/")) { normalized = normalized.substring(0, normalized.length() - 1); } return normalized; } }