mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2026-02-04 03:22:51 +00:00
Compare commits
71 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95bdc87ed7 | ||
|
|
9a66b4017b | ||
|
|
610e3f3ae5 | ||
|
|
a58e70c08b | ||
|
|
24c96d40c9 | ||
|
|
74ae59910f | ||
|
|
6d49815be9 | ||
|
|
ae680cd41f | ||
|
|
5e9ea1ca10 | ||
|
|
1b1ce3e04e | ||
|
|
ff64675122 | ||
|
|
1c545b7a74 | ||
|
|
a433ddcd7e | ||
|
|
b0e1b6fe51 | ||
|
|
f5523e60b6 | ||
|
|
e300efe640 | ||
|
|
a97f227ddb | ||
|
|
5f8d7049b5 | ||
|
|
7e80f78f2e | ||
|
|
ad922745c4 | ||
|
|
40abe74dc1 | ||
|
|
e5d2c4d163 | ||
|
|
2851053900 | ||
|
|
b2f6ce1277 | ||
|
|
340b0661ba | ||
|
|
be18f11f8c | ||
|
|
2f8ee67b31 | ||
|
|
1ecf55165e | ||
|
|
5aceccde4a | ||
|
|
abfaee5a55 | ||
|
|
fa65cc7ee2 | ||
|
|
d64f1d0c18 | ||
|
|
31206ce56c | ||
|
|
e4e9a09522 | ||
|
|
11303dc6e2 | ||
|
|
993f5cd292 | ||
|
|
cc0854c712 | ||
|
|
5c6aee0037 | ||
|
|
391f8c34cc | ||
|
|
db6ed26d5a | ||
|
|
eece951036 | ||
|
|
3d7a62293b | ||
|
|
2691dbe438 | ||
|
|
fe971ec611 | ||
|
|
9e4c5435f0 | ||
|
|
cdb2b91813 | ||
|
|
f4cf158d21 | ||
|
|
b19f1d0353 | ||
|
|
eb2c612476 | ||
|
|
e89eede8a0 | ||
|
|
00e09c4bd9 | ||
|
|
33e63434a3 | ||
|
|
1b68e5374a | ||
|
|
f93e55f9b0 | ||
|
|
4a3f62df89 | ||
|
|
0c5ac39d5e | ||
|
|
ccb44d6fbd | ||
|
|
b9fe074080 | ||
|
|
033281ff51 | ||
|
|
5e8d23ba91 | ||
|
|
35509f19ad | ||
|
|
5e56eeb22e | ||
|
|
e921bb3ebe | ||
|
|
353cd0f4f1 | ||
|
|
1376ed16cf | ||
|
|
36646b9c05 | ||
|
|
0b20c9d53b | ||
|
|
b91d8661bc | ||
|
|
b684f3fc70 | ||
|
|
c8a235b0b0 | ||
|
|
229db34d13 |
@@ -26,6 +26,7 @@ $paths = [
|
||||
$current . '/../../config',
|
||||
$current . '/../../routes',
|
||||
$current . '/../../tests',
|
||||
$current . '/../../resources/lang/en_US',
|
||||
];
|
||||
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
|
||||
36
.ci/php-cs-fixer/composer.lock
generated
36
.ci/php-cs-fixer/composer.lock
generated
@@ -402,16 +402,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.93.0",
|
||||
"version": "v3.93.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "50895a07cface1385082e4caa6a6786c4e033468"
|
||||
"reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/50895a07cface1385082e4caa6a6786c4e033468",
|
||||
"reference": "50895a07cface1385082e4caa6a6786c4e033468",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b3546ab487c0762c39f308dc1ec0ea2c461fc21a",
|
||||
"reference": "b3546ab487c0762c39f308dc1ec0ea2c461fc21a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -494,7 +494,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.93.0"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.93.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -502,7 +502,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-23T17:33:21+00:00"
|
||||
"time": "2026-01-28T23:50:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
@@ -1640,16 +1640,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "42e48eb02e07d5f3771d194d67da117eb824c8c1"
|
||||
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/42e48eb02e07d5f3771d194d67da117eb824c8c1",
|
||||
"reference": "42e48eb02e07d5f3771d194d67da117eb824c8c1",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0",
|
||||
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1684,7 +1684,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/finder/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1704,7 +1704,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-12T12:37:40+00:00"
|
||||
"time": "2026-01-26T15:08:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
@@ -2358,16 +2358,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "10df72602d88c0a3fa685b822976a052611dd607"
|
||||
"reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/10df72602d88c0a3fa685b822976a052611dd607",
|
||||
"reference": "10df72602d88c0a3fa685b822976a052611dd607",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
|
||||
"reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2399,7 +2399,7 @@
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/process/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2419,7 +2419,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-23T11:07:10+00:00"
|
||||
"time": "2026-01-26T15:08:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
|
||||
@@ -4,6 +4,8 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
|
||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||
|
||||
## 2026
|
||||
- Nick Huang
|
||||
- mateuszkulapl
|
||||
- Gianluca Martino
|
||||
- embedded
|
||||
|
||||
|
||||
74
app/Api/V1/Controllers/System/BatchController.php
Normal file
74
app/Api/V1/Controllers/System/BatchController.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* BatchController.php
|
||||
* Copyright (c) 2026 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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\Events\Model\TransactionGroup\UserRequestedBatchProcessing;
|
||||
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);
|
||||
$this->repository->setUser(auth()->user()); // should not have to do this.
|
||||
|
||||
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 UserRequestedBatchProcessing($flags));
|
||||
// event(new CreatedSingleTransactionGroup($group, $flags));
|
||||
|
||||
return response()->json([], 204);
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,8 @@ 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
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* StoredAccount.php
|
||||
* Copyright (c) 2021 james@firefly-iii.org
|
||||
* CreatedNewAccount.php
|
||||
* Copyright (c) 2026 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
@@ -20,17 +22,13 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Events;
|
||||
namespace FireflyIII\Events\Model\Account;
|
||||
|
||||
use FireflyIII\Events\Event;
|
||||
use FireflyIII\Models\Account;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
/**
|
||||
* Class StoredAccount
|
||||
*/
|
||||
class StoredAccount extends Event
|
||||
class CreatedNewAccount extends Event
|
||||
{
|
||||
use SerializesModels;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* CreatedTransactionGroupBatch.php
|
||||
* UpdatedExistingAccount.php
|
||||
* Copyright (c) 2026 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
@@ -22,13 +22,13 @@ declare(strict_types=1);
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Events\Model\TransactionGroup;
|
||||
namespace FireflyIII\Events\Model\Account;
|
||||
|
||||
use FireflyIII\Events\Event;
|
||||
use FireflyIII\Models\Account;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class CreatedTransactionGroupInBatch extends Event
|
||||
class UpdatedExistingAccount extends Event
|
||||
{
|
||||
use SerializesModels;
|
||||
|
||||
@@ -36,7 +36,6 @@ class CreatedTransactionGroupInBatch extends Event
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(
|
||||
public Collection $collection,
|
||||
public array $flags
|
||||
public Account $account
|
||||
) {}
|
||||
}
|
||||
@@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* StoredAccountEventHandler.php
|
||||
* Copyright (c) 2021 james@firefly-iii.org
|
||||
* UserRequestedBatchProcessing.php
|
||||
* Copyright (c) 2026 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
@@ -20,25 +22,16 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace FireflyIII\Events\Model\TransactionGroup;
|
||||
|
||||
namespace FireflyIII\Handlers\Events;
|
||||
use FireflyIII\Events\Event;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
use FireflyIII\Events\StoredAccount;
|
||||
use FireflyIII\Services\Internal\Support\CreditRecalculateService;
|
||||
|
||||
/**
|
||||
* Class StoredAccountEventHandler
|
||||
*/
|
||||
class StoredAccountEventHandler
|
||||
class UserRequestedBatchProcessing extends Event
|
||||
{
|
||||
public function recalculateCredit(StoredAccount $event): void
|
||||
{
|
||||
$account = $event->account;
|
||||
|
||||
/** @var CreditRecalculateService $object */
|
||||
$object = app(CreditRecalculateService::class);
|
||||
$object->setAccount($account);
|
||||
$object->recalculate();
|
||||
public function __construct(
|
||||
public TransactionGroupEventFlags $flags
|
||||
) {
|
||||
Log::debug(__METHOD__);
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@ use FireflyIII\Jobs\MailError;
|
||||
use FireflyIII\Support\Facades\Steam;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -71,6 +72,7 @@ class Handler extends ExceptionHandler
|
||||
AuthenticationException::class,
|
||||
LaravelValidationException::class,
|
||||
NotFoundHttpException::class,
|
||||
ModelNotFoundException::class,
|
||||
GoneHttpException::class,
|
||||
OAuthServerException::class,
|
||||
LaravelOAuthException::class,
|
||||
|
||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Factory;
|
||||
|
||||
use FireflyIII\Enums\AccountTypeEnum;
|
||||
use FireflyIII\Events\StoredAccount;
|
||||
use FireflyIII\Events\Model\Account\CreatedNewAccount;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountType;
|
||||
@@ -122,7 +122,7 @@ class AccountFactory
|
||||
|
||||
$return = $this->createAccount($type, $data);
|
||||
|
||||
event(new StoredAccount($return));
|
||||
event(new CreatedNewAccount($return));
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
||||
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
||||
use FireflyIII\Support\Facades\Amount;
|
||||
use FireflyIII\Support\Facades\FireflyConfig;
|
||||
use FireflyIII\Support\NullArrayObject;
|
||||
use FireflyIII\User;
|
||||
use FireflyIII\Validation\AccountValidator;
|
||||
use Illuminate\Support\Collection;
|
||||
@@ -126,7 +127,7 @@ class TransactionJournalFactory
|
||||
foreach ($transactions as $index => $row) {
|
||||
$row['batch_submission'] = $batchSubmission;
|
||||
Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions)));
|
||||
$journal = $this->createJournal($row);
|
||||
$journal = $this->createJournal(new NullArrayObject($row));
|
||||
if ($journal instanceof TransactionJournal) {
|
||||
$collection->push($journal);
|
||||
}
|
||||
@@ -162,7 +163,7 @@ class TransactionJournalFactory
|
||||
*
|
||||
* @SuppressWarnings("PHPMD.ExcessiveMethodLength")
|
||||
*/
|
||||
private function createJournal(array $row): ?TransactionJournal
|
||||
private function createJournal(NullArrayObject $row): ?TransactionJournal
|
||||
{
|
||||
Log::debug('Now in TransactionJournalFactory::createJournal()');
|
||||
$row['import_hash_v2'] = $this->hashArray($row);
|
||||
@@ -345,7 +346,7 @@ class TransactionJournalFactory
|
||||
return $journal;
|
||||
}
|
||||
|
||||
private function hashArray(array $row): string
|
||||
private function hashArray(NullArrayObject $row): string
|
||||
{
|
||||
unset($row['import_hash_v2'], $row['original_source']);
|
||||
|
||||
@@ -356,7 +357,7 @@ class TransactionJournalFactory
|
||||
$json = microtime();
|
||||
}
|
||||
$hash = hash('sha256', $json);
|
||||
Log::debug(sprintf('The hash is: %s', $hash), $row);
|
||||
Log::debug(sprintf('The hash is: %s', $hash), $row->getArrayCopy());
|
||||
|
||||
return $hash;
|
||||
}
|
||||
@@ -398,7 +399,7 @@ class TransactionJournalFactory
|
||||
/**
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function validateAccounts(array $data): void
|
||||
private function validateAccounts(NullArrayObject $data): void
|
||||
{
|
||||
Log::debug(sprintf('Now in %s', __METHOD__));
|
||||
$transactionType = $data['type'] ?? 'invalid';
|
||||
@@ -576,7 +577,7 @@ class TransactionJournalFactory
|
||||
/**
|
||||
* Link a piggy bank to this journal.
|
||||
*/
|
||||
private function storePiggyEvent(TransactionJournal $journal, array $data): void
|
||||
private function storePiggyEvent(TransactionJournal $journal, NullArrayObject $data): void
|
||||
{
|
||||
Log::debug('Will now store piggy event.');
|
||||
|
||||
@@ -591,10 +592,10 @@ class TransactionJournalFactory
|
||||
Log::debug('Create no piggy event');
|
||||
}
|
||||
|
||||
private function storeMetaFields(TransactionJournal $journal, array $transaction): void
|
||||
private function storeMetaFields(TransactionJournal $journal, NullArrayObject $transaction): void
|
||||
{
|
||||
foreach ($this->fields as $field) {
|
||||
$this->storeMeta($journal, $transaction, $field);
|
||||
$this->storeMeta($journal, $transaction->getArrayCopy(), $field);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -614,7 +615,7 @@ class TransactionJournalFactory
|
||||
$factory->updateOrCreate($set);
|
||||
}
|
||||
|
||||
private function storeLocation(TransactionJournal $journal, array $data): void
|
||||
private function storeLocation(TransactionJournal $journal, NullArrayObject $data): void
|
||||
{
|
||||
if (!in_array(null, [$data['longitude'], $data['latitude'], $data['zoom_level']], true)) {
|
||||
$location = new Location();
|
||||
|
||||
@@ -29,10 +29,7 @@ use FireflyIII\Models\Attachment;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionGroup;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
|
||||
use FireflyIII\Support\Facades\Amount;
|
||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
@@ -41,40 +38,6 @@ use Illuminate\Support\Facades\Log;
|
||||
*/
|
||||
class AccountObserver
|
||||
{
|
||||
public function created(Account $account): void
|
||||
{
|
||||
// Log::debug('Observe "created" of an account.');
|
||||
$this->updatePrimaryCurrencyAmount($account);
|
||||
}
|
||||
|
||||
private function updatePrimaryCurrencyAmount(Account $account): void
|
||||
{
|
||||
if (!Amount::convertToPrimary($account->user)) {
|
||||
return;
|
||||
}
|
||||
$userCurrency = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$currency = $repository->getAccountCurrency($account);
|
||||
if (
|
||||
null !== $currency
|
||||
&& $currency->id !== $userCurrency->id
|
||||
&& '' !== (string) $account->virtual_balance
|
||||
&& 0 !== bccomp($account->virtual_balance, '0')
|
||||
) {
|
||||
$converter = new ExchangeRateConverter();
|
||||
$converter->setUserGroup($account->user->userGroup);
|
||||
$converter->setIgnoreSettings(true);
|
||||
$account->native_virtual_balance = $converter->convert($currency, $userCurrency, today(), $account->virtual_balance);
|
||||
}
|
||||
if ('' === (string) $account->virtual_balance || 0 === bccomp($account->virtual_balance, '0')) {
|
||||
$account->virtual_balance = null;
|
||||
$account->native_virtual_balance = null;
|
||||
}
|
||||
$account->saveQuietly();
|
||||
|
||||
// Log::debug('Account primary currency virtual balance is updated.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Also delete related objects.
|
||||
*/
|
||||
@@ -117,10 +80,4 @@ class AccountObserver
|
||||
$account->notes()->delete();
|
||||
$account->locations()->delete();
|
||||
}
|
||||
|
||||
public function updated(Account $account): void
|
||||
{
|
||||
// Log::debug('Observe "updated" of an account.');
|
||||
$this->updatePrimaryCurrencyAmount($account);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,36 +61,38 @@ class ConfigurationController extends Controller
|
||||
*/
|
||||
public function index(): Factory|\Illuminate\Contracts\View\View
|
||||
{
|
||||
$subTitle = (string) trans('firefly.instance_configuration');
|
||||
$subTitleIcon = 'fa-wrench';
|
||||
$subTitle = (string) trans('firefly.instance_configuration');
|
||||
$subTitleIcon = 'fa-wrench';
|
||||
|
||||
Log::channel('audit')->info('User visits admin config index.');
|
||||
|
||||
// all available configuration and their default value in case
|
||||
// they don't exist yet.
|
||||
$singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data;
|
||||
$isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
|
||||
$siteOwner = config('firefly.site_owner');
|
||||
$singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data;
|
||||
$isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
|
||||
$siteOwner = config('firefly.site_owner');
|
||||
|
||||
$enableExchangeRates = FireflyConfig::get('enable_exchange_rates', config('cer.enabled'))->data;
|
||||
$useRunningBalance = FireflyConfig::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data;
|
||||
$enableExternalMap = FireflyConfig::get('enable_external_map', config('firefly.enable_external_map'))->data;
|
||||
$enableExternalRates = FireflyConfig::get('enable_external_rates', config('cer.download_enabled'))->data;
|
||||
$allowWebhooks = FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data;
|
||||
$validUrlProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
|
||||
$enableExchangeRates = FireflyConfig::get('enable_exchange_rates', config('cer.enabled'))->data;
|
||||
$useRunningBalance = FireflyConfig::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data;
|
||||
$enableExternalMap = FireflyConfig::get('enable_external_map', config('firefly.enable_external_map'))->data;
|
||||
$enableExternalRates = FireflyConfig::get('enable_external_rates', config('cer.download_enabled'))->data;
|
||||
$allowWebhooks = FireflyConfig::get('allow_webhooks', config('firefly.allow_webhooks'))->data;
|
||||
$enableBatchProcessing = FireflyConfig::get('enable_batch_processing', false)->data;
|
||||
$validUrlProtocols = FireflyConfig::get('valid_url_protocols', config('firefly.valid_url_protocols'))->data;
|
||||
|
||||
return view('settings.configuration.index', [
|
||||
'subTitle' => $subTitle,
|
||||
'subTitleIcon' => $subTitleIcon,
|
||||
'singleUserMode' => $singleUserMode,
|
||||
'isDemoSite' => $isDemoSite,
|
||||
'siteOwner' => $siteOwner,
|
||||
'enableExchangeRates' => $enableExchangeRates,
|
||||
'useRunningBalance' => $useRunningBalance,
|
||||
'enableExternalMap' => $enableExternalMap,
|
||||
'enableExternalRates' => $enableExternalRates,
|
||||
'allowWebhooks' => $allowWebhooks,
|
||||
'validUrlProtocols' => $validUrlProtocols,
|
||||
'subTitle' => $subTitle,
|
||||
'subTitleIcon' => $subTitleIcon,
|
||||
'singleUserMode' => $singleUserMode,
|
||||
'isDemoSite' => $isDemoSite,
|
||||
'siteOwner' => $siteOwner,
|
||||
'enableExchangeRates' => $enableExchangeRates,
|
||||
'useRunningBalance' => $useRunningBalance,
|
||||
'enableExternalMap' => $enableExternalMap,
|
||||
'enableExternalRates' => $enableExternalRates,
|
||||
'allowWebhooks' => $allowWebhooks,
|
||||
'enableBatchProcessing' => $enableBatchProcessing,
|
||||
'validUrlProtocols' => $validUrlProtocols,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,6 @@ class TrustProxies extends Middleware
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->proxies = (string) config('firefly.trusted_proxies');
|
||||
$this->proxies = (string) config('trustedproxy.proxies');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,14 +41,15 @@ class ConfigurationRequest extends FormRequest
|
||||
public function getConfigurationData(): array
|
||||
{
|
||||
return [
|
||||
'single_user_mode' => $this->boolean('single_user_mode'),
|
||||
'enable_exchange_rates' => $this->boolean('enable_exchange_rates'),
|
||||
'use_running_balance' => $this->boolean('use_running_balance'),
|
||||
'enable_external_map' => $this->boolean('enable_external_map'),
|
||||
'enable_external_rates' => $this->boolean('enable_external_rates'),
|
||||
'allow_webhooks' => $this->boolean('allow_webhooks'),
|
||||
'valid_url_protocols' => $this->string('valid_url_protocols'),
|
||||
'is_demo_site' => $this->boolean('is_demo_site'),
|
||||
'single_user_mode' => $this->boolean('single_user_mode'),
|
||||
'enable_exchange_rates' => $this->boolean('enable_exchange_rates'),
|
||||
'use_running_balance' => $this->boolean('use_running_balance'),
|
||||
'enable_external_map' => $this->boolean('enable_external_map'),
|
||||
'enable_external_rates' => $this->boolean('enable_external_rates'),
|
||||
'allow_webhooks' => $this->boolean('allow_webhooks'),
|
||||
'valid_url_protocols' => $this->string('valid_url_protocols'),
|
||||
'is_demo_site' => $this->boolean('is_demo_site'),
|
||||
'enable_batch_processing' => $this->boolean('enable_batch_processing'),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -59,14 +60,15 @@ class ConfigurationRequest extends FormRequest
|
||||
{
|
||||
// fixed
|
||||
return [
|
||||
'single_user_mode' => 'min:0|max:1|numeric',
|
||||
'enable_exchange_rates' => 'min:0|max:1|numeric',
|
||||
'use_running_balance' => 'min:0|max:1|numeric',
|
||||
'enable_external_map' => 'min:0|max:1|numeric',
|
||||
'enable_external_rates' => 'min:0|max:1|numeric',
|
||||
'allow_webhooks' => 'min:0|max:1|numeric',
|
||||
'valid_url_protocols' => 'min:0|max:255',
|
||||
'is_demo_site' => 'min:0|max:1|numeric',
|
||||
'single_user_mode' => 'min:0|max:1|numeric',
|
||||
'enable_exchange_rates' => 'min:0|max:1|numeric',
|
||||
'use_running_balance' => 'min:0|max:1|numeric',
|
||||
'enable_external_map' => 'min:0|max:1|numeric',
|
||||
'enable_external_rates' => 'min:0|max:1|numeric',
|
||||
'allow_webhooks' => 'min:0|max:1|numeric',
|
||||
'enable_batch_processing' => 'min:0|max:1|numeric',
|
||||
'valid_url_protocols' => 'min:0|max:255',
|
||||
'is_demo_site' => 'min:0|max:1|numeric',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
84
app/Listeners/Model/Account/UpdatesAccountInformation.php
Normal file
84
app/Listeners/Model/Account/UpdatesAccountInformation.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* TriggersCreditRecalculation.php
|
||||
* Copyright (c) 2026 james@firefly-iii.org
|
||||
*
|
||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Listeners\Model\Account;
|
||||
|
||||
use FireflyIII\Events\Model\Account\CreatedNewAccount;
|
||||
use FireflyIII\Events\Model\Account\UpdatedExistingAccount;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Services\Internal\Support\CreditRecalculateService;
|
||||
use FireflyIII\Support\Facades\Amount;
|
||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class UpdatesAccountInformation
|
||||
{
|
||||
public function handle(CreatedNewAccount|UpdatedExistingAccount $event): void
|
||||
{
|
||||
$this->recalculateCredit($event->account);
|
||||
$this->updateVirtualBalance($event->account);
|
||||
}
|
||||
|
||||
private function recalculateCredit(Account $account): void
|
||||
{
|
||||
Log::debug('Will call CreditRecalculateService because a new account was created.');
|
||||
|
||||
/** @var CreditRecalculateService $object */
|
||||
$object = app(CreditRecalculateService::class);
|
||||
$object->setAccount($account);
|
||||
$object->recalculate();
|
||||
}
|
||||
|
||||
private function updateVirtualBalance(Account $account): void
|
||||
{
|
||||
if (!Amount::convertToPrimary($account->user)) {
|
||||
Log::debug('After account creation, no need to convert virtual balance.');
|
||||
|
||||
return;
|
||||
}
|
||||
Log::debug('After account creation, convert virtual balance.');
|
||||
$userCurrency = Amount::getPrimaryCurrencyByUserGroup($account->user->userGroup);
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$currency = $repository->getAccountCurrency($account);
|
||||
if (
|
||||
null !== $currency
|
||||
&& $currency->id !== $userCurrency->id
|
||||
&& '' !== (string) $account->virtual_balance
|
||||
&& 0 !== bccomp($account->virtual_balance, '0')
|
||||
) {
|
||||
$converter = new ExchangeRateConverter();
|
||||
$converter->setUserGroup($account->user->userGroup);
|
||||
$converter->setIgnoreSettings(true);
|
||||
$account->native_virtual_balance = $converter->convert($currency, $userCurrency, today(), $account->virtual_balance);
|
||||
}
|
||||
if ('' === (string) $account->virtual_balance || 0 === bccomp($account->virtual_balance, '0')) {
|
||||
$account->virtual_balance = null;
|
||||
$account->native_virtual_balance = null;
|
||||
}
|
||||
$account->saveQuietly();
|
||||
|
||||
// Log::debug('Account primary currency virtual balance is updated.');
|
||||
}
|
||||
}
|
||||
@@ -27,10 +27,12 @@ namespace FireflyIII\Listeners\Model\TransactionGroup;
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Enums\WebhookTrigger;
|
||||
use FireflyIII\Events\Model\TransactionGroup\CreatedSingleTransactionGroup;
|
||||
use FireflyIII\Events\Model\TransactionGroup\UserRequestedBatchProcessing;
|
||||
use FireflyIII\Events\Model\Webhook\WebhookMessagesRequestSending;
|
||||
use FireflyIII\Generator\Webhook\MessageGeneratorInterface;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\TransactionGroup;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionJournalMeta;
|
||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||
use FireflyIII\Repositories\PeriodStatistic\PeriodStatisticRepositoryInterface;
|
||||
@@ -45,16 +47,26 @@ use Illuminate\Support\Facades\Log;
|
||||
|
||||
class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
{
|
||||
public function handle(CreatedSingleTransactionGroup $event): void
|
||||
public function handle(CreatedSingleTransactionGroup|UserRequestedBatchProcessing $event): void
|
||||
{
|
||||
Log::debug(sprintf('In ProcessesNewTransactionGroup::handle(#%d)', $event->transactionGroup->id));
|
||||
if (true === $event->flags->batchSubmission) {
|
||||
Log::debug(sprintf('Will do nothing for group #%d because it is part of a batch.', $event->transactionGroup->id));
|
||||
$groupId = 0;
|
||||
$collection = new Collection();
|
||||
if ($event instanceof CreatedSingleTransactionGroup) {
|
||||
Log::debug(sprintf('In ProcessesNewTransactionGroup::handle(#%d)', $event->transactionGroup->id));
|
||||
$groupId = $event->transactionGroup->id;
|
||||
$collection = $event->transactionGroup->transactionJournals;
|
||||
}
|
||||
if ($event instanceof UserRequestedBatchProcessing) {
|
||||
Log::debug('User called UserRequestedBatchProcessing');
|
||||
}
|
||||
|
||||
$setting = FireflyConfig::get('enable_batch_processing', false)->data;
|
||||
if (true === $event->flags->batchSubmission && true === $setting) {
|
||||
Log::debug(sprintf('Will do nothing for group #%d because it is part of a batch.', $groupId));
|
||||
|
||||
return;
|
||||
}
|
||||
Log::debug(sprintf('Will join group #%d with all other open transaction groups and process them.', $event->transactionGroup->id));
|
||||
$collection = $event->transactionGroup->transactionJournals;
|
||||
Log::debug(sprintf('Will (joined with group #%d) collect all open transaction groups and process them.', $groupId));
|
||||
$repository = app(JournalRepositoryInterface::class);
|
||||
$set = $collection->merge($repository->getUncompletedJournals());
|
||||
if (0 === $set->count()) {
|
||||
@@ -62,6 +74,7 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
|
||||
return;
|
||||
}
|
||||
Log::debug(sprintf('Set count is %d', $set->count()));
|
||||
if (!$event->flags->applyRules) {
|
||||
Log::debug(sprintf('Will NOT process rules for %d journal(s)', $set->count()));
|
||||
}
|
||||
@@ -80,12 +93,10 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
if ($event->flags->fireWebhooks) {
|
||||
$this->fireWebhooks($set);
|
||||
}
|
||||
// always remove old statistics.
|
||||
// always remove old relevant statistics.
|
||||
$this->removePeriodStatistics($set);
|
||||
|
||||
// recalculate running balance if necessary.
|
||||
|
||||
Log::debug('Observe "created" of a transaction.');
|
||||
if (true === FireflyConfig::get('use_running_balance', config('firefly.feature_flags.running_balance_column'))->data) {
|
||||
$this->recalculateRunningBalance($set);
|
||||
}
|
||||
@@ -109,8 +120,11 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
|
||||
/** @var Carbon $date */
|
||||
$date = Carbon::parse($array[0]['data']);
|
||||
|
||||
/** @var Carbon $earliest */
|
||||
$earliest = $date->lt($earliest) ? $date : $earliest;
|
||||
}
|
||||
Log::debug(sprintf('Found earliest date: %s', $earliest->toW3cString()));
|
||||
|
||||
// get accounts
|
||||
$accounts = Account::leftJoin('transactions', 'transactions.account_id', 'accounts.id')
|
||||
@@ -120,6 +134,8 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
->get(['accounts.*'])
|
||||
;
|
||||
|
||||
Log::debug('Found accounts to process', $accounts->pluck('id')->toArray());
|
||||
|
||||
AccountBalanceCalculator::optimizedCalculation($accounts, $earliest);
|
||||
}
|
||||
|
||||
@@ -138,7 +154,10 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
$groups = TransactionGroup::whereIn('id', array_unique($set->pluck('transaction_group_id')->toArray()))->get();
|
||||
|
||||
Log::debug(__METHOD__);
|
||||
$user = $set->first()->user;
|
||||
|
||||
/** @var TransactionJournal $first */
|
||||
$first = $set->first();
|
||||
$user = $first->user;
|
||||
|
||||
/** @var MessageGeneratorInterface $engine */
|
||||
$engine = app(MessageGeneratorInterface::class);
|
||||
@@ -170,8 +189,11 @@ class ProcessesNewTransactionGroup implements ShouldQueue
|
||||
{
|
||||
Log::debug(sprintf('Will now processRules for %d journal(s)', $set->count()));
|
||||
$array = $set->pluck('id')->toArray();
|
||||
|
||||
/** @var TransactionJournal $first */
|
||||
$first = $set->first();
|
||||
$journalIds = implode(',', $array);
|
||||
$user = $set->first()->user;
|
||||
$user = $first->user;
|
||||
Log::debug(sprintf('Add local operator for journal(s): %s', $journalIds));
|
||||
|
||||
// collect rules:
|
||||
|
||||
@@ -23,14 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Providers;
|
||||
|
||||
use FireflyIII\Events\DestroyedTransactionGroup;
|
||||
use FireflyIII\Events\Model\TransactionGroup\TriggeredStoredTransactionGroup;
|
||||
use FireflyIII\Events\Preferences\UserGroupChangedPrimaryCurrency;
|
||||
use FireflyIII\Events\StoredAccount;
|
||||
use FireflyIII\Events\UpdatedAccount;
|
||||
use FireflyIII\Events\UpdatedTransactionGroup;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
use Laravel\Passport\Events\AccessTokenCreated;
|
||||
use Override;
|
||||
|
||||
/**
|
||||
|
||||
@@ -187,9 +187,11 @@ class PeriodStatisticRepository implements PeriodStatisticRepositoryInterface, U
|
||||
Log::debug(sprintf('Delete statistics for %d transaction journals.', count($set)));
|
||||
// collect all transactions:
|
||||
$transactions = Transaction::whereIn('transaction_journal_id', $set->pluck('id')->toArray())->get(['transactions.*']);
|
||||
Log::debug('Collected transaction IDs', $transactions->pluck('id')->toArray());
|
||||
|
||||
// collect all accounts and delete stats:
|
||||
$accounts = Account::whereIn('id', $transactions->pluck('account_id')->toArray())->get(['accounts.*']);
|
||||
Log::debug('Collected account IDs', $accounts->pluck('id')->toArray());
|
||||
$dates = $set->pluck('date');
|
||||
$this->deleteStatisticsForType(Account::class, $accounts, $dates);
|
||||
|
||||
@@ -202,6 +204,7 @@ class PeriodStatisticRepository implements PeriodStatisticRepositoryInterface, U
|
||||
->pluck('category_id')
|
||||
->toArray()
|
||||
)->get(['categories.*']);
|
||||
Log::debug('Collected category IDs', $categories->pluck('id')->toArray());
|
||||
$this->deleteStatisticsForType(Category::class, $categories, $dates);
|
||||
|
||||
// budgets, same thing
|
||||
@@ -213,6 +216,7 @@ class PeriodStatisticRepository implements PeriodStatisticRepositoryInterface, U
|
||||
->pluck('budget_id')
|
||||
->toArray()
|
||||
)->get(['budgets.*']);
|
||||
Log::debug('Collected budget IDs', $categories->pluck('id')->toArray());
|
||||
$this->deleteStatisticsForType(Budget::class, $budgets, $dates);
|
||||
|
||||
// tags
|
||||
@@ -224,16 +228,20 @@ class PeriodStatisticRepository implements PeriodStatisticRepositoryInterface, U
|
||||
->pluck('tag_id')
|
||||
->toArray()
|
||||
)->get(['tags.*']);
|
||||
Log::debug('Collected tag IDs', $categories->pluck('id')->toArray());
|
||||
$this->deleteStatisticsForType(Tag::class, $tags, $dates);
|
||||
|
||||
// remove for no tag, no cat, etc.
|
||||
if (0 === $categories->count()) {
|
||||
Log::debug('No categories, delete "no_category" stats.');
|
||||
$this->deleteStatisticsForPrefix('no_category', $dates);
|
||||
}
|
||||
if (0 === $budgets->count()) {
|
||||
Log::debug('No budgets, delete "no_category" stats.');
|
||||
$this->deleteStatisticsForPrefix('no_budget', $dates);
|
||||
}
|
||||
if (0 === $tags->count()) {
|
||||
Log::debug('No tags, delete "no_category" stats.');
|
||||
$this->deleteStatisticsForPrefix('no_tag', $dates);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||
use FireflyIII\Rules\UniqueIban;
|
||||
use FireflyIII\Support\NullArrayObject;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Safe\Exceptions\JsonException;
|
||||
|
||||
@@ -377,7 +378,7 @@ trait JournalServiceTrait
|
||||
return $amount;
|
||||
}
|
||||
|
||||
protected function storeBudget(TransactionJournal $journal, array $data): void
|
||||
protected function storeBudget(TransactionJournal $journal, NullArrayObject $data): void
|
||||
{
|
||||
if (TransactionTypeEnum::WITHDRAWAL->value !== $journal->transactionType->type) {
|
||||
$journal->budgets()->sync([]);
|
||||
@@ -395,7 +396,7 @@ trait JournalServiceTrait
|
||||
$journal->budgets()->sync([]);
|
||||
}
|
||||
|
||||
protected function storeCategory(TransactionJournal $journal, array $data): void
|
||||
protected function storeCategory(TransactionJournal $journal, NullArrayObject $data): void
|
||||
{
|
||||
$category = $this->categoryRepository->findCategory($data['category_id'], $data['category_name']);
|
||||
if (null !== $category) {
|
||||
|
||||
@@ -25,6 +25,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Services\Internal\Update;
|
||||
|
||||
use FireflyIII\Enums\AccountTypeEnum;
|
||||
use FireflyIII\Events\Model\Account\UpdatedExistingAccount;
|
||||
use FireflyIII\Events\UpdatedAccount;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Account;
|
||||
@@ -150,6 +151,8 @@ class AccountUpdateService
|
||||
|
||||
$account->save();
|
||||
|
||||
event(new UpdatedExistingAccount($account));
|
||||
|
||||
return $account;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ class DynamicConfigKey
|
||||
'configuration.enable_external_map', // boolean
|
||||
'configuration.enable_external_rates', // boolean
|
||||
'configuration.allow_webhooks', // boolean
|
||||
'configuration.enable_batch_processing', // boolean
|
||||
'configuration.valid_url_protocols', // string ("http,https")
|
||||
];
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ class SubscriptionEnrichment implements EnrichmentInterface
|
||||
$amounts['pc_amount_min'] = Steam::bcround($item->native_amount_min, $this->primaryCurrency->decimal_places);
|
||||
$amounts['pc_amount_max'] = Steam::bcround($item->native_amount_max, $this->primaryCurrency->decimal_places);
|
||||
$amounts['pc_average'] = Steam::bcround(
|
||||
bcdiv(bcadd($item->native_amount_min, $item->native_amount_max), '2'),
|
||||
bcdiv(bcadd($item->native_amount_min ?? '0', $item->native_amount_max ?? '0'), '2'),
|
||||
$this->primaryCurrency->decimal_places
|
||||
);
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings;
|
||||
use Illuminate\Http\Middleware\HandleCors;
|
||||
use Illuminate\Http\Middleware\ValidatePostSize;
|
||||
use Illuminate\Routing\Middleware\SubstituteBindings;
|
||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||
use Laravel\Passport\Http\Middleware\CreateFreshApiToken;
|
||||
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
|
||||
@@ -88,11 +89,6 @@ if (!function_exists('stringIsEqual')) {
|
||||
}
|
||||
}
|
||||
|
||||
//$app = new Application(
|
||||
// realpath(__DIR__ . '/../')
|
||||
//);
|
||||
|
||||
|
||||
$app = Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
web : __DIR__ . '/../routes/web.php',
|
||||
@@ -101,30 +97,39 @@ $app = Application::configure(basePath: dirname(__DIR__))
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
// overrule the standard middleware
|
||||
$middleware->use([
|
||||
InvokeDeferredCallbacks::class,
|
||||
// \Illuminate\Http\Middleware\TrustHosts::class,
|
||||
TrustProxies::class,
|
||||
HandleCors::class,
|
||||
PreventRequestsDuringMaintenance::class,
|
||||
ValidatePostSize::class,
|
||||
TrimStrings::class,
|
||||
ConvertEmptyStringsToNull::class,
|
||||
SecureHeaders::class,
|
||||
]);
|
||||
$middleware->use(
|
||||
[
|
||||
InvokeDeferredCallbacks::class,
|
||||
HandleCors::class,
|
||||
PreventRequestsDuringMaintenance::class,
|
||||
ValidatePostSize::class,
|
||||
TrimStrings::class,
|
||||
ConvertEmptyStringsToNull::class,
|
||||
SecureHeaders::class,
|
||||
TrustProxies::class,
|
||||
]
|
||||
);
|
||||
|
||||
// overrule the web group
|
||||
$middleware->group('web', [
|
||||
Illuminate\Cookie\Middleware\EncryptCookies::class,
|
||||
Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
StartFireflySession::class,
|
||||
Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
CreateFreshApiToken::class,
|
||||
]);
|
||||
$middleware->group('web',
|
||||
[
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
CreateFreshApiToken::class,
|
||||
]
|
||||
);
|
||||
// new group?
|
||||
$middleware->appendToGroup('binders-only', [Installer::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, Binder::class]);
|
||||
$middleware->appendToGroup('binders-only',
|
||||
[
|
||||
Installer::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
Binder::class,
|
||||
]);
|
||||
|
||||
//
|
||||
$middleware->appendToGroup('user-not-logged-in', [
|
||||
|
||||
@@ -115,11 +115,11 @@
|
||||
"thecodingmachine/safe": "^3.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"barryvdh/laravel-debugbar": "^3.9",
|
||||
"barryvdh/laravel-ide-helper": "^3",
|
||||
"driftingly/rector-laravel": "^2.0",
|
||||
"fakerphp/faker": "1.*",
|
||||
"filp/whoops": "2.*",
|
||||
"fruitcake/laravel-debugbar": "^4.0",
|
||||
"larastan/larastan": "^3",
|
||||
"laravel-json-api/testing": "^3.0",
|
||||
"mockery/mockery": "1.*",
|
||||
|
||||
547
composer.lock
generated
547
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -64,6 +64,7 @@ return [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'users',
|
||||
'remember' => true,
|
||||
],
|
||||
'remote_user_guard' => [
|
||||
'driver' => 'remote_user_guard',
|
||||
|
||||
@@ -67,61 +67,62 @@ use FireflyIII\User;
|
||||
return [
|
||||
'bindables' => [
|
||||
// models
|
||||
'account' => Account::class,
|
||||
'attachment' => Attachment::class,
|
||||
'availableBudget' => AvailableBudget::class,
|
||||
'bill' => Bill::class,
|
||||
'budget' => Budget::class,
|
||||
'budgetLimit' => BudgetLimit::class,
|
||||
'category' => Category::class,
|
||||
'linkType' => LinkType::class,
|
||||
'transactionType' => TransactionType::class,
|
||||
'journalLink' => TransactionJournalLink::class,
|
||||
'currency' => TransactionCurrency::class,
|
||||
'objectGroup' => ObjectGroup::class,
|
||||
'piggyBank' => PiggyBank::class,
|
||||
'preference' => Preference::class,
|
||||
'tj' => TransactionJournal::class,
|
||||
'tag' => Tag::class,
|
||||
'recurrence' => Recurrence::class,
|
||||
'rule' => Rule::class,
|
||||
'ruleGroup' => RuleGroup::class,
|
||||
'transactionGroup' => TransactionGroup::class,
|
||||
'user' => User::class,
|
||||
'webhook' => Webhook::class,
|
||||
'webhookMessage' => WebhookMessage::class,
|
||||
'webhookAttempt' => WebhookAttempt::class,
|
||||
'invitedUser' => InvitedUser::class,
|
||||
'account' => Account::class,
|
||||
'attachment' => Attachment::class,
|
||||
'availableBudget' => AvailableBudget::class,
|
||||
'bill' => Bill::class,
|
||||
'budget' => Budget::class,
|
||||
'budgetLimit' => BudgetLimit::class,
|
||||
'category' => Category::class,
|
||||
'linkType' => LinkType::class,
|
||||
'transactionType' => TransactionType::class,
|
||||
'journalLink' => TransactionJournalLink::class,
|
||||
'currency' => TransactionCurrency::class,
|
||||
'objectGroup' => ObjectGroup::class,
|
||||
'piggyBank' => PiggyBank::class,
|
||||
'preference' => Preference::class,
|
||||
'preferenceName' => Preference::class,
|
||||
'tj' => TransactionJournal::class,
|
||||
'tag' => Tag::class,
|
||||
'recurrence' => Recurrence::class,
|
||||
'rule' => Rule::class,
|
||||
'ruleGroup' => RuleGroup::class,
|
||||
'transactionGroup' => TransactionGroup::class,
|
||||
'user' => User::class,
|
||||
'webhook' => Webhook::class,
|
||||
'webhookMessage' => WebhookMessage::class,
|
||||
'webhookAttempt' => WebhookAttempt::class,
|
||||
'invitedUser' => InvitedUser::class,
|
||||
|
||||
// strings
|
||||
'currency_code' => CurrencyCode::class,
|
||||
'currency_code' => CurrencyCode::class,
|
||||
|
||||
// dates
|
||||
'start_date' => Date::class,
|
||||
'end_date' => Date::class,
|
||||
'date' => Date::class,
|
||||
'start_date' => Date::class,
|
||||
'end_date' => Date::class,
|
||||
'date' => Date::class,
|
||||
|
||||
// lists
|
||||
'accountList' => AccountList::class,
|
||||
'doubleList' => AccountList::class,
|
||||
'budgetList' => BudgetList::class,
|
||||
'journalList' => JournalList::class,
|
||||
'categoryList' => CategoryList::class,
|
||||
'tagList' => TagList::class,
|
||||
'accountList' => AccountList::class,
|
||||
'doubleList' => AccountList::class,
|
||||
'budgetList' => BudgetList::class,
|
||||
'journalList' => JournalList::class,
|
||||
'categoryList' => CategoryList::class,
|
||||
'tagList' => TagList::class,
|
||||
|
||||
// others
|
||||
'fromCurrencyCode' => CurrencyCode::class,
|
||||
'toCurrencyCode' => CurrencyCode::class,
|
||||
'cliToken' => CLIToken::class,
|
||||
'tagOrId' => TagOrId::class,
|
||||
'dynamicConfigKey' => DynamicConfigKey::class,
|
||||
'eitherConfigKey' => EitherConfigKey::class,
|
||||
'fromCurrencyCode' => CurrencyCode::class,
|
||||
'toCurrencyCode' => CurrencyCode::class,
|
||||
'cliToken' => CLIToken::class,
|
||||
'tagOrId' => TagOrId::class,
|
||||
'dynamicConfigKey' => DynamicConfigKey::class,
|
||||
'eitherConfigKey' => EitherConfigKey::class,
|
||||
|
||||
// V2 API endpoints:
|
||||
'userGroupAccount' => UserGroupAccount::class,
|
||||
'userGroupTransaction' => UserGroupTransaction::class,
|
||||
'userGroupBill' => UserGroupBill::class,
|
||||
'userGroupExchangeRate' => UserGroupExchangeRate::class,
|
||||
'userGroup' => UserGroup::class,
|
||||
'userGroupAccount' => UserGroupAccount::class,
|
||||
'userGroupTransaction' => UserGroupTransaction::class,
|
||||
'userGroupBill' => UserGroupBill::class,
|
||||
'userGroupExchangeRate' => UserGroupExchangeRate::class,
|
||||
'userGroup' => UserGroup::class,
|
||||
],
|
||||
];
|
||||
|
||||
@@ -78,8 +78,8 @@ return [
|
||||
'running_balance_column' => (bool)envNonEmpty('USE_RUNNING_BALANCE', true), // this is only the default value, is not used.
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => 'develop/2026-01-25',
|
||||
'build_time' => 1769359942,
|
||||
'version' => 'develop/2026-02-02',
|
||||
'build_time' => 1770040199,
|
||||
'api_version' => '2.1.0', // field is no longer used.
|
||||
'db_version' => 28, // field is no longer used.
|
||||
|
||||
|
||||
@@ -76,17 +76,14 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('account_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'account_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('type', 50);
|
||||
Schema::create('account_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('type', 50);
|
||||
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
}
|
||||
);
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'account_types', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -98,20 +95,17 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_currencies')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('code', 3);
|
||||
$table->string('name', 255);
|
||||
$table->string('symbol', 12);
|
||||
Schema::create('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('code', 3);
|
||||
$table->string('name', 255);
|
||||
$table->string('symbol', 12);
|
||||
|
||||
// code must be unique.
|
||||
$table->unique(['code']);
|
||||
}
|
||||
);
|
||||
// code must be unique.
|
||||
$table->unique(['code']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_currencies', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -123,18 +117,15 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('type', 50);
|
||||
Schema::create('transaction_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('type', 50);
|
||||
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
}
|
||||
);
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_types', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -146,21 +137,18 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from Laravel
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
// straight from Laravel
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'jobs', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -172,15 +160,12 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('password_resets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'password_resets',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from laravel
|
||||
$table->string('email')->index();
|
||||
$table->string('token')->index();
|
||||
$table->timestamp('created_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('password_resets', static function (Blueprint $table): void {
|
||||
// straight from laravel
|
||||
$table->string('email')->index();
|
||||
$table->string('token')->index();
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'password_resets', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -192,16 +177,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('permissions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'permissions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('permissions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'permissions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -213,16 +195,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('roles')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'roles',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('roles', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'roles', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -234,18 +213,15 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('permission_role')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'permission_role',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('permission_id')->unsigned();
|
||||
$table->integer('role_id')->unsigned();
|
||||
Schema::create('permission_role', static function (Blueprint $table): void {
|
||||
$table->integer('permission_id')->unsigned();
|
||||
$table->integer('role_id')->unsigned();
|
||||
|
||||
$table->foreign('permission_id')->references('id')->on('permissions')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('permission_id')->references('id')->on('permissions')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
|
||||
$table->primary(['permission_id', 'role_id']);
|
||||
}
|
||||
);
|
||||
$table->primary(['permission_id', 'role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'permission_role', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -257,17 +233,14 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('sessions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'sessions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id')->unique();
|
||||
$table->integer('user_id')->nullable();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->text('payload');
|
||||
$table->integer('last_activity');
|
||||
}
|
||||
);
|
||||
Schema::create('sessions', static function (Blueprint $table): void {
|
||||
$table->string('id')->unique();
|
||||
$table->integer('user_id')->nullable();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->text('payload');
|
||||
$table->integer('last_activity');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'sessions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -279,16 +252,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('configuration')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'configuration',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name', 50);
|
||||
$table->text('data');
|
||||
}
|
||||
);
|
||||
Schema::create('configuration', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name', 50);
|
||||
$table->text('data');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'configuration', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -53,19 +53,16 @@ class CreateUsersTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('users')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('email', 255);
|
||||
$table->string('password', 60);
|
||||
$table->string('remember_token', 100)->nullable();
|
||||
$table->string('reset', 32)->nullable();
|
||||
$table->tinyInteger('blocked', false, true)->default('0');
|
||||
$table->string('blocked_code', 25)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('users', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('email', 255);
|
||||
$table->string('password', 60);
|
||||
$table->string('remember_token', 100)->nullable();
|
||||
$table->string('reset', 32)->nullable();
|
||||
$table->tinyInteger('blocked', false, true)->default('0');
|
||||
$table->string('blocked_code', 25)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'users', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -95,23 +95,20 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('accounts')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('account_type_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('virtual_balance', 32, 12)->nullable();
|
||||
$table->string('iban', 255)->nullable();
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('account_type_id')->references('id')->on('account_types')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('accounts', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('account_type_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('virtual_balance', 32, 12)->nullable();
|
||||
$table->string('iban', 255)->nullable();
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('account_type_id')->references('id')->on('account_types')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'accounts', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -120,17 +117,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('account_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'account_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name');
|
||||
$table->text('data');
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('account_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name');
|
||||
$table->text('data');
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'account_meta', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -142,23 +136,20 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('piggy_banks')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_banks',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('targetamount', 32, 12);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(0);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('piggy_banks', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('targetamount', 32, 12);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(0);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_banks', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -167,18 +158,15 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('piggy_bank_repetitions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_bank_repetitions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->decimal('currentamount', 32, 12);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('piggy_bank_repetitions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->decimal('currentamount', 32, 12);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_bank_repetitions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -190,28 +178,25 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('attachments')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('attachable_id', false, true);
|
||||
$table->string('attachable_type', 255);
|
||||
$table->string('md5', 128);
|
||||
$table->string('filename', 1024);
|
||||
$table->string('title', 1024)->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->string('mime', 1024);
|
||||
$table->integer('size', false, true);
|
||||
$table->boolean('uploaded')->default(1);
|
||||
Schema::create('attachments', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('attachable_id', false, true);
|
||||
$table->string('attachable_type', 255);
|
||||
$table->string('md5', 128);
|
||||
$table->string('filename', 1024);
|
||||
$table->string('title', 1024)->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->string('mime', 1024);
|
||||
$table->integer('size', false, true);
|
||||
$table->boolean('uploaded')->default(1);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'attachments', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -223,29 +208,26 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('bills')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->string('match', 1024);
|
||||
$table->decimal('amount_min', 32, 12);
|
||||
$table->decimal('amount_max', 32, 12);
|
||||
$table->date('date');
|
||||
$table->string('repeat_freq', 30);
|
||||
$table->smallInteger('skip', false, true)->default(0);
|
||||
$table->boolean('automatch')->default(1);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('name_encrypted')->default(0);
|
||||
$table->boolean('match_encrypted')->default(0);
|
||||
Schema::create('bills', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->string('match', 1024);
|
||||
$table->decimal('amount_min', 32, 12);
|
||||
$table->decimal('amount_max', 32, 12);
|
||||
$table->date('date');
|
||||
$table->string('repeat_freq', 30);
|
||||
$table->smallInteger('skip', false, true)->default(0);
|
||||
$table->boolean('automatch')->default(1);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('name_encrypted')->default(0);
|
||||
$table->boolean('match_encrypted')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'bills', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -257,19 +239,16 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budgets', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -277,19 +256,16 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('budget_limits')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->date('startdate');
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
$table->boolean('repeats')->default(0);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budget_limits', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->date('startdate');
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
$table->boolean('repeats')->default(0);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_limits', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -301,20 +277,17 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('categories')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'categories',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
Schema::create('categories', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'categories', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -326,18 +299,15 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('preferences')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->text('data');
|
||||
Schema::create('preferences', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->text('data');
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'preferences', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -349,18 +319,15 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('role_user')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'role_user',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('role_id', false, true);
|
||||
Schema::create('role_user', static function (Blueprint $table): void {
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('role_id', false, true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
|
||||
$table->primary(['user_id', 'role_id']);
|
||||
}
|
||||
);
|
||||
$table->primary(['user_id', 'role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'role_user', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -375,22 +342,19 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('rule_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
Schema::create('rule_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_groups', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -398,27 +362,24 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rules')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('rule_group_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
Schema::create('rules', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('rule_group_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
|
||||
// link rule group id to rule group table
|
||||
$table->foreign('rule_group_id')->references('id')->on('rule_groups')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule group id to rule group table
|
||||
$table->foreign('rule_group_id')->references('id')->on('rule_groups')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rules', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -426,24 +387,21 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rule_actions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_actions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
Schema::create('rule_actions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
|
||||
$table->string('action_type', 50);
|
||||
$table->string('action_value', 255);
|
||||
$table->string('action_type', 50);
|
||||
$table->string('action_value', 255);
|
||||
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_actions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -451,24 +409,21 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rule_triggers')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_triggers',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
Schema::create('rule_triggers', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
|
||||
$table->string('trigger_type', 50);
|
||||
$table->string('trigger_value', 255);
|
||||
$table->string('trigger_type', 50);
|
||||
$table->string('trigger_value', 255);
|
||||
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_triggers', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -480,26 +435,23 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('tags')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'tags',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
Schema::create('tags', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
|
||||
$table->string('tag', 1024);
|
||||
$table->string('tagMode', 1024);
|
||||
$table->date('date')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoomLevel', false, true)->nullable();
|
||||
$table->string('tag', 1024);
|
||||
$table->string('tagMode', 1024);
|
||||
$table->date('date')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoomLevel', false, true)->nullable();
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'tags', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -515,31 +467,28 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_journals')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
$table->integer('bill_id', false, true)->nullable();
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->string('description', 1024);
|
||||
$table->date('date');
|
||||
$table->date('interest_date')->nullable();
|
||||
$table->date('book_date')->nullable();
|
||||
$table->date('process_date')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->integer('tag_count', false, true);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->boolean('completed')->default(1);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
$table->foreign('bill_id')->references('id')->on('bills')->onDelete('set null');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
$table->integer('bill_id', false, true)->nullable();
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->string('description', 1024);
|
||||
$table->date('date');
|
||||
$table->date('interest_date')->nullable();
|
||||
$table->date('book_date')->nullable();
|
||||
$table->date('process_date')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->integer('tag_count', false, true);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->boolean('completed')->default(1);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
$table->foreign('bill_id')->references('id')->on('bills')->onDelete('set null');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_journals', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -548,18 +497,15 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('journal_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('name', 255);
|
||||
$table->text('data');
|
||||
$table->string('hash', 64);
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('journal_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('name', 255);
|
||||
$table->text('data');
|
||||
$table->string('hash', 64);
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'journal_meta', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -568,19 +514,16 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('tag_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'tag_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('tag_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
Schema::create('tag_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('tag_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['tag_id', 'transaction_journal_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['tag_id', 'transaction_journal_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'tag_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -589,16 +532,13 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('budget_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -607,16 +547,13 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('category_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'category_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('category_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'category_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -625,20 +562,17 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('piggy_bank_events')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_bank_events',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true)->nullable();
|
||||
$table->date('date');
|
||||
$table->decimal('amount', 32, 12);
|
||||
Schema::create('piggy_bank_events', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true)->nullable();
|
||||
$table->date('date');
|
||||
$table->decimal('amount', 32, 12);
|
||||
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_bank_events', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -647,21 +581,18 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('transactions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('description', 1024)->nullable();
|
||||
$table->decimal('amount', 32, 12);
|
||||
Schema::create('transactions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('description', 1024)->nullable();
|
||||
$table->decimal('amount', 32, 12);
|
||||
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transactions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -670,17 +601,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('budget_transaction')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_transaction',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
Schema::create('budget_transaction', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_transaction', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -689,17 +617,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('category_transaction')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'category_transaction',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
Schema::create('category_transaction', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'category_transaction', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -33,12 +33,16 @@ class ChangesFor3101 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
*/
|
||||
public function up(): void {}
|
||||
public function up(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ class FixNullables extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -50,12 +52,9 @@ class FixNullables extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('rule_groups', 'description')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_UPDATE_ERROR, 'rule_groups', $e->getMessage()));
|
||||
app('log')->error(self::COLUMN_ALREADY_EXISTS);
|
||||
@@ -64,12 +63,9 @@ class FixNullables extends Migration
|
||||
|
||||
if (!Schema::hasColumn('rules', 'description')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_UPDATE_ERROR, 'rules', $e->getMessage()));
|
||||
app('log')->error(self::COLUMN_ALREADY_EXISTS);
|
||||
|
||||
@@ -40,12 +40,9 @@ class ExpandTransactionsTable extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transactions', 'identifier')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('identifier');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('identifier');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column "identifier": %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ExpandTransactionsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transactions', 'identifier')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->smallInteger('identifier', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->smallInteger('identifier', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -50,21 +50,20 @@ class ChangesForV410 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('notes')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'notes',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('noteable_id', false, true);
|
||||
$table->string('noteable_type');
|
||||
$table->string('title')->nullable();
|
||||
$table->text('text')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('notes', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('noteable_id', false, true);
|
||||
$table->string('noteable_type');
|
||||
$table->string('title')->nullable();
|
||||
$table->text('text')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notes": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,12 +40,9 @@ class ChangesForV420 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('journal_meta', 'deleted_at')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropSoftDeletes();
|
||||
}
|
||||
);
|
||||
Schema::table('journal_meta', static function (Blueprint $table): void {
|
||||
$table->dropSoftDeletes();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ChangesForV420 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('journal_meta', 'deleted_at')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->softDeletes();
|
||||
}
|
||||
);
|
||||
Schema::table('journal_meta', static function (Blueprint $table): void {
|
||||
$table->softDeletes();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -50,25 +50,24 @@ class ChangesForV430 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('available_budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'available_budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->date('start_date');
|
||||
$table->date('end_date');
|
||||
Schema::create('available_budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->date('start_date');
|
||||
$table->date('end_date');
|
||||
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "available_budgets": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV431 extends Migration
|
||||
// reinstate "repeats" and "repeat_freq".
|
||||
if (!Schema::hasColumn('budget_limits', 'repeat_freq')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -54,12 +51,9 @@ class ChangesForV431 extends Migration
|
||||
}
|
||||
if (!Schema::hasColumn('budget_limits', 'repeats')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('repeats')->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->boolean('repeats')->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,12 +62,9 @@ class ChangesForV431 extends Migration
|
||||
// change field "start_date" to "startdate"
|
||||
if (Schema::hasColumn('budget_limits', 'start_date') && !Schema::hasColumn('budget_limits', 'startdate')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->renameColumn('start_date', 'startdate');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->renameColumn('start_date', 'startdate');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -83,12 +74,9 @@ class ChangesForV431 extends Migration
|
||||
// remove date field "end_date"
|
||||
if (Schema::hasColumn('budget_limits', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -97,12 +85,9 @@ class ChangesForV431 extends Migration
|
||||
// remove decimal places
|
||||
if (Schema::hasColumn('transaction_currencies', 'decimal_places')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('decimal_places');
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->dropColumn('decimal_places');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -120,12 +105,9 @@ class ChangesForV431 extends Migration
|
||||
// add decimal places to "transaction currencies".
|
||||
if (!Schema::hasColumn('transaction_currencies', 'decimal_places')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->smallInteger('decimal_places', false, true)->default(2);
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->smallInteger('decimal_places', false, true)->default(2);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -135,12 +117,9 @@ class ChangesForV431 extends Migration
|
||||
// change field "startdate" to "start_date"
|
||||
if (Schema::hasColumn('budget_limits', 'startdate') && !Schema::hasColumn('budget_limits', 'start_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->renameColumn('startdate', 'start_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->renameColumn('startdate', 'start_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -150,12 +129,9 @@ class ChangesForV431 extends Migration
|
||||
// add date field "end_date" after "start_date"
|
||||
if (!Schema::hasColumn('budget_limits', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('start_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('start_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -165,12 +141,9 @@ class ChangesForV431 extends Migration
|
||||
// drop "repeats" and "repeat_freq".
|
||||
if (Schema::hasColumn('budget_limits', 'repeats')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeats');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeats');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -178,12 +151,9 @@ class ChangesForV431 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('budget_limits', 'repeat_freq')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeat_freq');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeat_freq');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,18 +41,15 @@ class ChangesForV440 extends Migration
|
||||
Schema::dropIfExists('currency_exchange_rates');
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,40 +65,36 @@ class ChangesForV440 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('currency_exchange_rates')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('from_currency_id', false, true);
|
||||
$table->integer('to_currency_id', false, true);
|
||||
$table->date('date');
|
||||
$table->decimal('rate', 32, 12);
|
||||
$table->decimal('user_rate', 32, 12)->nullable();
|
||||
Schema::create('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('from_currency_id', false, true);
|
||||
$table->integer('to_currency_id', false, true);
|
||||
$table->date('date');
|
||||
$table->decimal('rate', 32, 12);
|
||||
$table->decimal('user_rate', 32, 12)->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('from_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('to_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('from_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('to_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notifications": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
$table->integer('transaction_currency_id', false, true)->after('description')->nullable();
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
$table->integer('transaction_currency_id', false, true)->after('description')->nullable();
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV450 extends Migration
|
||||
// split up for sqlite compatibility
|
||||
if (Schema::hasColumn('transactions', 'foreign_amount')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_amount');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_amount');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -54,27 +51,21 @@ class ChangesForV450 extends Migration
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_foreign_currency_id_foreign');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_foreign_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
if (Schema::hasColumn('transactions', 'foreign_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_currency_id');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_currency_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -92,12 +83,9 @@ class ChangesForV450 extends Migration
|
||||
// add "foreign_amount" to transactions
|
||||
if (!Schema::hasColumn('transactions', 'foreign_amount')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable()->after('amount');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -107,13 +95,10 @@ class ChangesForV450 extends Migration
|
||||
// add foreign transaction currency id to transactions (is nullable):
|
||||
if (!Schema::hasColumn('transactions', 'foreign_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('foreign_currency_id', false, true)->default(null)->after('foreign_amount')->nullable();
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->integer('foreign_currency_id', false, true)->default(null)->after('foreign_amount')->nullable();
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,48 +51,46 @@ class ChangesForV470 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('link_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'link_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name');
|
||||
$table->string('outward');
|
||||
$table->string('inward');
|
||||
$table->boolean('editable');
|
||||
Schema::create('link_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name');
|
||||
$table->string('outward');
|
||||
$table->string('inward');
|
||||
$table->boolean('editable');
|
||||
|
||||
$table->unique(['name', 'outward', 'inward']);
|
||||
}
|
||||
);
|
||||
$table->unique(['name', 'outward', 'inward']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "link_types": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('journal_links')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'journal_links',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('link_type_id', false, true);
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
$table->text('comment')->nullable();
|
||||
Schema::create('journal_links', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('link_type_id', false, true);
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
$table->text('comment')->nullable();
|
||||
|
||||
$table->foreign('link_type_id')->references('id')->on('link_types')->onDelete('cascade');
|
||||
$table->foreign('source_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('link_type_id')->references('id')->on('link_types')->onDelete('cascade');
|
||||
$table->foreign('source_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
$table->unique(['link_type_id', 'source_id', 'destination_id']);
|
||||
}
|
||||
);
|
||||
$table->unique(['link_type_id', 'source_id', 'destination_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "journal_links": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,12 +40,9 @@ class ChangesForV470a extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transactions', 'reconciled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('reconciled');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('reconciled');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ChangesForV470a extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transactions', 'reconciled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('reconciled')->after('deleted_at')->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->boolean('reconciled')->after('deleted_at')->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,20 +51,19 @@ class CreateOauthAuthCodesTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_auth_codes')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_auth_codes',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id');
|
||||
$table->integer('client_id');
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_auth_codes', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id');
|
||||
$table->integer('client_id');
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_auth_codes": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,22 +51,21 @@ class CreateOauthAccessTokensTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_access_tokens')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_access_tokens',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->integer('client_id');
|
||||
$table->string('name')->nullable();
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_access_tokens', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->integer('client_id');
|
||||
$table->string('name')->nullable();
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_access_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,18 +51,17 @@ class CreateOauthRefreshTokensTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_refresh_tokens')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_refresh_tokens',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->string('access_token_id', 100)->index();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_refresh_tokens', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->string('access_token_id', 100)->index();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_refresh_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,23 +51,22 @@ class CreateOauthClientsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_clients')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->string('name');
|
||||
$table->string('secret', 100);
|
||||
$table->text('redirect');
|
||||
$table->boolean('personal_access_client');
|
||||
$table->boolean('password_client');
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->string('name');
|
||||
$table->string('secret', 100);
|
||||
$table->text('redirect');
|
||||
$table->boolean('personal_access_client');
|
||||
$table->boolean('password_client');
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_clients": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,17 +51,16 @@ class CreateOauthPersonalAccessClientsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_personal_access_clients')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_personal_access_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('client_id')->index();
|
||||
$table->timestamps();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_personal_access_clients', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('client_id')->index();
|
||||
$table->timestamps();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_personal_access_clients": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV472 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('attachments', 'notes')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('notes')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('attachments', static function (Blueprint $table): void {
|
||||
$table->text('notes')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -55,12 +52,9 @@ class ChangesForV472 extends Migration
|
||||
|
||||
if (Schema::hasColumn('transactions', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('budgets', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -77,12 +71,9 @@ class ChangesForV472 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('attachments', 'notes')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('notes');
|
||||
}
|
||||
);
|
||||
Schema::table('attachments', static function (Blueprint $table): void {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -91,12 +82,9 @@ class ChangesForV472 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('budgets', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('budgets', static function (Blueprint $table): void {
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,16 +41,13 @@ class ChangesForV473 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('bills_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('bills_transaction_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -59,12 +56,9 @@ class ChangesForV473 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('rules', 'strict')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('strict');
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->dropColumn('strict');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -81,13 +75,10 @@ class ChangesForV473 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -95,12 +86,9 @@ class ChangesForV473 extends Migration
|
||||
}
|
||||
if (!Schema::hasColumn('rules', 'strict')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('strict')->default(true);
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->boolean('strict')->default(true);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -34,12 +34,16 @@ class ChangesForV474 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
*/
|
||||
public function up(): void {}
|
||||
public function up(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,130 +56,125 @@ class ChangesForV475 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('recurrences')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
Schema::create('recurrences', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
|
||||
$table->string('title', 1024);
|
||||
$table->text('description');
|
||||
$table->string('title', 1024);
|
||||
$table->text('description');
|
||||
|
||||
$table->date('first_date');
|
||||
$table->date('repeat_until')->nullable();
|
||||
$table->date('latest_date')->nullable();
|
||||
$table->smallInteger('repetitions', false, true);
|
||||
$table->date('first_date');
|
||||
$table->date('repeat_until')->nullable();
|
||||
$table->date('latest_date')->nullable();
|
||||
$table->smallInteger('repetitions', false, true);
|
||||
|
||||
$table->boolean('apply_rules')->default(true);
|
||||
$table->boolean('active')->default(true);
|
||||
$table->boolean('apply_rules')->default(true);
|
||||
$table->boolean('active')->default(true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('recurrences_transactions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->integer('foreign_currency_id', false, true)->nullable();
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
Schema::create('recurrences_transactions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->integer('foreign_currency_id', false, true)->nullable();
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable();
|
||||
$table->string('description', 1024);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable();
|
||||
$table->string('description', 1024);
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
$table->foreign('source_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
$table->foreign('source_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_transactions": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('recurrences_repetitions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_repetitions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->string('repetition_type', 50);
|
||||
$table->string('repetition_moment', 50);
|
||||
$table->smallInteger('repetition_skip', false, true);
|
||||
$table->smallInteger('weekend', false, true);
|
||||
Schema::create('recurrences_repetitions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->string('repetition_type', 50);
|
||||
$table->string('repetition_moment', 50);
|
||||
$table->smallInteger('repetition_skip', false, true);
|
||||
$table->smallInteger('weekend', false, true);
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_repetitions": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('recurrences_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
Schema::create('recurrences_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_meta": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('rt_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rt_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('rt_id', false, true);
|
||||
Schema::create('rt_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('rt_id', false, true);
|
||||
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
|
||||
$table->foreign('rt_id')->references('id')->on('recurrences_transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('rt_id')->references('id')->on('recurrences_transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "rt_meta": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,17 +41,14 @@ class ChangesForV477 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('budget_limits', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
||||
}
|
||||
|
||||
$table->dropColumn(['transaction_currency_id']);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
|
||||
$table->dropColumn(['transaction_currency_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,13 +65,10 @@ class ChangesForV477 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('budget_limits', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('budget_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('budget_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV479 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transaction_currencies', 'enabled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['enabled']);
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['enabled']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -63,12 +60,9 @@ class ChangesForV479 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transaction_currencies', 'enabled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('enabled')->default(0)->after('deleted_at');
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->boolean('enabled')->default(0)->after('deleted_at');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -52,43 +52,41 @@ class ChangesForV4710 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 1024)->nullable();
|
||||
Schema::create('transaction_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 1024)->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('group_journals')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'group_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('transaction_group_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
Schema::create('group_journals', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('transaction_group_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['transaction_group_id', 'transaction_journal_id'], 'unique_in_group');
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['transaction_group_id', 'transaction_journal_id'], 'unique_in_group');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "group_journals": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,9 @@ class ChangesForV4711 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -55,24 +57,18 @@ class ChangesForV4711 extends Migration
|
||||
* nice.
|
||||
*/
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('data')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('preferences', static function (Blueprint $table): void {
|
||||
$table->text('data')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -37,7 +37,9 @@ class ChangesForV4712 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -55,12 +57,9 @@ class ChangesForV4712 extends Migration
|
||||
* nice.
|
||||
*/
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class FixLdapConfiguration extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('users', 'objectguid')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['objectguid']);
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['objectguid']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -67,12 +64,9 @@ class FixLdapConfiguration extends Migration
|
||||
*/
|
||||
if (!Schema::hasColumn('users', 'objectguid')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->uuid('objectguid')->nullable()->after('id');
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->uuid('objectguid')->nullable()->after('id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -42,28 +42,27 @@ class ChangesForV480 extends Migration
|
||||
// remove group ID
|
||||
if (Schema::hasColumn('transaction_journals', 'transaction_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
// drop transaction_group_id + foreign key.
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
try {
|
||||
$table->dropForeign('transaction_journals_transaction_group_id_foreign');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop foreign ID: %s', $e->getMessage()));
|
||||
app('log')->error('If the foreign ID does not exist (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
}
|
||||
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
// drop transaction_group_id + foreign key.
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
try {
|
||||
$table->dropColumn('transaction_group_id');
|
||||
$table->dropForeign('transaction_journals_transaction_group_id_foreign');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
app('log')->error(sprintf('Could not drop foreign ID: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If the foreign ID does not exist (see error), this is not an problem. Otherwise, please open a GitHub discussion.'
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
try {
|
||||
$table->dropColumn('transaction_group_id');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -73,17 +72,14 @@ class ChangesForV480 extends Migration
|
||||
// remove 'stop processing' column
|
||||
if (Schema::hasColumn('rule_groups', 'stop_processing')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('stop_processing');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('stop_processing');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -93,17 +89,14 @@ class ChangesForV480 extends Migration
|
||||
// remove 'mfa_secret' column
|
||||
if (Schema::hasColumn('users', 'mfa_secret')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('mfa_secret');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('mfa_secret');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -121,27 +114,22 @@ class ChangesForV480 extends Migration
|
||||
// add currency_id
|
||||
if (!Schema::hasColumn('transaction_journals', 'transaction_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->change();
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->change();
|
||||
|
||||
// add column "group_id" after "transaction_type_id"
|
||||
$table->integer('transaction_group_id', false, true)
|
||||
->nullable()->default(null)->after('transaction_type_id')
|
||||
;
|
||||
// add column "group_id" after "transaction_type_id"
|
||||
$table->integer('transaction_group_id', false, true)->nullable()->default(null)->after('transaction_type_id');
|
||||
|
||||
// add foreign key for "transaction_group_id"
|
||||
try {
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create foreign index: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
// add foreign key for "transaction_group_id"
|
||||
try {
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create foreign index: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -151,12 +139,9 @@ class ChangesForV480 extends Migration
|
||||
// add 'stop processing' column
|
||||
if (!Schema::hasColumn('rule_groups', 'stop_processing')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('stop_processing')->default(false);
|
||||
}
|
||||
);
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
$table->boolean('stop_processing')->default(false);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -166,12 +151,9 @@ class ChangesForV480 extends Migration
|
||||
// add 'mfa_secret' column
|
||||
if (!Schema::hasColumn('users', 'mfa_secret')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('mfa_secret', 50)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->string('mfa_secret', 50)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,24 +51,23 @@ class MakeLocationsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('locations')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'locations',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('locations', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->integer('locatable_id', false, true);
|
||||
$table->string('locatable_type', 255);
|
||||
$table->integer('locatable_id', false, true);
|
||||
$table->string('locatable_type', 255);
|
||||
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoom_level', false, true)->nullable();
|
||||
}
|
||||
);
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoom_level', false, true)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "locations": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,25 +52,24 @@ class ChangesForV520 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('auto_budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'auto_budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->tinyInteger('auto_budget_type', false, true)->default(1);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('period', 50);
|
||||
Schema::create('auto_budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->tinyInteger('auto_budget_type', false, true)->default(1);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('period', 50);
|
||||
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "auto_budgets": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,37 +52,35 @@ class ChangesForV530 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('object_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id', false, true);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('title', 255);
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('object_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id', false, true);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('title', 255);
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "object_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('object_groupables')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'object_groupables',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('object_group_id');
|
||||
$table->integer('object_groupable_id', false, true);
|
||||
$table->string('object_groupable_type', 255);
|
||||
}
|
||||
);
|
||||
Schema::create('object_groupables', static function (Blueprint $table): void {
|
||||
$table->integer('object_group_id');
|
||||
$table->integer('object_groupable_id', false, true);
|
||||
$table->string('object_groupable_type', 255);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "object_groupables": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV530a extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('bills', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -63,12 +60,9 @@ class ChangesForV530a extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV540 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('oauth_clients', 'provider')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('provider');
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->dropColumn('provider');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -55,12 +52,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (Schema::hasColumn('accounts', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('accounts', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -69,12 +63,9 @@ class ChangesForV540 extends Migration
|
||||
// in two steps for sqlite
|
||||
if (Schema::hasColumn('bills', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -82,12 +73,9 @@ class ChangesForV540 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('bills', 'extension_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('extension_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('extension_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -104,12 +92,9 @@ class ChangesForV540 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('accounts', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('accounts', static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -118,12 +103,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('oauth_clients', 'provider')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('provider')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->string('provider')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -132,13 +114,10 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('bills', 'end_date') && !Schema::hasColumn('bills', 'extension_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('date');
|
||||
$table->date('extension_date')->nullable()->after('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('date');
|
||||
$table->date('extension_date')->nullable()->after('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -147,12 +126,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
// make column nullable:
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('secret', 100)->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->string('secret', 100)->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -42,39 +42,35 @@ class ChangesForV550 extends Migration
|
||||
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from Laravel (this is the OLD table)
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
// straight from Laravel (this is the OLD table)
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// expand budget / transaction journal table.
|
||||
if (Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_id_foreign');
|
||||
}
|
||||
$table->dropColumn('budget_limit_id');
|
||||
Schema::table('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_id_foreign');
|
||||
}
|
||||
);
|
||||
$table->dropColumn('budget_limit_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -88,12 +84,9 @@ class ChangesForV550 extends Migration
|
||||
// in two steps for sqlite
|
||||
if (Schema::hasColumn('budget_limits', 'period')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('period');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('period');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -101,12 +94,9 @@ class ChangesForV550 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('budget_limits', 'generated')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('generated');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('generated');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -133,21 +123,20 @@ class ChangesForV550 extends Migration
|
||||
// this is the NEW table
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
// drop failed jobs table.
|
||||
@@ -156,36 +145,32 @@ class ChangesForV550 extends Migration
|
||||
// create new failed_jobs table.
|
||||
if (!Schema::hasTable('failed_jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'failed_jobs',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
}
|
||||
);
|
||||
Schema::create('failed_jobs', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "failed_jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// update budget / transaction journal table.
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
||||
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
||||
}
|
||||
Schema::table('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
||||
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -196,17 +181,14 @@ class ChangesForV550 extends Migration
|
||||
// I swear I dropped & recreated this field 15 times already.
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_limits', 'period')) {
|
||||
$table->string('period', 12)->nullable();
|
||||
}
|
||||
if (!Schema::hasColumn('budget_limits', 'generated')) {
|
||||
$table->boolean('generated')->default(false);
|
||||
}
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_limits', 'period')) {
|
||||
$table->string('period', 12)->nullable();
|
||||
}
|
||||
);
|
||||
if (!Schema::hasColumn('budget_limits', 'generated')) {
|
||||
$table->boolean('generated')->default(false);
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -215,74 +197,71 @@ class ChangesForV550 extends Migration
|
||||
// new webhooks table
|
||||
if (!Schema::hasTable('webhooks')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhooks',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255)->index();
|
||||
$table->string('secret', 32)->index();
|
||||
$table->boolean('active')->default(true);
|
||||
$table->unsignedSmallInteger('trigger');
|
||||
$table->unsignedSmallInteger('response');
|
||||
$table->unsignedSmallInteger('delivery');
|
||||
$table->string('url', 1024);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('webhooks', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255)->index();
|
||||
$table->string('secret', 32)->index();
|
||||
$table->boolean('active')->default(true);
|
||||
$table->unsignedSmallInteger('trigger');
|
||||
$table->unsignedSmallInteger('response');
|
||||
$table->unsignedSmallInteger('delivery');
|
||||
$table->string('url', 1024);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhooks": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// new webhook_messages table
|
||||
if (!Schema::hasTable('webhook_messages')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_messages',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->boolean('sent')->default(false);
|
||||
$table->boolean('errored')->default(false);
|
||||
Schema::create('webhook_messages', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->boolean('sent')->default(false);
|
||||
$table->boolean('errored')->default(false);
|
||||
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->string('uuid', 64);
|
||||
$table->longText('message');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->string('uuid', 64);
|
||||
$table->longText('message');
|
||||
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhook_messages": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('webhook_attempts')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_attempts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('webhook_message_id', false, true);
|
||||
$table->unsignedSmallInteger('status_code')->default(0);
|
||||
Schema::create('webhook_attempts', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('webhook_message_id', false, true);
|
||||
$table->unsignedSmallInteger('status_code')->default(0);
|
||||
|
||||
$table->longText('logs')->nullable();
|
||||
$table->longText('response')->nullable();
|
||||
$table->longText('logs')->nullable();
|
||||
$table->longText('response')->nullable();
|
||||
|
||||
$table->foreign('webhook_message_id')->references('id')->on('webhook_messages')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('webhook_message_id')->references('id')->on('webhook_messages')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhook_attempts": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,17 +39,14 @@ class ChangesForV550b2 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_foreign');
|
||||
}
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->dropColumn('transaction_type_id');
|
||||
}
|
||||
Schema::table('recurrences_transactions', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_foreign');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->dropColumn('transaction_type_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -67,15 +64,12 @@ class ChangesForV550b2 extends Migration
|
||||
// expand recurrence transaction table
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
||||
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
||||
}
|
||||
Schema::table('recurrences_transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
||||
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -36,12 +36,9 @@ class AddLdapColumnsToUsersTable extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('users', 'domain')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['domain']);
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['domain']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -58,12 +55,9 @@ class AddLdapColumnsToUsersTable extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('users', 'domain')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('domain')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->string('domain')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -35,7 +35,9 @@ class ExtendCurrencyInfo extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -45,13 +47,10 @@ class ExtendCurrencyInfo extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('code', 51)->change();
|
||||
$table->string('symbol', 51)->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->string('code', 51)->change();
|
||||
$table->string('symbol', 51)->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -32,24 +32,23 @@ use Illuminate\Support\Facades\Schema;
|
||||
*/
|
||||
class UserGroups extends Migration
|
||||
{
|
||||
private array $tables
|
||||
= [
|
||||
'accounts',
|
||||
'attachments',
|
||||
'available_budgets',
|
||||
'bills',
|
||||
'budgets',
|
||||
'categories',
|
||||
'recurrences',
|
||||
'object_groups',
|
||||
'preferences',
|
||||
'rule_groups',
|
||||
'rules',
|
||||
'tags',
|
||||
'transaction_groups',
|
||||
'transaction_journals',
|
||||
'webhooks',
|
||||
];
|
||||
private array $tables = [
|
||||
'accounts',
|
||||
'attachments',
|
||||
'available_budgets',
|
||||
'bills',
|
||||
'budgets',
|
||||
'categories',
|
||||
'recurrences',
|
||||
'object_groups',
|
||||
'preferences',
|
||||
'rule_groups',
|
||||
'rules',
|
||||
'tags',
|
||||
'transaction_groups',
|
||||
'transaction_journals',
|
||||
'webhooks'
|
||||
];
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
@@ -61,17 +60,14 @@ class UserGroups extends Migration
|
||||
foreach ($this->tables as $tableName) {
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
$tableName,
|
||||
static function (Blueprint $table) use ($tableName): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
||||
}
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table($tableName, static function (Blueprint $table) use ($tableName): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -81,17 +77,14 @@ class UserGroups extends Migration
|
||||
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_user_group_id');
|
||||
}
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_user_group_id');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -117,76 +110,68 @@ class UserGroups extends Migration
|
||||
*/
|
||||
if (!Schema::hasTable('user_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'user_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('user_groups', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
}
|
||||
);
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "user_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('user_roles')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'user_roles',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('user_roles', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
}
|
||||
);
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "user_roles": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('group_memberships')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'group_memberships',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->bigInteger('user_group_id', false, true);
|
||||
$table->bigInteger('user_role_id', false, true);
|
||||
Schema::create('group_memberships', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->bigInteger('user_group_id', false, true);
|
||||
$table->bigInteger('user_role_id', false, true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_group_id')->references('id')->on('user_groups')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_role_id')->references('id')->on('user_roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->unique(['user_id', 'user_group_id', 'user_role_id']);
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_group_id')->references('id')->on('user_groups')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_role_id')->references('id')->on('user_roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->unique(['user_id', 'user_group_id', 'user_role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "group_memberships": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable();
|
||||
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate(
|
||||
'cascade'
|
||||
);
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable();
|
||||
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -196,17 +181,17 @@ class UserGroups extends Migration
|
||||
/** @var string $tableName */
|
||||
foreach ($this->tables as $tableName) {
|
||||
try {
|
||||
Schema::table(
|
||||
$tableName,
|
||||
static function (Blueprint $table) use ($tableName): void {
|
||||
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))->references('id')->on('user_groups')->onDelete(
|
||||
'set null'
|
||||
)->onUpdate('cascade');
|
||||
}
|
||||
Schema::table($tableName, static function (Blueprint $table) use ($tableName): void {
|
||||
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table
|
||||
->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))
|
||||
->references('id')
|
||||
->on('user_groups')
|
||||
->onDelete('set null')
|
||||
->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -60,7 +60,9 @@ class CreateLocalPersonalAccessTokensTable extends Migration
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "personal_access_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -36,15 +36,12 @@ return new class () extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -57,17 +54,14 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('cer_to_ugi');
|
||||
}
|
||||
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('cer_to_ugi');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -47,7 +47,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notifications": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -49,7 +49,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "invited_users": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -54,7 +54,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "audit_log_entries": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -36,17 +36,17 @@ return new class () extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', sprintf('%s_to_ugi', 'object_groups'))->references('id')->on('user_groups')->onDelete(
|
||||
'set null'
|
||||
)->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('object_groups', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table
|
||||
->foreign('user_group_id', sprintf('%s_to_ugi', 'object_groups'))
|
||||
->references('id')
|
||||
->on('user_groups')
|
||||
->onDelete('set null')
|
||||
->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -59,17 +59,14 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', 'object_groups'));
|
||||
}
|
||||
if (Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('object_groups', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', 'object_groups'));
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
* Run the migrations.
|
||||
@@ -49,7 +49,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_currency_user": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +70,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_03_03_174645_add_indices.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
private const string QUERY_ERROR = 'Could not execute query (table "%s", field "%s"): %s';
|
||||
private const string EXPL = 'If the index already exists (see error), or if MySQL can\'t do it, this is not an problem. Otherwise, please open a GitHub discussion.';
|
||||
|
||||
@@ -46,19 +45,24 @@ return new class () extends Migration {
|
||||
'category_transaction_journal' => ['transaction_journal_id'],
|
||||
'categories' => ['user_id', 'user_group_id'],
|
||||
'transaction_groups' => ['user_id', 'user_group_id'],
|
||||
'transaction_journals' => ['user_id', 'user_group_id', 'date', 'transaction_group_id', 'transaction_type_id', 'transaction_currency_id', 'bill_id'],
|
||||
'transactions' => ['account_id', 'transaction_journal_id', 'transaction_currency_id', 'foreign_currency_id'],
|
||||
'transaction_journals' => [
|
||||
'user_id',
|
||||
'user_group_id',
|
||||
'date',
|
||||
'transaction_group_id',
|
||||
'transaction_type_id',
|
||||
'transaction_currency_id',
|
||||
'bill_id'
|
||||
],
|
||||
'transactions' => ['account_id', 'transaction_journal_id', 'transaction_currency_id', 'foreign_currency_id']
|
||||
];
|
||||
|
||||
foreach ($set as $table => $fields) {
|
||||
foreach ($fields as $field) {
|
||||
try {
|
||||
Schema::table(
|
||||
$table,
|
||||
static function (Blueprint $blueprint) use ($field): void {
|
||||
$blueprint->index($field);
|
||||
}
|
||||
);
|
||||
Schema::table($table, static function (Blueprint $blueprint) use ($field): void {
|
||||
$blueprint->index($field);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::QUERY_ERROR, $table, $field, $e->getMessage()));
|
||||
app('log')->error(self::EXPL);
|
||||
@@ -70,5 +74,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_04_01_174351_expand_preferences_table.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,22 +27,19 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('preferences', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'preferences_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('preferences', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('preferences', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'preferences_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -53,5 +49,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_05_12_060551_create_account_balance_table.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -27,7 +26,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_07_28_145631_add_running_balance.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,49 +27,40 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->decimal('balance_before', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->decimal('balance_before', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->decimal('balance_after', 32, 12)->nullable()->after('balance_before');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->decimal('balance_after', 32, 12)->nullable()->after('balance_before');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->boolean('balance_dirty')->default(true)->after('balance_after');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->boolean('balance_dirty')->default(true)->after('balance_after');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -83,42 +73,33 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->dropColumn('balance_before');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->dropColumn('balance_before');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->dropColumn('balance_after');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->dropColumn('balance_after');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->dropColumn('balance_dirty');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->dropColumn('balance_dirty');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_11_05_062108_add_date_tz_columns.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,24 +27,24 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
private array $tables;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->tables = [
|
||||
'account_balances' => ['date'], // done
|
||||
'available_budgets' => ['start_date', 'end_date'], // done
|
||||
'bills' => ['date', 'end_date', 'extension_date'], // done
|
||||
'budget_limits' => ['start_date', 'end_date'], // done
|
||||
'account_balances' => ['date'], // done
|
||||
'available_budgets' => ['start_date', 'end_date'], // done
|
||||
'bills' => ['date', 'end_date', 'extension_date'], // done
|
||||
'budget_limits' => ['start_date', 'end_date'], // done
|
||||
'currency_exchange_rates' => ['date'], // done
|
||||
'invited_users' => ['expires'],
|
||||
'piggy_bank_events' => ['date'],
|
||||
'piggy_bank_repetitions' => ['startdate', 'targetdate'],
|
||||
'piggy_banks' => ['startdate', 'targetdate'], // done
|
||||
'recurrences' => ['first_date', 'repeat_until', 'latest_date'],
|
||||
'tags' => ['date'],
|
||||
'transaction_journals' => ['date'],
|
||||
'invited_users' => ['expires'],
|
||||
'piggy_bank_events' => ['date'],
|
||||
'piggy_bank_repetitions' => ['startdate', 'targetdate'],
|
||||
'piggy_banks' => ['startdate', 'targetdate'], // done
|
||||
'recurrences' => ['first_date', 'repeat_until', 'latest_date'],
|
||||
'tags' => ['date'],
|
||||
'transaction_journals' => ['date']
|
||||
];
|
||||
}
|
||||
|
||||
@@ -60,15 +59,14 @@ return new class () extends Migration {
|
||||
$newColumn = sprintf('%s_tz', $column);
|
||||
if (Schema::hasColumn($table, $column) && !Schema::hasColumn($table, $newColumn)) {
|
||||
try {
|
||||
Schema::table(
|
||||
$table,
|
||||
static function (Blueprint $table) use ($column, $newColumn): void {
|
||||
$table->string($newColumn, 50)->nullable()->after($column);
|
||||
}
|
||||
);
|
||||
Schema::table($table, static function (Blueprint $table) use ($column, $newColumn): void {
|
||||
$table->string($newColumn, 50)->nullable()->after($column);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not add column "%s" to table "%s" query: %s', $newColumn, $table, $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
app('log')->error(
|
||||
'If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,5 +76,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_11_30_075826_multi_piggy.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,7 +27,7 @@ use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
@@ -114,7 +113,6 @@ return new class () extends Migration {
|
||||
$table->unique(['account_id', 'piggy_bank_id'], 'unique_piggy_save');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,7 +159,6 @@ return new class () extends Migration {
|
||||
|
||||
protected static function hasForeign(string $table, string $column): bool
|
||||
{
|
||||
|
||||
$foreignKeysDefinitions = Schema::getForeignKeys($table);
|
||||
foreach ($foreignKeysDefinitions as $foreignKeyDefinition) {
|
||||
if ($foreignKeyDefinition['name'] === $column) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_12_19_061003_add_native_amount_column.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -27,21 +26,19 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
private array $tables
|
||||
= [
|
||||
// !!! this array is also in PreferencesEventHandler + RecalculateNativeAmountsCommand
|
||||
'accounts' => ['native_virtual_balance'], // works.
|
||||
'account_piggy_bank' => ['native_current_amount'], // works
|
||||
'auto_budgets' => ['native_amount'], // works
|
||||
'available_budgets' => ['native_amount'], // works
|
||||
'bills' => ['native_amount_min', 'native_amount_max'], // works
|
||||
'budget_limits' => ['native_amount'], // works
|
||||
'piggy_bank_events' => ['native_amount'], // works
|
||||
'piggy_banks' => ['native_target_amount'], // works
|
||||
'transactions' => ['native_amount', 'native_foreign_amount'], // works
|
||||
|
||||
];
|
||||
return new class() extends Migration {
|
||||
private array $tables = [
|
||||
// !!! this array is also in PreferencesEventHandler + RecalculateNativeAmountsCommand
|
||||
'accounts' => ['native_virtual_balance'], // works.
|
||||
'account_piggy_bank' => ['native_current_amount'], // works
|
||||
'auto_budgets' => ['native_amount'], // works
|
||||
'available_budgets' => ['native_amount'], // works
|
||||
'bills' => ['native_amount_min', 'native_amount_max'], // works
|
||||
'budget_limits' => ['native_amount'], // works
|
||||
'piggy_bank_events' => ['native_amount'], // works
|
||||
'piggy_banks' => ['native_target_amount'], // works
|
||||
'transactions' => ['native_amount', 'native_foreign_amount'] // works
|
||||
];
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2025_07_10_065736_rename_tag_mode.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2025_08_19_180459_create_webhook_details_tables.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org
|
||||
@@ -66,42 +65,35 @@ return new class extends Migration {
|
||||
// webhook_webhook_trigger
|
||||
if (!Schema::hasTable('webhook_webhook_trigger')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_trigger',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_trigger_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_trigger_id','link_to_trigger')->references('id')->on('webhook_triggers')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_trigger', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_trigger_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_trigger_id', 'link_to_trigger')->references('id')->on('webhook_triggers')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_trigger_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_trigger_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_trigger', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// webhook_webhook_response
|
||||
if (!Schema::hasTable('webhook_webhook_response')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_response',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_response_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_response_id','link_to_response')->references('id')->on('webhook_responses')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_response', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_response_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_response_id', 'link_to_response')->references('id')->on('webhook_responses')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_response_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_response_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_response', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -111,25 +103,21 @@ return new class extends Migration {
|
||||
// webhook_webhook_delivery
|
||||
if (!Schema::hasTable('webhook_webhook_delivery')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_delivery',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_delivery_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_delivery_id','link_to_delivery')->references('id')->on('webhook_deliveries')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_delivery', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_delivery_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_delivery_id', 'link_to_delivery')->references('id')->on('webhook_deliveries')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_delivery_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_delivery_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_delivery', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
|
||||
32
database/migrations/2026_01_28_201901_migrations_01_2026.php
Normal file
32
database/migrations/2026_01_28_201901_migrations_01_2026.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
/**
|
||||
* Fixes #11620
|
||||
*/
|
||||
return new class extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('transactions', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['transaction_journal_id', 'amount'], 'idx_tx_journal_amount');
|
||||
});
|
||||
|
||||
Schema::table('tag_transaction_journal', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['transaction_journal_id', 'tag_id'], 'idx_ttj_journal_tag');
|
||||
});
|
||||
Schema::table('transaction_journals', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['deleted_at'], 'idx_tj_deleted');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
};
|
||||
@@ -86,6 +86,7 @@ class TransactionCurrencySeeder extends Seeder
|
||||
$currencies[] = ['code' => 'KZT', 'name' => 'Kazakhstani tenge', 'symbol' => '₸', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'SAR', 'name' => 'Saudi Riyal', 'symbol' => 'SAR', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'RSD', 'name' => 'Serbian Dinar', 'symbol' => 'RSD', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'TWD', 'name' => 'New Taiwan Dollar', 'symbol' => 'NT$', 'decimal_places' => 0];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {
|
||||
|
||||
@@ -4,7 +4,7 @@ php-version = "8.4.0"
|
||||
|
||||
[source]
|
||||
workspace = "."
|
||||
paths = ["app/", "database/factories/", "database/seeders/", "tests/"]
|
||||
paths = ["app/", "database/factories/", "database/migrations/", "database/seeders/", "tests/", "resources/lang/en_US"]
|
||||
includes = ["vendor"]
|
||||
excludes = []
|
||||
|
||||
|
||||
418
package-lock.json
generated
418
package-lock.json
generated
@@ -17,9 +17,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
|
||||
"integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
|
||||
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -32,9 +32,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz",
|
||||
"integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
|
||||
"integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -42,21 +42,21 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
|
||||
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
|
||||
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.28.6",
|
||||
"@babel/generator": "^7.28.6",
|
||||
"@babel/code-frame": "^7.29.0",
|
||||
"@babel/generator": "^7.29.0",
|
||||
"@babel/helper-compilation-targets": "^7.28.6",
|
||||
"@babel/helper-module-transforms": "^7.28.6",
|
||||
"@babel/helpers": "^7.28.6",
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/parser": "^7.29.0",
|
||||
"@babel/template": "^7.28.6",
|
||||
"@babel/traverse": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"@babel/traverse": "^7.29.0",
|
||||
"@babel/types": "^7.29.0",
|
||||
"@jridgewell/remapping": "^2.3.5",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
@@ -83,14 +83,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
|
||||
"integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz",
|
||||
"integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"@babel/parser": "^7.29.0",
|
||||
"@babel/types": "^7.29.0",
|
||||
"@jridgewell/gen-mapping": "^0.3.12",
|
||||
"@jridgewell/trace-mapping": "^0.3.28",
|
||||
"jsesc": "^3.0.2"
|
||||
@@ -405,13 +405,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
|
||||
"integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
|
||||
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.28.6"
|
||||
"@babel/types": "^7.29.0"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -630,15 +630,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-async-generator-functions": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz",
|
||||
"integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz",
|
||||
"integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.28.6",
|
||||
"@babel/helper-remap-async-to-generator": "^7.27.1",
|
||||
"@babel/traverse": "^7.28.6"
|
||||
"@babel/traverse": "^7.29.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -820,9 +820,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz",
|
||||
"integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz",
|
||||
"integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1035,16 +1035,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-modules-systemjs": {
|
||||
"version": "7.28.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz",
|
||||
"integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
|
||||
"integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-transforms": "^7.28.3",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/helper-module-transforms": "^7.28.6",
|
||||
"@babel/helper-plugin-utils": "^7.28.6",
|
||||
"@babel/helper-validator-identifier": "^7.28.5",
|
||||
"@babel/traverse": "^7.28.5"
|
||||
"@babel/traverse": "^7.29.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1071,14 +1071,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",
|
||||
"integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz",
|
||||
"integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-create-regexp-features-plugin": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
"@babel/helper-create-regexp-features-plugin": "^7.28.5",
|
||||
"@babel/helper-plugin-utils": "^7.28.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1273,9 +1273,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-regenerator": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz",
|
||||
"integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz",
|
||||
"integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -1322,14 +1322,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-runtime": {
|
||||
"version": "7.28.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz",
|
||||
"integrity": "sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz",
|
||||
"integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-imports": "^7.27.1",
|
||||
"@babel/helper-plugin-utils": "^7.27.1",
|
||||
"@babel/helper-module-imports": "^7.28.6",
|
||||
"@babel/helper-plugin-utils": "^7.28.6",
|
||||
"babel-plugin-polyfill-corejs2": "^0.4.14",
|
||||
"babel-plugin-polyfill-corejs3": "^0.13.0",
|
||||
"babel-plugin-polyfill-regenerator": "^0.6.5",
|
||||
@@ -1501,13 +1501,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz",
|
||||
"integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz",
|
||||
"integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.28.6",
|
||||
"@babel/compat-data": "^7.29.0",
|
||||
"@babel/helper-compilation-targets": "^7.28.6",
|
||||
"@babel/helper-plugin-utils": "^7.28.6",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
@@ -1521,7 +1521,7 @@
|
||||
"@babel/plugin-syntax-import-attributes": "^7.28.6",
|
||||
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
|
||||
"@babel/plugin-transform-arrow-functions": "^7.27.1",
|
||||
"@babel/plugin-transform-async-generator-functions": "^7.28.6",
|
||||
"@babel/plugin-transform-async-generator-functions": "^7.29.0",
|
||||
"@babel/plugin-transform-async-to-generator": "^7.28.6",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.27.1",
|
||||
"@babel/plugin-transform-block-scoping": "^7.28.6",
|
||||
@@ -1532,7 +1532,7 @@
|
||||
"@babel/plugin-transform-destructuring": "^7.28.5",
|
||||
"@babel/plugin-transform-dotall-regex": "^7.28.6",
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.27.1",
|
||||
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6",
|
||||
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0",
|
||||
"@babel/plugin-transform-dynamic-import": "^7.27.1",
|
||||
"@babel/plugin-transform-explicit-resource-management": "^7.28.6",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.28.6",
|
||||
@@ -1545,9 +1545,9 @@
|
||||
"@babel/plugin-transform-member-expression-literals": "^7.27.1",
|
||||
"@babel/plugin-transform-modules-amd": "^7.27.1",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.28.6",
|
||||
"@babel/plugin-transform-modules-systemjs": "^7.28.5",
|
||||
"@babel/plugin-transform-modules-systemjs": "^7.29.0",
|
||||
"@babel/plugin-transform-modules-umd": "^7.27.1",
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1",
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0",
|
||||
"@babel/plugin-transform-new-target": "^7.27.1",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.28.6",
|
||||
@@ -1559,7 +1559,7 @@
|
||||
"@babel/plugin-transform-private-methods": "^7.28.6",
|
||||
"@babel/plugin-transform-private-property-in-object": "^7.28.6",
|
||||
"@babel/plugin-transform-property-literals": "^7.27.1",
|
||||
"@babel/plugin-transform-regenerator": "^7.28.6",
|
||||
"@babel/plugin-transform-regenerator": "^7.29.0",
|
||||
"@babel/plugin-transform-regexp-modifiers": "^7.28.6",
|
||||
"@babel/plugin-transform-reserved-words": "^7.27.1",
|
||||
"@babel/plugin-transform-shorthand-properties": "^7.27.1",
|
||||
@@ -1572,10 +1572,10 @@
|
||||
"@babel/plugin-transform-unicode-regex": "^7.27.1",
|
||||
"@babel/plugin-transform-unicode-sets-regex": "^7.28.6",
|
||||
"@babel/preset-modules": "0.1.6-no-external-plugins",
|
||||
"babel-plugin-polyfill-corejs2": "^0.4.14",
|
||||
"babel-plugin-polyfill-corejs3": "^0.13.0",
|
||||
"babel-plugin-polyfill-regenerator": "^0.6.5",
|
||||
"core-js-compat": "^3.43.0",
|
||||
"babel-plugin-polyfill-corejs2": "^0.4.15",
|
||||
"babel-plugin-polyfill-corejs3": "^0.14.0",
|
||||
"babel-plugin-polyfill-regenerator": "^0.6.6",
|
||||
"core-js-compat": "^3.48.0",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1585,6 +1585,20 @@
|
||||
"@babel/core": "^7.0.0-0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
|
||||
"version": "0.14.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz",
|
||||
"integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-define-polyfill-provider": "^0.6.6",
|
||||
"core-js-compat": "^3.48.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
@@ -1635,18 +1649,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
|
||||
"integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
|
||||
"integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.28.6",
|
||||
"@babel/generator": "^7.28.6",
|
||||
"@babel/code-frame": "^7.29.0",
|
||||
"@babel/generator": "^7.29.0",
|
||||
"@babel/helper-globals": "^7.28.0",
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/parser": "^7.29.0",
|
||||
"@babel/template": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"@babel/types": "^7.29.0",
|
||||
"debug": "^4.3.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1654,9 +1668,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
|
||||
"integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
|
||||
"version": "7.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
|
||||
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -2606,9 +2620,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz",
|
||||
"integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz",
|
||||
"integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2620,9 +2634,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz",
|
||||
"integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz",
|
||||
"integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2634,9 +2648,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz",
|
||||
"integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz",
|
||||
"integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2648,9 +2662,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz",
|
||||
"integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz",
|
||||
"integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2662,9 +2676,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz",
|
||||
"integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz",
|
||||
"integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2676,9 +2690,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz",
|
||||
"integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz",
|
||||
"integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2690,9 +2704,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz",
|
||||
"integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz",
|
||||
"integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2704,9 +2718,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz",
|
||||
"integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz",
|
||||
"integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
@@ -2718,9 +2732,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2732,9 +2746,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz",
|
||||
"integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz",
|
||||
"integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2746,9 +2760,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-loong64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
@@ -2760,9 +2774,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-loong64-musl": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz",
|
||||
"integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz",
|
||||
"integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
@@ -2774,9 +2788,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@@ -2788,9 +2802,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-ppc64-musl": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz",
|
||||
"integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz",
|
||||
"integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
@@ -2802,9 +2816,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@@ -2816,9 +2830,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz",
|
||||
"integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz",
|
||||
"integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
@@ -2830,9 +2844,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
@@ -2844,9 +2858,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2858,9 +2872,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz",
|
||||
"integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz",
|
||||
"integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2872,9 +2886,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-openbsd-x64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz",
|
||||
"integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz",
|
||||
"integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2886,9 +2900,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-openharmony-arm64": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz",
|
||||
"integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz",
|
||||
"integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2900,9 +2914,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz",
|
||||
"integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz",
|
||||
"integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -2914,9 +2928,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz",
|
||||
"integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz",
|
||||
"integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
@@ -2928,9 +2942,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-gnu": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz",
|
||||
"integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz",
|
||||
"integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2942,9 +2956,9 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz",
|
||||
"integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz",
|
||||
"integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -3232,9 +3246,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "25.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz",
|
||||
"integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==",
|
||||
"version": "25.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
|
||||
"integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3834,9 +3848,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/alpinejs": {
|
||||
"version": "3.15.4",
|
||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.4.tgz",
|
||||
"integrity": "sha512-lDpOdoVo0bhFjgl310k1qw3kbpUYwM/v0WByvAchsO93bl3o1rrgr0P/ssx3CimwEtNfXbmwKbtHbqTRCTTH9g==",
|
||||
"version": "3.15.6",
|
||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.6.tgz",
|
||||
"integrity": "sha512-ETE0k88xU74URryk2JyvmrvyCyZG0Wo+2/tZux9gEvaPc/k5XcBSdvFHyW76puIFqhD+nHgeO/5j3pRRsHh6HA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "~3.1.1"
|
||||
@@ -3966,9 +3980,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/autoprefixer": {
|
||||
"version": "10.4.23",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz",
|
||||
"integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==",
|
||||
"version": "10.4.24",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz",
|
||||
"integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -3987,7 +4001,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"browserslist": "^4.28.1",
|
||||
"caniuse-lite": "^1.0.30001760",
|
||||
"caniuse-lite": "^1.0.30001766",
|
||||
"fraction.js": "^5.3.4",
|
||||
"picocolors": "^1.1.1",
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
@@ -4019,9 +4033,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz",
|
||||
"integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==",
|
||||
"version": "1.13.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz",
|
||||
"integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -4131,9 +4145,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/baseline-browser-mapping": {
|
||||
"version": "2.9.18",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz",
|
||||
"integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==",
|
||||
"version": "2.9.19",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
|
||||
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
@@ -4564,9 +4578,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001766",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz",
|
||||
"integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==",
|
||||
"version": "1.0.30001767",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz",
|
||||
"integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -5191,21 +5205,21 @@
|
||||
}
|
||||
},
|
||||
"node_modules/css-loader": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
|
||||
"integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
|
||||
"version": "7.1.3",
|
||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.3.tgz",
|
||||
"integrity": "sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"icss-utils": "^5.1.0",
|
||||
"postcss": "^8.4.33",
|
||||
"postcss": "^8.4.40",
|
||||
"postcss-modules-extract-imports": "^3.1.0",
|
||||
"postcss-modules-local-by-default": "^4.0.5",
|
||||
"postcss-modules-scope": "^3.2.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"semver": "^7.5.4"
|
||||
"semver": "^7.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18.12.0"
|
||||
@@ -5769,9 +5783,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.278",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz",
|
||||
"integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==",
|
||||
"version": "1.5.283",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz",
|
||||
"integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
@@ -10089,9 +10103,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.56.0",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz",
|
||||
"integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==",
|
||||
"version": "4.57.1",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz",
|
||||
"integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -10105,31 +10119,31 @@
|
||||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.56.0",
|
||||
"@rollup/rollup-android-arm64": "4.56.0",
|
||||
"@rollup/rollup-darwin-arm64": "4.56.0",
|
||||
"@rollup/rollup-darwin-x64": "4.56.0",
|
||||
"@rollup/rollup-freebsd-arm64": "4.56.0",
|
||||
"@rollup/rollup-freebsd-x64": "4.56.0",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.56.0",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.56.0",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.56.0",
|
||||
"@rollup/rollup-linux-loong64-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-loong64-musl": "4.56.0",
|
||||
"@rollup/rollup-linux-ppc64-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-ppc64-musl": "4.56.0",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-riscv64-musl": "4.56.0",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.56.0",
|
||||
"@rollup/rollup-linux-x64-musl": "4.56.0",
|
||||
"@rollup/rollup-openbsd-x64": "4.56.0",
|
||||
"@rollup/rollup-openharmony-arm64": "4.56.0",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.56.0",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.56.0",
|
||||
"@rollup/rollup-win32-x64-gnu": "4.56.0",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.56.0",
|
||||
"@rollup/rollup-android-arm-eabi": "4.57.1",
|
||||
"@rollup/rollup-android-arm64": "4.57.1",
|
||||
"@rollup/rollup-darwin-arm64": "4.57.1",
|
||||
"@rollup/rollup-darwin-x64": "4.57.1",
|
||||
"@rollup/rollup-freebsd-arm64": "4.57.1",
|
||||
"@rollup/rollup-freebsd-x64": "4.57.1",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.57.1",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.57.1",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.57.1",
|
||||
"@rollup/rollup-linux-loong64-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-loong64-musl": "4.57.1",
|
||||
"@rollup/rollup-linux-ppc64-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-ppc64-musl": "4.57.1",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-riscv64-musl": "4.57.1",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.57.1",
|
||||
"@rollup/rollup-linux-x64-musl": "4.57.1",
|
||||
"@rollup/rollup-openbsd-x64": "4.57.1",
|
||||
"@rollup/rollup-openharmony-arm64": "4.57.1",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.57.1",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.57.1",
|
||||
"@rollup/rollup-win32-x64-gnu": "4.57.1",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.57.1",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -79,7 +79,7 @@ export default {
|
||||
if (res.data.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
|
||||
// add to temp list
|
||||
let currentPiggy = res.data[key];
|
||||
if (currentPiggy.objectGroup) {
|
||||
if (null !== currentPiggy.object_group_id) {
|
||||
let groupOrder = currentPiggy.object_group_order;
|
||||
if (!tempList[groupOrder]) {
|
||||
tempList[groupOrder] = {
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
"process_date": "Data proces\u0103rii",
|
||||
"due_date": "Data scadent\u0103",
|
||||
"foreign_amount": "Sum\u0103 str\u0103in\u0103",
|
||||
"payment_date": "Data de plat\u0103",
|
||||
"payment_date": "Data pl\u0103\u021bii",
|
||||
"invoice_date": "Data facturii",
|
||||
"internal_reference": "Referin\u021b\u0103 intern\u0103",
|
||||
"webhook_response": "R\u0103spuns",
|
||||
|
||||
@@ -78,10 +78,10 @@ export default class Get {
|
||||
/**
|
||||
*
|
||||
* @param identifier
|
||||
* @param page
|
||||
* @param params
|
||||
* @returns {Promise<AxiosResponse<any>>}
|
||||
*/
|
||||
transactions(identifier, page) {
|
||||
return api.get('/api/v1/accounts/' + identifier + '/transactions', {params: {page: page}});
|
||||
transactions(identifier, params) {
|
||||
return api.get('/api/v1/accounts/' + identifier + '/transactions', {params: params});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,4 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
|
||||
return [
|
||||
];
|
||||
return [];
|
||||
|
||||
@@ -20,11 +20,6 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
];
|
||||
return ['failed' => 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.'];
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
@@ -56,8 +54,6 @@ return [
|
||||
'transfer_list' => 'Transfers',
|
||||
'transfers_list' => 'Transfers',
|
||||
|
||||
|
||||
|
||||
'reconciliation_list' => 'Reconciliations',
|
||||
'create_withdrawal' => 'Create new withdrawal',
|
||||
'create_deposit' => 'Create new deposit',
|
||||
@@ -93,5 +89,4 @@ return [
|
||||
// exchange rates
|
||||
'exchange_rates_index' => 'Exchange rates',
|
||||
'exchange_rates_rates' => 'Exchange rates between :from and :to (and the other way around)',
|
||||
|
||||
];
|
||||
|
||||
@@ -20,9 +20,6 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
];
|
||||
return [];
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
@@ -41,8 +39,6 @@ return [
|
||||
// 'month_and_day_no_year' => '%B %e',
|
||||
'month_and_day_no_year_js' => 'MMMM Do',
|
||||
|
||||
|
||||
|
||||
// 'date_time' => '%B %e, %Y, @ %T',
|
||||
'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss',
|
||||
'date_time_fns' => 'MMMM do, yyyy @ HH:mm:ss',
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user