diff --git a/app/Api/V1/Controllers/System/BatchController.php b/app/Api/V1/Controllers/System/BatchController.php new file mode 100644 index 0000000000..5c45ea34ee --- /dev/null +++ b/app/Api/V1/Controllers/System/BatchController.php @@ -0,0 +1,68 @@ +. + */ + +namespace FireflyIII\Api\V1\Controllers\System; + +use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Events\Model\TransactionGroup\CreatedSingleTransactionGroup; +use FireflyIII\Events\Model\TransactionGroup\TransactionGroupEventFlags; +use FireflyIII\Models\TransactionJournal; +use FireflyIII\Repositories\Journal\JournalRepositoryInterface; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; + +class BatchController extends Controller +{ + private JournalRepositoryInterface $repository; + + /** + * UserController constructor. + */ + public function __construct() + { + parent::__construct(); + $this->middleware(function ($request, $next) { + $this->repository = app(JournalRepositoryInterface::class); + + return $next($request); + }); + } + + + public function finishBatch(Request $request): JsonResponse + { + $journals = $this->repository->getUncompletedJournals(); + if (0 === count($journals)) { + return response()->json([], 204); + } + /** @var TransactionJournal $first */ + $first = $journals->first(); + $group = $first?->transactionGroup; + if (null === $group) { + return response()->json([], 204); + } + $flags = new TransactionGroupEventFlags(); + $flags->applyRules = 'true' === $request->get('apply_rules'); + event(new CreatedSingleTransactionGroup($group, $flags)); + return response()->json([], 204); + } + +} diff --git a/app/Api/V1/Controllers/System/UserController.php b/app/Api/V1/Controllers/System/UserController.php index d299e45157..b8a9d67f39 100644 --- a/app/Api/V1/Controllers/System/UserController.php +++ b/app/Api/V1/Controllers/System/UserController.php @@ -58,6 +58,11 @@ class UserController extends Controller }); } + + public function finishBatch(): JsonResponse { + + } + /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/users/deleteUser diff --git a/config/bindables.php b/config/bindables.php index 4467cb466d..7b5f9c122f 100644 --- a/config/bindables.php +++ b/config/bindables.php @@ -81,6 +81,7 @@ return [ 'objectGroup' => ObjectGroup::class, 'piggyBank' => PiggyBank::class, 'preference' => Preference::class, + 'preferenceName' => Preference::class, 'tj' => TransactionJournal::class, 'tag' => Tag::class, 'recurrence' => Recurrence::class, diff --git a/routes/api.php b/routes/api.php index 0269b5382b..5836c03547 100644 --- a/routes/api.php +++ b/routes/api.php @@ -730,6 +730,19 @@ Route::group( } ); +// Batch API routes: +Route::group( + [ + 'middleware' => ['auth:api,sanctum', 'bindings'], + 'namespace' => 'FireflyIII\Api\V1\Controllers\System', + 'prefix' => 'v1/batch', + 'as' => 'api.v1.batch.', + ], + static function (): void { + Route::post('finish', ['uses' => 'BatchController@finishBatch', 'as' => 'finish']); + } +); + // USER // Preference API routes: @@ -743,8 +756,8 @@ Route::group( Route::get('', ['uses' => 'PreferencesController@index', 'as' => 'index']); Route::post('', ['uses' => 'PreferencesController@store', 'as' => 'store']); // Route::get('{preferenceList}', ['uses' => 'PreferencesController@showList', 'as' => 'show-list'])->where('preferenceList', ',+'); - Route::get('{preference}', ['uses' => 'PreferencesController@show', 'as' => 'show']); - Route::put('{preference}', ['uses' => 'PreferencesController@update', 'as' => 'update']); + Route::get('{preferenceName}', ['uses' => 'PreferencesController@show', 'as' => 'show']); + Route::put('{preferenceName}', ['uses' => 'PreferencesController@update', 'as' => 'update']); } );