diff --git a/app/Api/V1/Requests/PiggyBankStoreRequest.php b/app/Api/V1/Requests/PiggyBankStoreRequest.php index 5099df3a5e..d18bce2705 100644 --- a/app/Api/V1/Requests/PiggyBankStoreRequest.php +++ b/app/Api/V1/Requests/PiggyBankStoreRequest.php @@ -44,15 +44,15 @@ class PiggyBankStoreRequest extends FormRequest public function getAll(): array { return [ - 'name' => $this->string('name'), - 'account_id' => $this->integer('account_id'), - 'targetamount' => $this->string('target_amount'), - 'current_amount' => $this->string('current_amount'), - 'startdate' => $this->date('start_date'), - 'targetdate' => $this->date('target_date'), - 'notes' => $this->nlString('notes'), - 'object_group_id' => $this->integer('object_group_id'), - 'object_group' => $this->string('object_group_name'), + 'name' => $this->string('name'), + 'account_id' => $this->integer('account_id'), + 'targetamount' => $this->string('target_amount'), + 'current_amount' => $this->string('current_amount'), + 'startdate' => $this->date('start_date'), + 'targetdate' => $this->date('target_date'), + 'notes' => $this->nlString('notes'), + 'object_group_id' => $this->integer('object_group_id'), + 'object_group_title' => $this->string('object_group_title'), ]; } @@ -64,14 +64,15 @@ class PiggyBankStoreRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required|between:1,255|uniquePiggyBankForUser', - 'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], - 'account_id' => 'required|numeric|belongsToUser:accounts,id', - 'object_group_id' => 'numeric|belongsToUser:object_groups,id', - 'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'], - 'start_date' => 'date|nullable', - 'target_date' => 'date|nullable|after:start_date', - 'notes' => 'max:65000', + 'name' => 'required|between:1,255|uniquePiggyBankForUser', + 'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], + 'account_id' => 'required|numeric|belongsToUser:accounts,id', + 'object_group_id' => 'numeric|belongsToUser:object_groups,id', + 'object_group_title' => 'between:1,255', + 'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'], + 'start_date' => 'date|nullable', + 'target_date' => 'date|nullable|after:start_date', + 'notes' => 'max:65000', ]; } diff --git a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php index ce01799a0d..256f344885 100644 --- a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php +++ b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php @@ -105,7 +105,7 @@ trait ModifiesPiggyBanks $leftOnAccount = $this->leftOnAccount($piggyBank, today(config('app.timezone'))); $savedSoFar = (string)$this->getRepetition($piggyBank)->currentamount; $leftToSave = bcsub($piggyBank->targetamount, $savedSoFar); - $maxAmount = (string)min(round((float) $leftOnAccount, 12), round((float)$leftToSave, 12)); + $maxAmount = (string)min(round((float)$leftOnAccount, 12), round((float)$leftToSave, 12)); $compare = bccomp($amount, $maxAmount); $result = $compare <= 0; @@ -286,11 +286,14 @@ trait ModifiesPiggyBanks public function store(array $data): PiggyBank { $data['order'] = $this->getMaxOrder() + 1; + $piggyData = $data; + // unset fields just in case. + unset($piggyData['object_group_title'], $piggyData['object_group_id'], $piggyData['notes'], $piggyData['current_amount']); try { /** @var PiggyBank $piggyBank */ - $piggyBank = PiggyBank::create($data); + $piggyBank = PiggyBank::create($piggyData); } catch (QueryException $e) { - Log::error(sprintf('Could not store piggy bank: %s', $e->getMessage())); + Log::error(sprintf('Could not store piggy bank: %s', $e->getMessage()), $piggyData); throw new FireflyException('400005: Could not store new piggy bank.'); } @@ -303,15 +306,16 @@ trait ModifiesPiggyBanks $repetition->save(); } - $objectGroupTitle = $data['object_group'] ?? ''; + $objectGroupTitle = $data['object_group_title'] ?? ''; if ('' !== $objectGroupTitle) { $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); if (null !== $objectGroup) { $piggyBank->objectGroups()->sync([$objectGroup->id]); $piggyBank->save(); } + } - // try also with ID: + // try also with ID $objectGroupId = (int)($data['object_group_id'] ?? 0); if (0 !== $objectGroupId) { $objectGroup = $this->findObjectGroupById($objectGroupId); diff --git a/routes/api.php b/routes/api.php index c1b10c62d0..ce9e8c6b1d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -72,7 +72,7 @@ Route::group( ); - +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'accounts', 'as' => 'api.v1.accounts.',], @@ -91,6 +91,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers\Autocomplete', 'prefix' => 'autocomplete', 'as' => 'api.v1.autocomplete.',], @@ -112,6 +113,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'groups', 'as' => 'api.v1.object-groups.',], @@ -127,6 +129,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'attachments', 'as' => 'api.v1.attachments.',], @@ -143,6 +146,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'available_budgets', 'as' => 'api.v1.available_budgets.',], @@ -157,6 +161,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'bills', 'as' => 'api.v1.bills.',], @@ -175,6 +180,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets/limits', 'as' => 'api.v1.budget_limits.',], @@ -191,6 +197,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'budgets', 'as' => 'api.v1.budgets.',], @@ -210,6 +217,7 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'categories', 'as' => 'api.v1.categories.',], @@ -232,6 +240,7 @@ Route::group( */ // Accounts +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/account', 'as' => 'api.v1.chart.account.',], @@ -243,6 +252,7 @@ Route::group( ); // Available budgets +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/ab', 'as' => 'api.v1.chart.ab.',], @@ -254,6 +264,7 @@ Route::group( ); // Budgets +// TODO VERIFY API DOCS Route::group( ['namespace' => 'FireflyIII\Api\V1\Controllers\Chart', 'prefix' => 'chart/budget', 'as' => 'api.v1.chart.budget.',], @@ -315,20 +326,21 @@ Route::group( } ); +// TODO VERIFY API DOCS Route::group( - ['namespace' => 'FireflyIII\Api\V1\Controllers', 'prefix' => 'piggy_banks', + ['namespace' => 'FireflyIII\Api\V1\Controllers\Models\PiggyBank', 'prefix' => 'piggy_banks', 'as' => 'api.v1.piggy_banks.',], static function () { // Piggy Bank API routes: - Route::get('', ['uses' => 'PiggyBankController@index', 'as' => 'index']); - Route::post('', ['uses' => 'PiggyBankController@store', 'as' => 'store']); - Route::get('{piggyBank}', ['uses' => 'PiggyBankController@show', 'as' => 'show']); - Route::put('{piggyBank}', ['uses' => 'PiggyBankController@update', 'as' => 'update']); - Route::delete('{piggyBank}', ['uses' => 'PiggyBankController@delete', 'as' => 'delete']); + Route::get('', ['uses' => 'ShowController@index', 'as' => 'index']); + Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']); + Route::get('{piggyBank}', ['uses' => 'ShowController@show', 'as' => 'show']); + Route::put('{piggyBank}', ['uses' => 'UpdateController@update', 'as' => 'update']); + Route::delete('{piggyBank}', ['uses' => 'DestroyController@destroy', 'as' => 'delete']); - Route::get('{piggyBank}/events', ['uses' => 'PiggyBankController@piggyBankEvents', 'as' => 'events']); - Route::get('{piggyBank}/attachments', ['uses' => 'PiggyBankController@attachments', 'as' => 'attachments']); + Route::get('{piggyBank}/events', ['uses' => 'ListController@piggyBankEvents', 'as' => 'events']); + Route::get('{piggyBank}/attachments', ['uses' => 'ListController@attachments', 'as' => 'attachments']); } );