package com.paymentlink.exception; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(RegionBlockedException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public ModelAndView handleRegionBlocked(RegionBlockedException ex) { logger.warn("Region blocked: {} ({})", ex.getCountryName(), ex.getCountryCode()); ModelAndView mav = new ModelAndView("region-blocked"); mav.addObject("countryCode", ex.getCountryCode()); mav.addObject("countryName", ex.getCountryName()); mav.addObject("message", "Service is not available in your region"); return mav; } @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ModelAndView handleGenericException(Exception ex) { logger.error("Unexpected error", ex); ModelAndView mav = new ModelAndView("error"); mav.addObject("message", "An unexpected error occurred"); mav.addObject("error", ex.getMessage()); return mav; } }