. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Data; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\Bill; use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\Recurrence; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Models\Tag; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; use Illuminate\Http\JsonResponse; /** * Class PurgeController */ class PurgeController extends Controller { /** * TODO cleanup and use repositories. * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/data/purgeData * * @return JsonResponse */ public function purge(): JsonResponse { $user = auth()->user(); // some manual code, too lazy to call all repositories. // budgets: Budget::whereUserId($user->id)->onlyTrashed()->forceDelete(); // bills Bill::whereUserId($user->id)->onlyTrashed()->forceDelete(); // piggies $set = PiggyBank::leftJoin('accounts', 'accounts.id', 'piggy_banks.account_id') ->where('accounts.user_id', $user->id)->onlyTrashed()->get(['piggy_banks.*']); /** @var PiggyBank $piggy */ foreach ($set as $piggy) { $piggy->forceDelete(); } // rule group RuleGroup::whereUserId($user->id)->onlyTrashed()->forceDelete(); // rules Rule::whereUserId($user->id)->onlyTrashed()->forceDelete(); // recurring transactions Recurrence::whereUserId($user->id)->onlyTrashed()->forceDelete(); // categories Category::whereUserId($user->id)->onlyTrashed()->forceDelete(); // tags Tag::whereUserId($user->id)->onlyTrashed()->forceDelete(); // accounts Account::whereUserId($user->id)->onlyTrashed()->forceDelete(); // transaction groups TransactionGroup::whereUserId($user->id)->onlyTrashed()->forceDelete(); // transaction journals TransactionJournal::whereUserId($user->id)->onlyTrashed()->forceDelete(); return response()->json([], 204); } }