From d0db1117f73f17a924c045dd7081e3e37a60623b Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 29 Jun 2018 14:07:33 +0200 Subject: [PATCH] Recurrence first start and API routes. --- .../V1/Controllers/RecurrenceController.php | 46 +++++++++++++++++-- routes/api.php | 17 +++++-- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/app/Api/V1/Controllers/RecurrenceController.php b/app/Api/V1/Controllers/RecurrenceController.php index 519ffd65f8..e901c1a66d 100644 --- a/app/Api/V1/Controllers/RecurrenceController.php +++ b/app/Api/V1/Controllers/RecurrenceController.php @@ -23,13 +23,27 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; +use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; +use FireflyIII\Transformers\PiggyBankTransformer; +use FireflyIII\Transformers\RecurrenceTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +use League\Fractal\Manager; +use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use League\Fractal\Resource\Collection as FractalCollection; +use League\Fractal\Serializer\JsonApiSerializer; - -class RecurrenceController +/** + * + * Class RecurrenceController + */ +class RecurrenceController extends Controller { + /** @var RecurringRepositoryInterface */ + private $repository; + public function __construct() { parent::__construct(); @@ -38,7 +52,10 @@ class RecurrenceController /** @var User $user */ $user = auth()->user(); - // todo add local repositories. + /** @var RecurringRepositoryInterface repository */ + $this->repository = app(RecurringRepositoryInterface::class); + $this->repository->setUser($user); + return $next($request); } ); @@ -67,7 +84,28 @@ class RecurrenceController */ public function index(Request $request): JsonResponse { - // todo implement. + // create some objects: + $manager = new Manager; + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + + // types to get, page size: + $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + + // get list of budgets. Count it and split it. + $collection = $this->repository->getAll(); + $count = $collection->count(); + $piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + + // make paginator: + $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.recurrences.index') . $this->buildParams()); + + // present to user. + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $resource = new FractalCollection($piggyBanks, new RecurrenceTransformer($this->parameters), 'recurrences'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); } diff --git a/routes/api.php b/routes/api.php index 3212017d89..e9beddb78a 100644 --- a/routes/api.php +++ b/routes/api.php @@ -186,12 +186,23 @@ Route::group( ['middleware' => ['auth:api', 'bindings'], 'namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'preferences', 'as' => 'api.v1.preferences.'], function () { - // Piggy Bank API routes: + // Preference API routes: Route::get('', ['uses' => 'PreferenceController@index', 'as' => 'index']); Route::get('{preference}', ['uses' => 'PreferenceController@show', 'as' => 'show']); Route::put('{preference}', ['uses' => 'PreferenceController@update', 'as' => 'update']); - // Route::post('', ['uses' => 'PiggyBankController@store', 'as' => 'store']); - // Route::delete('{piggyBank}', ['uses' => 'PiggyBankController@delete', 'as' => 'delete']); + } +); + +Route::group( + ['middleware' => ['auth:api', 'bindings'], 'namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'recurrences', 'as' => 'api.v1.recurrences.'], + function () { + + // Recurrence API routes: + Route::get('', ['uses' => 'RecurrenceController@index', 'as' => 'index']); + Route::post('', ['uses' => 'RecurrenceController@store', 'as' => 'store']); + Route::get('{recurrence}', ['uses' => 'RecurrenceController@show', 'as' => 'show']); + Route::put('{recurrence}', ['uses' => 'RecurrenceController@update', 'as' => 'update']); + Route::delete('{recurrence}', ['uses' => 'RecurrenceController@delete', 'as' => 'delete']); } );