feat: add multi-tenant controllers for catalog and tenant management and implement pagination macro in AppServiceProvider

This commit is contained in:
2026-06-29 09:02:39 -03:00
parent 31b65eb676
commit 4125d8353d
8 changed files with 24 additions and 8 deletions

View File

@@ -17,7 +17,7 @@ class BrandController extends Controller
public function index(Tenant $tenant): JsonResponse public function index(Tenant $tenant): JsonResponse
{ {
return BrandResource::collection( return BrandResource::collection(
Brand::query()->where('tenant_codigo', $tenant->codigo)->orderByDesc('id')->get() Brand::query()->where('tenant_codigo', $tenant->codigo)->orderByDesc('id')->paginateFromRequest()
)->response(); )->response();
} }

View File

@@ -21,7 +21,7 @@ class CategoryController extends Controller
->where('tenant_code', $tenant->codigo) ->where('tenant_code', $tenant->codigo)
->with(['parent', 'subCategories', 'tenant']) ->with(['parent', 'subCategories', 'tenant'])
->orderByDesc('id') ->orderByDesc('id')
->get() ->paginateFromRequest()
)->response(); )->response();
} }

View File

@@ -23,7 +23,7 @@ class ProductAttributeController extends Controller
->with('options') ->with('options')
->latest(); ->latest();
return ProductAttributeResource::collection($query->get())->response(); return ProductAttributeResource::collection($query->paginateFromRequest())->response();
} }
public function store(StoreProductAttributeRequest $request, Tenant $tenant): JsonResponse public function store(StoreProductAttributeRequest $request, Tenant $tenant): JsonResponse

View File

@@ -17,7 +17,7 @@ class ProductController extends Controller
public function index(Tenant $tenant): JsonResponse public function index(Tenant $tenant): JsonResponse
{ {
return ProductResource::collection( return ProductResource::collection(
Product::query()->where('tenant_codigo', $tenant->codigo)->latest()->get() Product::query()->where('tenant_codigo', $tenant->codigo)->latest()->paginateFromRequest()
)->response(); )->response();
} }

View File

@@ -23,7 +23,7 @@ class ProductVariantController extends Controller
->with(['product', 'definitions.attribute']) ->with(['product', 'definitions.attribute'])
->latest(); ->latest();
return ProductVariantResource::collection($query->get())->response(); return ProductVariantResource::collection($query->paginateFromRequest())->response();
} }
public function store(StoreProductVariantRequest $request, Tenant $tenant): JsonResponse public function store(StoreProductVariantRequest $request, Tenant $tenant): JsonResponse

View File

@@ -24,7 +24,7 @@ class PurchaseController extends Controller
->where('tenant_codigo', $tenant->codigo) ->where('tenant_codigo', $tenant->codigo)
->where('user_id', $request->user()->id) ->where('user_id', $request->user()->id)
->latest() ->latest()
->get() ->paginateFromRequest()
)->response(); )->response();
} }

View File

@@ -19,7 +19,7 @@ class TenantController extends Controller
public function index(): JsonResponse public function index(): JsonResponse
{ {
return TenantResource::collection(Tenant::query()->with(['headerLogo', 'footerLogo'])->latest()->get())->response(); return TenantResource::collection(Tenant::query()->with(['headerLogo', 'footerLogo'])->latest()->paginateFromRequest())->response();
} }
public function store(StoreTenantRequest $request): JsonResponse public function store(StoreTenantRequest $request): JsonResponse

View File

@@ -19,6 +19,22 @@ class AppServiceProvider extends ServiceProvider
*/ */
public function boot(): void public function boot(): void
{ {
// \Illuminate\Database\Eloquent\Builder::macro('paginateFromRequest', function (int $defaultPerPage = 15, int $maxPerPage = 100, ?int $page = null) {
/** @var \Illuminate\Database\Eloquent\Builder $this */
$perPage = (int) request()->query('per_page', $defaultPerPage);
$page = $page ?? (int) request()->query('page', 1);
if ($perPage <= 0) {
$perPage = $defaultPerPage;
}
if ($perPage > $maxPerPage) {
$perPage = $maxPerPage;
}
if ($page <= 0) {
$page = 1;
}
return $this->paginate(perPage: $perPage, page: $page);
});
} }
} }