Add limit param to all endpoints

This commit is contained in:
James Cole
2023-10-05 18:52:01 +02:00
parent a29d056a9b
commit 664a08d42f
46 changed files with 136 additions and 138 deletions

View File

@@ -49,7 +49,6 @@ use Symfony\Component\HttpFoundation\ParameterBag;
class Controller extends BaseController
{
protected const CONTENT_TYPE = 'application/vnd.api+json';
protected int $pageSize;
protected ParameterBag $parameters;
/**
@@ -58,10 +57,6 @@ class Controller extends BaseController
public function __construct()
{
$this->parameters = $this->getParameters();
$this->pageSize = 50;
if (auth()->check()) {
$this->pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
}
}
/**
@@ -129,6 +124,11 @@ class Controller extends BaseController
if (null !== $value) {
$bag->set($integer, (int)$value);
}
if (null === $value && 'limit' === $integer) {
// set default for user:
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$bag->set($integer, $pageSize);
}
}
// sort fields:

View File

@@ -74,7 +74,7 @@ class ShowController extends Controller
{
$this->repository->correctOrder();
$bills = $this->repository->getBills();
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = $this->parameters->get('limit');
$count = $bills->count();
$bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page'));

View File

@@ -64,9 +64,9 @@ class ListController extends Controller
exit;
$collection = $this->repository->getActiveBudgets();
$total = $collection->count();
$collection->slice($this->pageSize * $this->parameters->get('page'), $this->pageSize);
$collection->slice($this->pageXSize * $this->parameters->get('page'), $this->pXageSize);
$paginator = new LengthAwarePaginator($collection, $total, $this->pageSize, $this->parameters->get('page'));
$paginator = new LengthAwarePaginator($collection, $total, $this->pagXeSize, $this->parameters->get('page'));
$transformer = new BudgetTransformer();
return response()

View File

@@ -57,12 +57,13 @@ class ListController extends Controller
*/
public function index(DateRequest $request, Budget $budget): JsonResponse
{
$pageSize = $this->parameters->get('limit');
$dates = $request->getAll();
$collection = $this->repository->getBudgetLimits($budget, $dates['start'], $dates['end']);
$total = $collection->count();
$collection->slice($this->pageSize * $this->parameters->get('page'), $this->pageSize);
$collection->slice($pageSize * $this->parameters->get('page'), $pageSize);
$paginator = new LengthAwarePaginator($collection, $total, $this->pageSize, $this->parameters->get('page'));
$paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page'));
$transformer = new BudgetLimitTransformer();
return response()

View File

@@ -70,7 +70,7 @@ class ShowController extends Controller
public function index(Request $request): JsonResponse
{
$piggies = $this->repository->getPiggyBanks();
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = $this->parameters->get('limit');
$count = $piggies->count();
$piggies = $piggies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($piggies, $count, $pageSize, $this->parameters->get('page'));

View File

@@ -52,20 +52,16 @@ class AccountController extends Controller
public function list(ListRequest $request, Account $account): JsonResponse
{
// collect transactions:
$limit = $request->getLimit();
$page = $request->getPage();
$page = max($page, 1);
if ($limit > 0 && $limit <= $this->pageSize) {
$this->pageSize = $limit;
}
$page = $request->getPage();
$page = max($page, 1);
$pageSize = $this->parameters->get('limit');
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setAccounts(new Collection([$account]))
->withAPIInformation()
->setLimit($this->pageSize)
->setLimit($pageSize)
->setPage($page)
->setTypes($request->getTransactionTypes());
@@ -85,7 +81,7 @@ class AccountController extends Controller
sprintf(
'%s?%s',
route('api.v2.accounts.transactions', [$account->id]),
$request->buildParams()
$request->buildParams($pageSize)
)
);

View File

@@ -42,20 +42,16 @@ class TransactionController extends Controller
public function list(ListRequest $request): JsonResponse
{
// collect transactions:
$limit = $request->getLimit();
$page = $request->getPage();
$page = max($page, 1);
if ($limit > 0 && $limit <= $this->pageSize) {
$this->pageSize = $limit;
}
$pageSize = $this->parameters->get('limit');
$page = $request->getPage();
$page = max($page, 1);
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setUserGroup(auth()->user()->userGroup)
->withAPIInformation()
->setLimit($this->pageSize)
->setLimit($pageSize)
->setPage($page)
->setTypes($request->getTransactionTypes());
@@ -72,11 +68,12 @@ class TransactionController extends Controller
// exit;
$paginator = $collector->getPaginatedGroups();
$params = $request->buildParams($pageSize);
$paginator->setPath(
sprintf(
'%s?%s',
route('api.v2.transactions.list'),
$request->buildParams()
$params
)
);

View File

@@ -64,6 +64,7 @@ class ShowController extends Controller
public function index(Request $request): JsonResponse
{
$collection = new Collection();
$pageSize = $this->parameters->get('limit');
// if the user has the system owner role, get all. Otherwise, get only the users' groups.
if (!auth()->user()->hasRole('owner')) {
$collection = $this->repository->get();
@@ -72,9 +73,9 @@ class ShowController extends Controller
$collection = $this->repository->getAll();
}
$count = $collection->count();
$userGroups = $collection->slice(($this->parameters->get('page') - 1) * $this->pageSize, $this->pageSize);
$userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($userGroups, $count, $this->pageSize, $this->parameters->get('page'));
$paginator = new LengthAwarePaginator($userGroups, $count, $pageSize, $this->parameters->get('page'));
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters); // give params to transformer

View File

@@ -43,10 +43,11 @@ class ListRequest extends FormRequest
/**
* @return string
*/
public function buildParams(): string
public function buildParams(int $pageSize): string
{
$array = [
'page' => $this->getPage(),
'page' => $this->getPage(),
'limit' => $pageSize,
];
$start = $this->getStartDate();
@@ -55,9 +56,6 @@ class ListRequest extends FormRequest
$array['start'] = $start->format('Y-m-d');
$array['end'] = $end->format('Y-m-d');
}
if (0 !== $this->getLimit()) {
$array['limit'] = $this->getLimit();
}
return http_build_query($array);
}
@@ -86,14 +84,6 @@ class ListRequest extends FormRequest
return $this->getCarbonDate('end');
}
/**
* @return int
*/
public function getLimit(): int
{
return $this->convertInteger('limit');
}
/**
* @return array
*/