package com.devjob.config;

import com.devjob.logging.MdcInterceptor;
import com.devjob.ratelimit.RateLimitInterceptor;
import org.springframework.core.Ordered;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * EP29: 페이징 공통 설정.
 * - 클라이언트가 size를 과도하게 요청해도(?size=100000) 서버 보호를 위해 최대 50으로 제한한다.
 * - page/size 파라미터가 없을 때 기본값(0페이지, 10건)을 보장한다.
 *
 * EP35: 로그인 API에 Rate Limit 인터셉터를 등록한다.
 * EP37: 모든 요청에 MDC(requestId) 인터셉터를 등록한다.
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MdcInterceptor())
                .addPathPatterns("/**")
                .order(Ordered.HIGHEST_PRECEDENCE);

        registry.addInterceptor(new RateLimitInterceptor())
                .addPathPatterns("/api/auth/**");
    }
}
