diff --git a/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php b/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php new file mode 100644 index 0000000000..99fdc7c03e --- /dev/null +++ b/app/Api/V1/Controllers/Models/PiggyBank/DestroyController.php @@ -0,0 +1,70 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Models\PiggyBank; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use Illuminate\Http\JsonResponse; + +/** + * Class DestroyController + */ +class DestroyController extends Controller +{ + private PiggyBankRepositoryInterface $repository; + + /** + * Constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(PiggyBankRepositoryInterface::class); + $this->repository->setUser(auth()->user()); + + + return $next($request); + } + ); + } + + /** + * Delete the resource. + * + * @param PiggyBank $piggyBank + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function destroy(PiggyBank $piggyBank): JsonResponse + { + $this->repository->destroy($piggyBank); + + return response()->json([], 204); + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/Models/PiggyBank/ListController.php b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php new file mode 100644 index 0000000000..d4b65206f0 --- /dev/null +++ b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php @@ -0,0 +1,122 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Models\PiggyBank; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use FireflyIII\Transformers\AttachmentTransformer; +use FireflyIII\Transformers\PiggyBankEventTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Pagination\LengthAwarePaginator; +use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use League\Fractal\Resource\Collection as FractalCollection; + +/** + * Class ListController + */ +class ListController extends Controller +{ + private PiggyBankRepositoryInterface $repository; + + /** + * Constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(PiggyBankRepositoryInterface::class); + $this->repository->setUser(auth()->user()); + + + return $next($request); + } + ); + } + + /** + * @param PiggyBank $piggyBank + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function attachments(PiggyBank $piggyBank): JsonResponse + { + $manager = $this->getManager(); + $pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + $collection = $this->repository->getAttachments($piggyBank); + + $count = $collection->count(); + $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + + // make paginator: + $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.piggy_banks.attachments', [$piggyBank->id]) . $this->buildParams()); + + /** @var AttachmentTransformer $transformer */ + $transformer = app(AttachmentTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($attachments, $transformer, 'attachments'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + } + + /** + * List single resource. + * + * @param PiggyBank $piggyBank + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse + { + // types to get, page size: + $pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + $manager = $this->getManager(); + + $collection = $this->repository->getEvents($piggyBank); + $count = $collection->count(); + $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + + // make paginator: + $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.piggy_banks.events', [$piggyBank->id]) . $this->buildParams()); + + /** @var PiggyBankEventTransformer $transformer */ + $transformer = app(PiggyBankEventTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php b/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php new file mode 100644 index 0000000000..f9d5ddd584 --- /dev/null +++ b/app/Api/V1/Controllers/Models/PiggyBank/ShowController.php @@ -0,0 +1,114 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Models\PiggyBank; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use FireflyIII\Transformers\PiggyBankTransformer; +use Illuminate\Http\JsonResponse; +use Illuminate\Pagination\LengthAwarePaginator; +use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use League\Fractal\Resource\Collection as FractalCollection; +use League\Fractal\Resource\Item; + +/** + * Class ShowController + */ +class ShowController extends Controller +{ + private PiggyBankRepositoryInterface $repository; + + /** + * Constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(PiggyBankRepositoryInterface::class); + $this->repository->setUser(auth()->user()); + + + return $next($request); + } + ); + } + + /** + * List all of them. + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function index(): JsonResponse + { + $manager = $this->getManager(); + // 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->getPiggyBanks(); + $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.piggy_banks.index') . $this->buildParams()); + + /** @var PiggyBankTransformer $transformer */ + $transformer = app(PiggyBankTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + + } + + /** + * List single resource. + * + * @param PiggyBank $piggyBank + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function show(PiggyBank $piggyBank): JsonResponse + { + $manager = $this->getManager(); + + /** @var PiggyBankTransformer $transformer */ + $transformer = app(PiggyBankTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php b/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php new file mode 100644 index 0000000000..cf2aa30a58 --- /dev/null +++ b/app/Api/V1/Controllers/Models/PiggyBank/StoreController.php @@ -0,0 +1,80 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Api\V1\Requests\PiggyBankStoreRequest; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use FireflyIII\Transformers\PiggyBankTransformer; +use Illuminate\Http\JsonResponse; +use League\Fractal\Resource\Item; + +/** + * Class StoreController + */ +class StoreController extends Controller +{ + private PiggyBankRepositoryInterface $repository; + + /** + * Constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(PiggyBankRepositoryInterface::class); + $this->repository->setUser(auth()->user()); + + + return $next($request); + } + ); + } + + /** + * Store new object. + * + * @param PiggyBankStoreRequest $request + * + * @return JsonResponse + * @throws FireflyException + */ + public function store(PiggyBankStoreRequest $request): JsonResponse + { + $piggyBank = $this->repository->store($request->getAll()); + $manager = $this->getManager(); + + /** @var PiggyBankTransformer $transformer */ + $transformer = app(PiggyBankTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php b/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php new file mode 100644 index 0000000000..3e8c272467 --- /dev/null +++ b/app/Api/V1/Controllers/Models/PiggyBank/UpdateController.php @@ -0,0 +1,86 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Api\V1\Requests\PiggyBankUpdateRequest; +use FireflyIII\Models\PiggyBank; +use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; +use FireflyIII\Transformers\PiggyBankTransformer; +use Illuminate\Http\JsonResponse; +use League\Fractal\Resource\Item; + +/** + * Class UpdateController + */ +class UpdateController extends Controller +{ + private PiggyBankRepositoryInterface $repository; + + /** + * Constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + $this->repository = app(PiggyBankRepositoryInterface::class); + $this->repository->setUser(auth()->user()); + + + return $next($request); + } + ); + } + + /** + * Update piggy bank. + * + * @param PiggyBankUpdateRequest $request + * @param PiggyBank $piggyBank + * + * @return JsonResponse + */ + public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank): JsonResponse + { + $data = $request->getAll(); + $piggyBank = $this->repository->update($piggyBank, $data); + + if ('' !== $data['current_amount']) { + $this->repository->setCurrentAmount($piggyBank, $data['current_amount']); + } + + $manager = $this->getManager(); + /** @var PiggyBankTransformer $transformer */ + $transformer = app(PiggyBankTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/PiggyBankController.php b/app/Api/V1/Controllers/PiggyBankController.php deleted file mode 100644 index b61dc029f4..0000000000 --- a/app/Api/V1/Controllers/PiggyBankController.php +++ /dev/null @@ -1,251 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace FireflyIII\Api\V1\Controllers; - -use FireflyIII\Api\V1\Requests\PiggyBankUpdateRequest; -use FireflyIII\Api\V1\Requests\PiggyBankStoreRequest; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Models\PiggyBank; -use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; -use FireflyIII\Transformers\AttachmentTransformer; -use FireflyIII\Transformers\PiggyBankEventTransformer; -use FireflyIII\Transformers\PiggyBankTransformer; -use FireflyIII\User; -use Illuminate\Http\JsonResponse; -use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Pagination\IlluminatePaginatorAdapter; -use League\Fractal\Resource\Collection as FractalCollection; -use League\Fractal\Resource\Item; - -/** - * Class PiggyBankController. - */ -class PiggyBankController extends Controller -{ - private PiggyBankRepositoryInterface $repository; - - /** - * PiggyBankController constructor. - * - * @codeCoverageIgnore - */ - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - /** @var User $admin */ - $admin = auth()->user(); - - $this->repository = app(PiggyBankRepositoryInterface::class); - $this->repository->setUser($admin); - - - return $next($request); - } - ); - } - - /** - * Delete the resource. - * - * @param PiggyBank $piggyBank - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function delete(PiggyBank $piggyBank): JsonResponse - { - $this->repository->destroy($piggyBank); - - return response()->json([], 204); - } - - - /** - * @param PiggyBank $piggyBank - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function attachments(PiggyBank $piggyBank): JsonResponse - { - $manager = $this->getManager(); - $pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - $collection = $this->repository->getAttachments($piggyBank); - - $count = $collection->count(); - $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - - // make paginator: - $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.piggy_banks.attachments', [$piggyBank->id]) . $this->buildParams()); - - /** @var AttachmentTransformer $transformer */ - $transformer = app(AttachmentTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new FractalCollection($attachments, $transformer, 'attachments'); - $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * List all of them. - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function index(): JsonResponse - { - $manager = $this->getManager(); - // 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->getPiggyBanks(); - $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.piggy_banks.index') . $this->buildParams()); - - /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks'); - $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - - } - - /** - * List single resource. - * - * @param PiggyBank $piggyBank - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse - { - // types to get, page size: - $pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - $manager = $this->getManager(); - - $collection = $this->repository->getEvents($piggyBank); - $count = $collection->count(); - $events = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - - // make paginator: - $paginator = new LengthAwarePaginator($events, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.piggy_banks.events', [$piggyBank->id]) . $this->buildParams()); - - /** @var PiggyBankEventTransformer $transformer */ - $transformer = app(PiggyBankEventTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new FractalCollection($events, $transformer, 'piggy_bank_events'); - $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - - } - - /** - * List single resource. - * - * @param PiggyBank $piggyBank - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function show(PiggyBank $piggyBank): JsonResponse - { - $manager = $this->getManager(); - - /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - - } - - /** - * Store new object. - * - * @param PiggyBankStoreRequest $request - * - * @return JsonResponse - * @throws FireflyException - */ - public function store(PiggyBankStoreRequest $request): JsonResponse - { - $piggyBank = $this->repository->store($request->getAll()); - $manager = $this->getManager(); - - /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * Update piggy bank. - * - * @param PiggyBankUpdateRequest $request - * @param PiggyBank $piggyBank - * - * @return JsonResponse - */ - public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank): JsonResponse - { - $data = $request->getAll(); - $piggyBank = $this->repository->update($piggyBank, $data); - - if ('' !== $data['current_amount']) { - $this->repository->setCurrentAmount($piggyBank, $data['current_amount']); - } - - $manager = $this->getManager(); - /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - - } -}