async def METHOD_NAME(
    self,
    model,
    user_id=None,
    store_id=None,
    category=None,
    min_price=None,
    max_price=None,
    sale=False,
    postprocess: Optional[Callable] = None,
    app_id=None,
    redirect_url=None,
    permissions=None,
    count_only=False,
    *args,
    **kwargs,
) -> Union[dict, int]:
    query = await self.get_queryset(
        model, user_id, sale, store_id, category, min_price, max_price, app_id, redirect_url, permissions, *args, **kwargs
    )
    if count_only:
        return await self.get_count(query)
    count, data = await asyncio.gather(self.get_count(query), self.get_list(query))
    if postprocess:
        data = await postprocess(data)
    return {
        "count": count,
        "next": self.get_next_url(count),
        "previous": self.get_previous_url(),
        "result": data,
    }