package com.devjob.util;

import com.devjob.exception.BusinessException;
import com.devjob.exception.ErrorCode;
import java.util.Set;
import org.springframework.data.domain.Sort;

/**
 * EP29: 클라이언트가 보낸 ?sort=xxx 값을 화이트리스트와 대조한다.
 * 검증 없이 Sort를 그대로 JPA에 넘기면, 존재하지 않는 필드명일 때
 * PropertyReferenceException → 500 Internal Server Error로 새어나간다.
 * 허용되지 않은 필드면 400(INVALID_SORT_PROPERTY)로 명확히 응답한다.
 */
public class SortValidator {

    private SortValidator() {
    }

    public static void validate(Sort sort, Set<String> allowedProperties) {
        for (Sort.Order order : sort) {
            if (!allowedProperties.contains(order.getProperty())) {
                throw new BusinessException(ErrorCode.INVALID_SORT_PROPERTY);
            }
        }
    }
}
