diff --git a/app/Api/V1/Controllers/Models/Budget/StoreController.php b/app/Api/V1/Controllers/Models/Budget/StoreController.php index 656f14c38b..2141b11242 100644 --- a/app/Api/V1/Controllers/Models/Budget/StoreController.php +++ b/app/Api/V1/Controllers/Models/Budget/StoreController.php @@ -23,7 +23,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Budget; use FireflyIII\Api\V1\Controllers\Controller; -use FireflyIII\Api\V1\Requests\BudgetStoreRequest; +use FireflyIII\Api\V1\Requests\Models\Budget\StoreRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\BudgetTransformer; @@ -59,13 +59,13 @@ class StoreController extends Controller /** * Store a budget. * - * @param BudgetStoreRequest $request + * @param StoreRequest $request * * @return JsonResponse * @throws FireflyException * */ - public function store(BudgetStoreRequest $request): JsonResponse + public function store(StoreRequest $request): JsonResponse { $budget = $this->repository->store($request->getAll()); $manager = $this->getManager(); diff --git a/app/Api/V1/Controllers/Models/Budget/UpdateController.php b/app/Api/V1/Controllers/Models/Budget/UpdateController.php index 9aca581620..9afbf2aab4 100644 --- a/app/Api/V1/Controllers/Models/Budget/UpdateController.php +++ b/app/Api/V1/Controllers/Models/Budget/UpdateController.php @@ -23,7 +23,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Budget; use FireflyIII\Api\V1\Controllers\Controller; -use FireflyIII\Api\V1\Requests\BudgetUpdateRequest; +use FireflyIII\Api\V1\Requests\Models\Budget\UpdateRequest; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\BudgetTransformer; @@ -58,12 +58,12 @@ class UpdateController extends Controller /** * Update a budget. * - * @param BudgetUpdateRequest $request - * @param Budget $budget + * @param UpdateRequest $request + * @param Budget $budget * * @return JsonResponse */ - public function update(BudgetUpdateRequest $request, Budget $budget): JsonResponse + public function update(UpdateRequest $request, Budget $budget): JsonResponse { $data = $request->getAll(); $budget = $this->repository->update($budget, $data); diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php b/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php new file mode 100644 index 0000000000..df7de2dd16 --- /dev/null +++ b/app/Api/V1/Controllers/Models/BudgetLimit/DestroyController.php @@ -0,0 +1,79 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\User; +use Illuminate\Http\JsonResponse; + +/** + * Class DestroyController + */ +class DestroyController extends Controller +{ + private BudgetLimitRepositoryInterface $blRepository; + + + /** + * BudgetLimitController constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + /** @var User $user */ + $user = auth()->user(); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->blRepository->setUser($user); + + return $next($request); + } + ); + } + + /** + * Remove the specified resource from storage. + * + * @param Budget $budget + * @param BudgetLimit $budgetLimit + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function destroy(Budget $budget, BudgetLimit $budgetLimit): JsonResponse + { + if ($budget->id !== $budgetLimit->budget_id) { + throw new FireflyException('20028: The budget limit does not belong to the budget.'); + } + $this->blRepository->destroyBudgetLimit($budgetLimit); + + return response()->json([], 204); + } +} \ No newline at end of file diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php new file mode 100644 index 0000000000..0b3e3faa5e --- /dev/null +++ b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php @@ -0,0 +1,122 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Helpers\Collector\GroupCollectorInterface; +use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Support\Http\Api\TransactionFilter; +use FireflyIII\Transformers\TransactionGroupTransformer; +use FireflyIII\User; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; +use League\Fractal\Pagination\IlluminatePaginatorAdapter; +use League\Fractal\Resource\Collection as FractalCollection; + +/** + * Class ListController + */ +class ListController extends Controller +{ + use TransactionFilter; + + private BudgetLimitRepositoryInterface $blRepository; + + + /** + * BudgetLimitController constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + /** @var User $user */ + $user = auth()->user(); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->blRepository->setUser($user); + + return $next($request); + } + ); + } + + + /** + * Show all transactions. + * + * @param Request $request + * @param Budget $budget + * @param BudgetLimit $budgetLimit + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function transactions(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse + { + $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + $type = $request->get('type') ?? 'default'; + $this->parameters->set('type', $type); + + $types = $this->mapTransactionTypes($this->parameters->get('type')); + $manager = $this->getManager(); + + /** @var User $admin */ + $admin = auth()->user(); + + // use new group collector: + /** @var GroupCollectorInterface $collector */ + $collector = app(GroupCollectorInterface::class); + $collector + ->setUser($admin) + // filter on budget. + ->setBudget($budget) + // all info needed for the API: + ->withAPIInformation() + // set page size: + ->setLimit($pageSize) + // set page to retrieve + ->setPage($this->parameters->get('page')) + // set types of transactions to return. + ->setTypes($types); + + $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); + $collector->setTypes($types); + $paginator = $collector->getPaginatedGroups(); + $paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]) . $this->buildParams()); + $transactions = $paginator->getCollection(); + + /** @var TransactionGroupTransformer $transformer */ + $transformer = app(TransactionGroupTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($transactions, $transformer, 'transactions'); + $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/BudgetLimit/ShowController.php b/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php new file mode 100644 index 0000000000..9050781296 --- /dev/null +++ b/app/Api/V1/Controllers/Models/BudgetLimit/ShowController.php @@ -0,0 +1,123 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit; + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Transformers\BudgetLimitTransformer; +use FireflyIII\User; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; +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 BudgetLimitRepositoryInterface $blRepository; + private BudgetRepositoryInterface $repository; + + /** + * BudgetLimitController constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + /** @var User $user */ + $user = auth()->user(); + $this->repository = app(BudgetRepositoryInterface::class); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->repository->setUser($user); + $this->blRepository->setUser($user); + + return $next($request); + } + ); + } + + /** + * Display a listing of the budget limits for this budget.. + * + * @param Request $request + * + * @return JsonResponse + * @codeCoverageIgnore + */ + public function index(Request $request, Budget $budget): JsonResponse + { + $manager = $this->getManager(); + $manager->parseIncludes('budget'); + $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); + $count = $collection->count(); + $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); + $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); + $paginator->setPath(route('api.v1.budgets.limits.index', [$budget->id]) . $this->buildParams()); + + /** @var BudgetLimitTransformer $transformer */ + $transformer = app(BudgetLimitTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); + $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); + } + + /** + * @param Request $request + * @param Budget $budget + * @param BudgetLimit $budgetLimit + * + * @return JsonResponse + */ + public function show(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse + { + if ($budget->id !== $budgetLimit->budget_id) { + throw new FireflyException('20028: The budget limit does not belong to the budget.'); + } + // continue! + $manager = $this->getManager(); + + /** @var BudgetLimitTransformer $transformer */ + $transformer = app(BudgetLimitTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + + 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/BudgetLimit/StoreController.php b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php new file mode 100644 index 0000000000..c623b0909e --- /dev/null +++ b/app/Api/V1/Controllers/Models/BudgetLimit/StoreController.php @@ -0,0 +1,92 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Api\V1\Requests\Models\BudgetLimit\StoreRequest; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Transformers\BudgetLimitTransformer; +use FireflyIII\User; +use Illuminate\Http\JsonResponse; +use League\Fractal\Resource\Item; + +/** + * Class StoreController + */ +class StoreController extends Controller +{ + private BudgetLimitRepositoryInterface $blRepository; + + + /** + * BudgetLimitController constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + /** @var User $user */ + $user = auth()->user(); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->blRepository->setUser($user); + + return $next($request); + } + ); + } + + + /** + * Store a newly created resource in storage. + * + * @param StoreRequest $request + * + * @return JsonResponse + * @throws FireflyException + * + */ + public function store(StoreRequest $request, Budget $budget): JsonResponse + { + $data = $request->getAll(); + $data['start_date'] = $data['start']; + $data['end_date'] = $data['end']; + $data['budget_id'] = $budget->id; + + $budgetLimit = $this->blRepository->store($data); + $manager = $this->getManager(); + + + /** @var BudgetLimitTransformer $transformer */ + $transformer = app(BudgetLimitTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + + 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/BudgetLimit/UpdateController.php b/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php new file mode 100644 index 0000000000..56e2da1058 --- /dev/null +++ b/app/Api/V1/Controllers/Models/BudgetLimit/UpdateController.php @@ -0,0 +1,94 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit; + + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Api\V1\Requests\Models\BudgetLimit\UpdateRequest; +use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Transformers\BudgetLimitTransformer; +use FireflyIII\User; +use Illuminate\Http\JsonResponse; +use League\Fractal\Resource\Item; + +/** + * Class UpdateController + */ +class UpdateController extends Controller +{ + private BudgetLimitRepositoryInterface $blRepository; + + + /** + * BudgetLimitController constructor. + * + * @codeCoverageIgnore + */ + public function __construct() + { + parent::__construct(); + $this->middleware( + function ($request, $next) { + /** @var User $user */ + $user = auth()->user(); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->blRepository->setUser($user); + + return $next($request); + } + ); + } + + /** + * Update the specified resource in storage. + * + * @param UpdateRequest $request + * @param Budget $budget + * @param BudgetLimit $budgetLimit + * + * @return JsonResponse + */ + public function update(UpdateRequest $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse + { + + if ($budget->id !== $budgetLimit->budget_id) { + throw new FireflyException('20028: The budget limit does not belong to the budget.'); + } + $data = $request->getAll(); + $data['budget_id'] = $budget->id; + $budgetLimit = $this->blRepository->update($budgetLimit, $data); + $manager = $this->getManager(); + + /** @var BudgetLimitTransformer $transformer */ + $transformer = app(BudgetLimitTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($budgetLimit, $transformer, 'budget_limits'); + + 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/todo/BudgetLimitController.php b/app/Api/V1/Controllers/todo/BudgetLimitController.php deleted file mode 100644 index a6dc66e3ff..0000000000 --- a/app/Api/V1/Controllers/todo/BudgetLimitController.php +++ /dev/null @@ -1,259 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace FireflyIII\Api\V1\Controllers; - - -use FireflyIII\Api\V1\Requests\BudgetLimitStoreRequest; -use FireflyIII\Api\V1\Requests\BudgetLimitUpdateRequest; -use FireflyIII\Exceptions\FireflyException; -use FireflyIII\Helpers\Collector\GroupCollectorInterface; -use FireflyIII\Models\BudgetLimit; -use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; -use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; -use FireflyIII\Support\Http\Api\TransactionFilter; -use FireflyIII\Transformers\BudgetLimitTransformer; -use FireflyIII\Transformers\TransactionGroupTransformer; -use FireflyIII\User; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; -use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; -use League\Fractal\Pagination\IlluminatePaginatorAdapter; -use League\Fractal\Resource\Collection as FractalCollection; -use League\Fractal\Resource\Item; - -/** - * Class BudgetLimitController. - */ -class BudgetLimitController extends Controller -{ - use TransactionFilter; - - private BudgetLimitRepositoryInterface $blRepository; - private BudgetRepositoryInterface $repository; - - - /** - * BudgetLimitController constructor. - * - * @codeCoverageIgnore - */ - public function __construct() - { - parent::__construct(); - $this->middleware( - function ($request, $next) { - /** @var User $user */ - $user = auth()->user(); - $this->repository = app(BudgetRepositoryInterface::class); - $this->blRepository = app(BudgetLimitRepositoryInterface::class); - $this->repository->setUser($user); - $this->blRepository->setUser($user); - - return $next($request); - } - ); - } - - /** - * Remove the specified resource from storage. - * - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function delete(BudgetLimit $budgetLimit): JsonResponse - { - $this->blRepository->destroyBudgetLimit($budgetLimit); - - return response()->json([], 204); - } - - /** - * Display a listing of the resource. - * - * @param Request $request - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function index(Request $request): JsonResponse - { - $manager = $this->getManager(); - $manager->parseIncludes('budget'); - $budgetId = (int)($request->get('budget_id') ?? 0); - $budget = $this->repository->findNull($budgetId); - $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - $this->parameters->set('budget_id', $budgetId); - - $collection = new Collection; - if (null === $budget) { - $collection = $this->blRepository->getAllBudgetLimits($this->parameters->get('start'), $this->parameters->get('end')); - } - if (null !== $budget) { - $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); - } - - $count = $collection->count(); - $budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); - $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); - $paginator->setPath(route('api.v1.budget_limits.index') . $this->buildParams()); - - /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits'); - $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * Display the specified resource. - * - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function show(BudgetLimit $budgetLimit): JsonResponse - { - $manager = $this->getManager(); - - /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * Store a newly created resource in storage. - * - * @param BudgetLimitStoreRequest $request - * - * @return JsonResponse - * @throws FireflyException - * - */ - public function store(BudgetLimitStoreRequest $request): JsonResponse - { - $data = $request->getAll(); - $data['start_date'] = $data['start']; - $data['end_date'] = $data['end']; - - $budgetLimit = $this->blRepository->store($data); - $manager = $this->getManager(); - - - /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * Show all transactions. - * - * @param Request $request - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - * @codeCoverageIgnore - */ - public function transactions(Request $request, BudgetLimit $budgetLimit): JsonResponse - { - $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - $type = $request->get('type') ?? 'default'; - $this->parameters->set('type', $type); - - $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = $this->getManager(); - - /** @var User $admin */ - $admin = auth()->user(); - - // use new group collector: - /** @var GroupCollectorInterface $collector */ - $collector = app(GroupCollectorInterface::class); - $collector - ->setUser($admin) - // filter on budget. - ->setBudget($budgetLimit->budget) - // all info needed for the API: - ->withAPIInformation() - // set page size: - ->setLimit($pageSize) - // set page to retrieve - ->setPage($this->parameters->get('page')) - // set types of transactions to return. - ->setTypes($types); - - $collector->setRange($budgetLimit->start_date, $budgetLimit->end_date); - $collector->setTypes($types); - $paginator = $collector->getPaginatedGroups(); - $paginator->setPath(route('api.v1.budget_limits.transactions', [$budgetLimit->id]) . $this->buildParams()); - $transactions = $paginator->getCollection(); - - /** @var TransactionGroupTransformer $transformer */ - $transformer = app(TransactionGroupTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new FractalCollection($transactions, $transformer, 'transactions'); - $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - } - - /** - * Update the specified resource in storage. - * - * @param BudgetLimitUpdateRequest $request - * @param BudgetLimit $budgetLimit - * - * @return JsonResponse - */ - public function update(BudgetLimitUpdateRequest $request, BudgetLimit $budgetLimit): JsonResponse - { - $data = $request->getAll(); - $budgetLimit = $this->blRepository->update($budgetLimit, $data); - $manager = $this->getManager(); - - /** @var BudgetLimitTransformer $transformer */ - $transformer = app(BudgetLimitTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($budgetLimit, $transformer, 'budget_limits'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); - - } -} diff --git a/app/Api/V1/Requests/todo/BudgetStoreRequest.php b/app/Api/V1/Requests/Models/Budget/StoreRequest.php similarity index 96% rename from app/Api/V1/Requests/todo/BudgetStoreRequest.php rename to app/Api/V1/Requests/Models/Budget/StoreRequest.php index 1711eedfe0..49506d96aa 100644 --- a/app/Api/V1/Requests/todo/BudgetStoreRequest.php +++ b/app/Api/V1/Requests/Models/Budget/StoreRequest.php @@ -21,7 +21,7 @@ declare(strict_types=1); -namespace FireflyIII\Api\V1\Requests; +namespace FireflyIII\Api\V1\Requests\Models\Budget; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ChecksLogin; @@ -31,11 +31,11 @@ use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Validator; /** - * Class BudgetStoreRequest + * Class StoreRequest * * @codeCoverageIgnore */ -class BudgetStoreRequest extends FormRequest +class StoreRequest extends FormRequest { use ConvertsDataTypes, ValidatesAutoBudgetRequest, ChecksLogin; diff --git a/app/Api/V1/Requests/todo/BudgetUpdateRequest.php b/app/Api/V1/Requests/Models/Budget/UpdateRequest.php similarity index 96% rename from app/Api/V1/Requests/todo/BudgetUpdateRequest.php rename to app/Api/V1/Requests/Models/Budget/UpdateRequest.php index 17b3bbd13c..697b2814ce 100644 --- a/app/Api/V1/Requests/todo/BudgetUpdateRequest.php +++ b/app/Api/V1/Requests/Models/Budget/UpdateRequest.php @@ -21,7 +21,7 @@ declare(strict_types=1); -namespace FireflyIII\Api\V1\Requests; +namespace FireflyIII\Api\V1\Requests\Models\Budget; use FireflyIII\Rules\IsBoolean; use FireflyIII\Support\Request\ChecksLogin; @@ -31,11 +31,11 @@ use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Validator; /** - * Class BudgetUpdateRequest + * Class UpdateRequest * * @codeCoverageIgnore */ -class BudgetUpdateRequest extends FormRequest +class UpdateRequest extends FormRequest { use ConvertsDataTypes, ValidatesAutoBudgetRequest, ChecksLogin; diff --git a/app/Api/V1/Requests/todo/BudgetLimitStoreRequest.php b/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php similarity index 88% rename from app/Api/V1/Requests/todo/BudgetLimitStoreRequest.php rename to app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php index 944df63de1..e97d870d66 100644 --- a/app/Api/V1/Requests/todo/BudgetLimitStoreRequest.php +++ b/app/Api/V1/Requests/Models/BudgetLimit/StoreRequest.php @@ -21,18 +21,18 @@ declare(strict_types=1); -namespace FireflyIII\Api\V1\Requests; +namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** - * Class BudgetLimitStoreRequest + * Class StoreRequest * * @codeCoverageIgnore */ -class BudgetLimitStoreRequest extends FormRequest +class StoreRequest extends FormRequest { use ConvertsDataTypes, ChecksLogin; @@ -44,7 +44,6 @@ class BudgetLimitStoreRequest extends FormRequest public function getAll(): array { return [ - 'budget_id' => $this->integer('budget_id'), 'start' => $this->date('start'), 'end' => $this->date('end'), 'amount' => $this->string('amount'), @@ -61,7 +60,6 @@ class BudgetLimitStoreRequest extends FormRequest public function rules(): array { return [ - 'budget_id' => 'required|exists:budgets,id|belongsToUser:budgets,id', 'start' => 'required|before:end|date', 'end' => 'required|after:start|date', 'amount' => 'required|gt:0', diff --git a/app/Api/V1/Requests/todo/BudgetLimitUpdateRequest.php b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php similarity index 66% rename from app/Api/V1/Requests/todo/BudgetLimitUpdateRequest.php rename to app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php index b83566a3db..aa4b406440 100644 --- a/app/Api/V1/Requests/todo/BudgetLimitUpdateRequest.php +++ b/app/Api/V1/Requests/Models/BudgetLimit/UpdateRequest.php @@ -21,18 +21,18 @@ declare(strict_types=1); -namespace FireflyIII\Api\V1\Requests; +namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; /** - * Class BudgetLimitUpdateRequest + * Class UpdateRequest * * @codeCoverageIgnore */ -class BudgetLimitUpdateRequest extends FormRequest +class UpdateRequest extends FormRequest { use ConvertsDataTypes, ChecksLogin; @@ -43,20 +43,13 @@ class BudgetLimitUpdateRequest extends FormRequest */ public function getAll(): array { - $data = [ - 'budget_id' => $this->integer('budget_id'), +return [ 'start' => $this->date('start'), 'end' => $this->date('end'), 'amount' => $this->string('amount'), 'currency_id' => $this->integer('currency_id'), 'currency_code' => $this->string('currency_code'), ]; - // if request has a budget already, drop the rule. - $budget = $this->route()->parameter('budget'); - if (null !== $budget) { - $data['budget_id'] = $budget->id; - } - return $data; } /** @@ -66,21 +59,13 @@ class BudgetLimitUpdateRequest extends FormRequest */ public function rules(): array { - $rules = [ - 'budget_id' => 'required|exists:budgets,id|belongsToUser:budgets,id', - 'start' => 'required|before:end|date', - 'end' => 'required|after:start|date', - 'amount' => 'required|gt:0', + return [ + 'start' => 'before:end|date', + 'end' => 'after:start|date', + 'amount' => 'gt:0', 'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_code' => 'min:3|max:3|exists:transaction_currencies,code', ]; - // if request has a budget already, drop the rule. - $budget = $this->route()->parameter('budget'); - if (null !== $budget) { - unset($rules['budget_id']); - } - - return $rules; } } diff --git a/app/Transformers/BudgetLimitTransformer.php b/app/Transformers/BudgetLimitTransformer.php index 3183ac1066..0e81a6dc2a 100644 --- a/app/Transformers/BudgetLimitTransformer.php +++ b/app/Transformers/BudgetLimitTransformer.php @@ -84,20 +84,19 @@ class BudgetLimitTransformer extends AbstractTransformer $amount = number_format((float)$amount, $currencyDecimalPlaces, '.', ''); return [ - 'id' => (int)$budgetLimit->id, + 'id' => (string) $budgetLimit->id, 'created_at' => $budgetLimit->created_at->toAtomString(), 'updated_at' => $budgetLimit->updated_at->toAtomString(), 'start' => $budgetLimit->start_date->format('Y-m-d'), 'end' => $budgetLimit->end_date->format('Y-m-d'), - 'budget_id' => (int)$budgetLimit->budget_id, - 'currency_id' => $currencyId, + 'budget_id' => (string)$budgetLimit->budget_id, + 'currency_id' => (string) $currencyId, 'currency_code' => $currencyCode, 'currency_name' => $currencyName, - 'currency_decimal_places' => $currencyName, + 'currency_decimal_places' => $currencyDecimalPlaces, 'currency_symbol' => $currencySymbol, 'amount' => $amount, 'period' => $budgetLimit->period, - 'auto_budget' => $budgetLimit->auto_budget, 'spent' => $expenses[$currencyId]['sum'] ?? '0', 'links' => [ [ diff --git a/app/Transformers/BudgetTransformer.php b/app/Transformers/BudgetTransformer.php index cc0cd4705b..87103b5977 100644 --- a/app/Transformers/BudgetTransformer.php +++ b/app/Transformers/BudgetTransformer.php @@ -89,14 +89,14 @@ class BudgetTransformer extends AbstractTransformer } return [ - 'id' => (int)$budget->id, + 'id' => (string)$budget->id, 'created_at' => $budget->created_at->toAtomString(), 'updated_at' => $budget->updated_at->toAtomString(), 'active' => $budget->active, 'name' => $budget->name, 'auto_budget_type' => $abType, 'auto_budget_period' => $abPeriod, - 'auto_budget_currency_id' => $abCurrencyId, + 'auto_budget_currency_id' => (string)$abCurrencyId, 'auto_budget_currency_code' => $abCurrencyCode, 'auto_budget_amount' => $abAmount, 'spent' => $spent, diff --git a/routes/api.php b/routes/api.php index 253c2137a8..dd0a2efc63 100644 --- a/routes/api.php +++ b/routes/api.php @@ -213,6 +213,33 @@ Route::group( +// Budget and Budget Limit API routes: +Route::group( + ['namespace' => 'FireflyIII\Api\V1\Controllers\Models', 'prefix' => 'budgets', + 'as' => 'api.v1.budgets.',], + static function () { + Route::get('', ['uses' => 'Budget\ShowController@index', 'as' => 'index']); + Route::post('', ['uses' => 'Budget\StoreController@store', 'as' => 'store']); + Route::get('{budget}', ['uses' => 'Budget\ShowController@show', 'as' => 'show']); + Route::put('{budget}', ['uses' => 'Budget\UpdateController@update', 'as' => 'update']); + Route::delete('{budget}', ['uses' => 'Budget\DestroyController@destroy', 'as' => 'delete']); + + Route::get('{budget}/transactions', ['uses' => 'Budget\ListController@transactions', 'as' => 'transactions']); + Route::get('{budget}/attachments', ['uses' => 'Budget\ListController@attachments', 'as' => 'attachments']); + + // limits: + Route::get('{budget}/limits', ['uses' => 'BudgetLimit\ShowController@index', 'as' => 'limits.index']); + Route::post('{budget}/limits', ['uses' => 'BudgetLimit\StoreController@store', 'as' => 'limits.store']); + Route::get('{budget}/limits/{budgetLimit}', ['uses' => 'BudgetLimit\ShowController@show', 'as' => 'limits.show']); + Route::put('{budget}/limits/{budgetLimit}', ['uses' => 'BudgetLimit\UpdateController@update', 'as' => 'limits.update']); + Route::delete('{budget}/limits/{budgetLimit}', ['uses' => 'BudgetLimit\DestroyController@destroy', 'as' => 'limits.delete']); + Route::get('{budget}/limits/{budgetLimit}/transactions', ['uses' => 'BudgetLimit\ListController@transactions', 'as' => 'limits.transactions']); + + } +); + + + @@ -263,17 +290,17 @@ Route::group( // ABOUT FIREFLY III // TODO VERIFY API DOCS -Route::group( - [ - 'namespace' => 'FireflyIII\Api\V1\Controllers\System', 'prefix' => 'about', - 'as' => 'api.v1.about.'], - static function () { - - // Accounts API routes: - Route::get('', ['uses' => 'AboutController@about', 'as' => 'index']); - Route::get('user', ['uses' => 'AboutController@user', 'as' => 'user']); - } -); +//Route::group( +// [ +// 'namespace' => 'FireflyIII\Api\V1\Controllers\System', 'prefix' => 'about', +// 'as' => 'api.v1.about.'], +// static function () { +// +// // Accounts API routes: +// Route::get('', ['uses' => 'AboutController@about', 'as' => 'index']); +// Route::get('user', ['uses' => 'AboutController@user', 'as' => 'user']); +// } +//); // DYNAMIC CONFIGURATION (CHANGEABLE) @@ -346,42 +373,7 @@ Route::group( } ); -// TODO VERIFY API DOCS -Route::group( - ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets/limits', - 'as' => 'api.v1.budget_limits.',], - static function () { - // Budget Limit API routes: - Route::get('', ['uses' => 'BudgetLimitController@index', 'as' => 'index']); - Route::post('', ['uses' => 'BudgetLimitController@store', 'as' => 'store']); - Route::get('{budgetLimit}', ['uses' => 'BudgetLimitController@show', 'as' => 'show']); - Route::put('{budgetLimit}', ['uses' => 'BudgetLimitController@update', 'as' => 'update']); - Route::delete('{budgetLimit}', ['uses' => 'BudgetLimitController@delete', 'as' => 'delete']); - - Route::get('{budgetLimit}/transactions', ['uses' => 'BudgetLimitController@transactions', 'as' => 'transactions']); - } -); - -// TODO VERIFY API DOCS -Route::group( - ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets', - 'as' => 'api.v1.budgets.',], - static function () { - - // Budget API routes: - Route::get('', ['uses' => 'Models\Budget\ShowController@index', 'as' => 'index']); - Route::post('', ['uses' => 'Models\Budget\StoreController@store', 'as' => 'store']); - Route::get('{budget}', ['uses' => 'Models\Budget\ShowController@show', 'as' => 'show']); - Route::put('{budget}', ['uses' => 'Models\Budget\UpdateController@update', 'as' => 'update']); - Route::delete('{budget}', ['uses' => 'Models\Budget\DestroyController@destroy', 'as' => 'delete']); - Route::post('{budget}/limits', ['uses' => 'BudgetLimitController@store', 'as' => 'store_budget_limit']); - - Route::get('{budget}/transactions', ['uses' => 'Models\Budget\ListController@transactions', 'as' => 'transactions']); - Route::get('{budget}/attachments', ['uses' => 'Models\Budget\ListController@attachments', 'as' => 'attachments']); - Route::get('{budget}/limits', ['uses' => 'Models\Budget\ListController@budgetLimits', 'as' => 'budget_limits']); - } -); // TODO VERIFY API DOCS Route::group(