Expanded API code, wrote a bunch new transformers as well.

This commit is contained in:
James Cole
2018-02-11 20:45:33 +01:00
parent 94f6bd34c7
commit c2da5931ec
16 changed files with 891 additions and 97 deletions

View File

@@ -88,22 +88,19 @@ class AccountController extends Controller
*/
public function index(Request $request)
{
$type = $request->get('type') ?? 'all';
$types = $this->mapTypes($type);
$types = $this->mapTypes($this->parameters->get('type'));
$pageSize = intval(Preferences::getForUser(auth()->user(), 'listPageSize', 50)->data);
$page = 0 === intval($request->get('page')) ? 1 : intval($request->get('page'));
$collection = $this->repository->getAccountsByType($types);
$count = $collection->count();
$accounts = $collection->slice(($page - 1) * $pageSize, $pageSize);
$accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
// make paginator:
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $page);
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new FractalCollection($accounts, new AccountTransformer, 'accounts');
$resource = new FractalCollection($accounts, new AccountTransformer($this->parameters), 'accounts');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return Response::json($manager->createData($resource)->toArray());
@@ -119,10 +116,10 @@ class AccountController extends Controller
{
$manager = new Manager();
$manager->parseIncludes(['attachments', 'journals', 'user']);
//$manager->parseIncludes(['attachments', 'journals', 'user']);
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($account, new AccountTransformer, 'accounts');
$resource = new Item($account, new AccountTransformer($this->parameters), 'accounts');
return Response::json($manager->createData($resource)->toArray());
}

View File

@@ -22,7 +22,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use Carbon\Carbon;
use FireflyIII\Api\V1\Requests\BillRequest;
use FireflyIII\Models\Bill;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
@@ -87,15 +86,7 @@ class BillController extends Controller
*/
public function index(Request $request)
{
$pageSize = intval(Preferences::getForUser(auth()->user(), 'listPageSize', 50)->data);
$start = null;
$end = null;
if (null !== $request->get('start')) {
$start = new Carbon($request->get('start'));
}
if (null !== $request->get('end')) {
$end = new Carbon($request->get('end'));
}
$pageSize = intval(Preferences::getForUser(auth()->user(), 'listPageSize', 50)->data);
$paginator = $this->repository->getPaginator($pageSize);
/** @var Collection $bills */
$bills = $paginator->getCollection();
@@ -104,7 +95,7 @@ class BillController extends Controller
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new FractalCollection($bills, new BillTransformer($start, $end), 'bills');
$resource = new FractalCollection($bills, new BillTransformer($this->parameters), 'bills');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return Response::json($manager->createData($resource)->toArray());
@@ -119,22 +110,12 @@ class BillController extends Controller
*/
public function show(Request $request, Bill $bill)
{
$start = null;
$end = null;
if (null !== $request->get('start')) {
$start = new Carbon($request->get('start'));
}
if (null !== $request->get('end')) {
$end = new Carbon($request->get('end'));
}
$manager = new Manager();
$manager->parseIncludes(['attachments', 'journals', 'user']);
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($bill, new BillTransformer($start, $end), 'bills');
$resource = new Item($bill, new BillTransformer($this->parameters), 'bills');
return Response::json($manager->createData($resource)->toArray());
}
@@ -146,21 +127,12 @@ class BillController extends Controller
*/
public function store(BillRequest $request)
{
$start = null;
$end = null;
if (null !== $request->get('start')) {
$start = new Carbon($request->get('start'));
}
if (null !== $request->get('end')) {
$end = new Carbon($request->get('end'));
}
$bill = $this->repository->store($request->getAll());
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($bill, new BillTransformer($start, $end), 'bills');
$resource = new Item($bill, new BillTransformer($this->parameters), 'bills');
return Response::json($manager->createData($resource)->toArray());
@@ -175,23 +147,13 @@ class BillController extends Controller
*/
public function update(BillRequest $request, Bill $bill)
{
$data = $request->getAll();
$bill = $this->repository->update($bill, $data);
$start = null;
$end = null;
if (null !== $request->get('start')) {
$start = new Carbon($request->get('start'));
}
if (null !== $request->get('end')) {
$end = new Carbon($request->get('end'));
}
$data = $request->getAll();
$bill = $this->repository->update($bill, $data);
$manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($bill, new BillTransformer($start, $end), 'bills');
$resource = new Item($bill, new BillTransformer($this->parameters), 'bills');
return Response::json($manager->createData($resource)->toArray());

View File

@@ -22,12 +22,15 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use Carbon\Carbon;
use Carbon\Exceptions\InvalidDateException;
use FireflyConfig;
use FireflyIII\Exceptions\FireflyException;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Symfony\Component\HttpFoundation\ParameterBag;
/**
* Class Controller.
@@ -36,6 +39,9 @@ class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
/** @var ParameterBag */
protected $parameters;
/**
* Controller constructor.
*
@@ -50,5 +56,49 @@ class Controller extends BaseController
if (true === $isDemoSite) {
throw new FireflyException('The API is not available on the demo site.');
}
// get global parameters
$this->parameters = $this->getParameters();
}
/**
* @return ParameterBag
*/
private function getParameters(): ParameterBag
{
$bag = new ParameterBag;
$page = (int)request()->get('page');
if ($page === 0) {
$page = 1;
}
$bag->set('page', $page);
$start = request()->get('start');
$startDate = null;
if (!is_null($start)) {
try {
$startDate = new Carbon($start);
} catch (InvalidDateException $e) {
// don't care
}
}
$bag->set('start', $startDate);
$end = request()->get('end');
$endDate = null;
if (!is_null($end)) {
try {
$endDate = new Carbon($end);
} catch (InvalidDateException $e) {
// don't care
}
}
$bag->set('end', $endDate);
$type = request()->get('type') ?? 'all';
$bag->set('type', $type);
return $bag;
}
}