CategoryQueryParamMapper.java

package io.github.evisentin.wordpress.rest.client.adapter.apache.query.mappers;

import io.github.evisentin.wordpress.rest.client.domain.model.query.WpCategoryQuery;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import org.apache.hc.core5.net.URIBuilder;

import static io.github.evisentin.wordpress.rest.client.domain.model.parameters.WpQueryParameters.*;

/**
 * Maps {@link WpCategoryQuery} into HTTP query parameters for category-related WordPress endpoints.
 *
 * <p>This class converts the fields of a query object into the corresponding
 * query parameters expected by the WordPress REST API.
 *
 * <p>Null values are ignored and not added to the request.
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class CategoryQueryParamMapper extends AbstractQueryParamMapper {
    /**
     * Maps the given {@link WpCategoryQuery} into query parameters and adds them to the provided {@link URIBuilder}.
     *
     * <p>If the query is {@code null}, no parameters are added.
     *
     * @param builder
     *         the HTTP URL builder to which query parameters are added
     * @param query
     *         the category query object containing filter criteria
     */
    public static void map(final @NonNull URIBuilder builder, final WpCategoryQuery query) {

        if (query == null) return;

        addEnum(builder, CONTEXT, query.getContext());
        addSetOfLong(builder, EXCLUDE, query.getExcludeIds());
        addBoolean(builder, HIDE_EMPTY, query.getHideEmpty());
        addSetOfLong(builder, INCLUDE, query.getIncludeIds());
        addEnum(builder, ORDER, query.getOrder());
        addEnum(builder, ORDER_BY, query.getOrderBy());
        addString(builder, SEARCH, query.getSearch());
        addString(builder, SLUG, query.getSlug());
        addLong(builder, PARENT, query.getParentId());
        addLong(builder, POST, query.getPostId());
    }
}