diff --git a/app/Api/V2/Controllers/Chart/AccountController.php b/app/Api/V2/Controllers/Chart/AccountController.php index fabb42e6a0..868a446ecd 100644 --- a/app/Api/V2/Controllers/Chart/AccountController.php +++ b/app/Api/V2/Controllers/Chart/AccountController.php @@ -31,7 +31,7 @@ use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Administration\Account\AccountRepositoryInterface; -use FireflyIII\Support\Http\Api\ConvertsExchangeRates; +use FireflyIII\Support\Http\Api\CleansChartData; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Psr\Container\ContainerExceptionInterface; @@ -42,7 +42,7 @@ use Psr\Container\NotFoundExceptionInterface; */ class AccountController extends Controller { - use ConvertsExchangeRates; + use CleansChartData; private AccountRepositoryInterface $repository; @@ -81,6 +81,7 @@ class AccountController extends Controller $start = $dates['start']; /** @var Carbon $end */ $end = $dates['end']; + $end->endOfDay(); /** @var User $user */ $user = auth()->user(); @@ -120,8 +121,9 @@ class AccountController extends Controller 'native_code' => $default->code, 'native_symbol' => $default->symbol, 'native_decimal_places' => (int)$default->decimal_places, - 'start_date' => $start->toAtomString(), - 'end_date' => $end->toAtomString(), + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'period' => '1D', 'entries' => [], 'native_entries' => [], ]; @@ -146,6 +148,6 @@ class AccountController extends Controller $chartData[] = $currentSet; } - return response()->json($chartData); + return response()->json($this->clean($chartData)); } } diff --git a/app/Api/V2/Controllers/Chart/BalanceController.php b/app/Api/V2/Controllers/Chart/BalanceController.php index d9101a147b..0a6a4cd4c0 100644 --- a/app/Api/V2/Controllers/Chart/BalanceController.php +++ b/app/Api/V2/Controllers/Chart/BalanceController.php @@ -28,7 +28,7 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Administration\Account\AccountRepositoryInterface; -use FireflyIII\Support\Http\Api\ConvertsExchangeRates; +use FireflyIII\Support\Http\Api\CleansChartData; use FireflyIII\Support\Http\Api\ExchangeRateConverter; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; @@ -38,7 +38,7 @@ use Illuminate\Support\Collection; */ class BalanceController extends Controller { - use ConvertsExchangeRates; + use CleansChartData; private AccountRepositoryInterface $repository; @@ -76,6 +76,7 @@ class BalanceController extends Controller $start = $params['start']; /** @var Carbon $end */ $end = $params['end']; + $end->endOfDay(); /** @var Collection $accounts */ $accounts = $params['accounts']; $preferredRange = $params['period']; @@ -196,6 +197,9 @@ class BalanceController extends Controller 'native_symbol' => $currency['native_symbol'], 'native_code' => $currency['native_code'], 'native_decimal_places' => $currency['native_decimal_places'], + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'period' => $preferredRange, 'entries' => [], 'native_entries' => [], ]; @@ -209,6 +213,9 @@ class BalanceController extends Controller 'native_symbol' => $currency['native_symbol'], 'native_code' => $currency['native_code'], 'native_decimal_places' => $currency['native_decimal_places'], + 'start' => $start->toAtomString(), + 'end' => $end->toAtomString(), + 'period' => $preferredRange, 'entries' => [], 'native_entries' => [], @@ -233,7 +240,7 @@ class BalanceController extends Controller $chartData[] = $income; $chartData[] = $expense; } - return response()->json($chartData); + return response()->json($this->clean($chartData)); } } diff --git a/app/Support/Http/Api/CleansChartData.php b/app/Support/Http/Api/CleansChartData.php new file mode 100644 index 0000000000..3d969a5ad9 --- /dev/null +++ b/app/Support/Http/Api/CleansChartData.php @@ -0,0 +1,69 @@ +. + */ + +namespace FireflyIII\Support\Http\Api; + +use FireflyIII\Exceptions\FireflyException; + +/** + * Trait CleansChartData + */ +trait CleansChartData +{ + /** + * Clean up given chart data array. Each entry is supposed to be a + * "main" entry used in the V2 API chart endpoints. This loop makes sure + * IDs are strings and other values are present (or missing). + * + * @param array $data + * + * @return array + * @throws FireflyException + */ + private function clean(array $data): array + { + $return = []; + /** + * @var mixed $index + * @var array $array + */ + foreach ($data as $index => $array) { + if (array_key_exists('currency_id', $array)) { + $array['currency_id'] = (string)$array['currency_id']; + } + if (array_key_exists('native_id', $array)) { + $array['native_id'] = (string)$array['native_id']; + } + if (!array_key_exists('end', $array)) { + throw new FireflyException(sprintf('Data-set "%s" is missing the "end"-variable.', $index)); + } + if (!array_key_exists('start', $array)) { + throw new FireflyException(sprintf('Data-set "%s" is missing the "start"-variable.', $index)); + } + if (!array_key_exists('period', $array)) { + throw new FireflyException(sprintf('Data-set "%s" is missing the "period"-variable.', $index)); + } + $return[] = $array; + } + return $return; + } + +} diff --git a/app/Support/Http/Api/ConvertsExchangeRates.php b/app/Support/Http/Api/ConvertsExchangeRates.php index c2d828903d..7c80220e46 100644 --- a/app/Support/Http/Api/ConvertsExchangeRates.php +++ b/app/Support/Http/Api/ConvertsExchangeRates.php @@ -230,9 +230,11 @@ trait ConvertsExchangeRates * @param array $entries * * @return array + * @deprecated */ public function cerSum(array $entries): array { + die('do not use me, needs refactor'); if (null === $this->enabled) { $this->getPreference(); } diff --git a/config/firefly.php b/config/firefly.php index 240ba477b8..b800bbc188 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -108,8 +108,8 @@ return [ 'handle_debts' => true, // see cer.php for exchange rates feature flag. ], - 'version' => '6.0.19', - 'api_version' => '2.0.4', + 'version' => '6.0.20', + 'api_version' => '2.0.5', 'db_version' => 19, // generic settings