How to use the rest builder correctly to return custom products.

Jamie Sammons, modified 2 Years ago. New Member Posts: 3 Join Date: 12/24/23 Recent Posts

I am trying to use the rest builder to build an api that returns the products based on a specific category id.

package ProductEndpoint.internal.resource.v1_0;

import com.liferay.petra.function.UnsafeBiConsumer;
import com.liferay.petra.function.UnsafeFunction;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.search.filter.Filter;
import com.liferay.portal.vulcan.pagination.Page;
import com.liferay.portal.vulcan.pagination.Pagination;

import java.util.Collection;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ServiceScope;

import ProductEndpoint.dto.v1_0.Product;
import ProductEndpoint.resource.v1_0.ProductResource;

//import com.liferay.headless.commerce.admin.catalog.client.*;
//import com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.Product;
//import com.liferay.headless.commerce.admin.catalog.client.pagination.Pagination;
//import com.liferay.headless.commerce.admin.catalog.client.resource.v1_0.ProductResource;

/**
 * @author kyounes
 */
@Component(properties = "OSGI-INF/liferay/rest/v1_0/product.properties", scope = ServiceScope.PROTOTYPE, service = ProductResource.class)
public class ProductResourceImpl extends BaseProductResourceImpl {
    @Override
    public Page < Product > getProductPages(String search, Filter filter, Pagination pagination, Sort[] sorts)
    throws Exception {
        com.liferay.headless.commerce.admin.catalog.client.resource.v1_0.ProductResource.Builder builder = com.liferay.headless.commerce.admin.catalog.client.resource.v1_0.ProductResource.builder();
        com.liferay.headless.commerce.admin.catalog.client.resource.v1_0.ProductResource productResource = builder.authentication("test@liferay.com", "test").build();

        com.liferay.headless.commerce.admin.catalog.client.pagination.Pagination pagination2 = com.liferay.headless.commerce.admin.catalog.client.pagination.Pagination.of(1, 200);
        try {
            System.out.println(productResource.getProductsPage(null, null, pagination2, null));
        } catch (Exception e) {
            System.out.println(e);
        };
        //
        com.liferay.headless.commerce.admin.catalog.client.pagination.Page < com.liferay.headless.commerce.admin.catalog.client.dto.v1_0.Product > page = productResource
            .getProductsPage(null, null, pagination2, null);

        return super.getProductPages(search, filter, pagination, sorts);
    }

    @Override
    public void setContextBatchUnsafeBiConsumer(
        UnsafeBiConsumer < Collection < Product > , UnsafeFunction < Product, Product, Exception > , Exception > contextBatchUnsafeBiConsumer) {
        // TODO Auto-generated method stub

    }
}

RIght now I am using the `com.liferay.headless.commerce.admin.catalog.client` headless api to get the products; however, the rest-builder uses the `com.liferay.portal.vulcan.pagination.Page` for pagination while the headless api uses com.liferay.headless.commerce.admin.catalog.client.pagination.Pagination.

Right now I am looping over each liferay commerce product and mapping it to my product.

I would love a comprehensive explanation on the right approach of achiving such a task, as I am pretty new to this and I would love to understand more.
Thanks.