Restore previous stuff

This commit is contained in:
James Cole
2024-05-10 12:51:02 +02:00
parent aa5c4c20e9
commit c6c8f282e2
9 changed files with 96 additions and 20 deletions

View File

@@ -40,17 +40,6 @@ class AccountRepository extends AbstractRepository implements QueriesAll
*/ */
public function __construct() {} public function __construct() {}
/**
* Get the tags relationship
*
* @param Account $account
* @return iterable
*/
public function getBalances(Account $account): iterable
{
die('here we are');
}
/** /**
* @inheritDoc * @inheritDoc
*/ */

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\JsonApi\V3\Accounts; namespace FireflyIII\JsonApi\V3\Accounts;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use LaravelJsonApi\Core\Resources\JsonApiResource; use LaravelJsonApi\Core\Resources\JsonApiResource;
class AccountResource extends JsonApiResource class AccountResource extends JsonApiResource
@@ -54,11 +55,17 @@ class AccountResource extends JsonApiResource
'name' => $this->resource->name, 'name' => $this->resource->name,
'iban' => '' === $this->resource->iban ? null : $this->resource->iban, 'iban' => '' === $this->resource->iban ? null : $this->resource->iban,
'active' => $this->resource->active, 'active' => $this->resource->active,
// 'virtual_balance' => $this->resource->virtual_balance,
'last_activity' => $this->resource->last_activity, 'last_activity' => $this->resource->last_activity,
// 'native_balance' => $this->resource->native_balance,
'type' => $this->resource->type, 'type' => $this->resource->type,
'account_role' => $this->resource->account_role, 'account_role' => $this->resource->account_role,
// 'virtual_balance' => $this->resource->virtual_balance,
// 'native_balance' => $this->resource->native_balance,
//'user' => $this->resource->user_array, //'user' => $this->resource->user_array,
// 'balances' => [] // 'balances' => []
// //
@@ -152,9 +159,8 @@ class AccountResource extends JsonApiResource
public function relationships($request): iterable public function relationships($request): iterable
{ {
return [ return [
$this->relation('user')->withData($this->resource->user_array), $this->relation('user')->withData($this->resource->user),
$this->relation('balances')->withData([]), $this->relation('balances')->withData($this->resource->balances),
//$this->relation('tags')->withData($this->resource->getTags()),
]; ];
} }
} }

View File

@@ -23,7 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\JsonApi\V3\Accounts\Capabilities; namespace FireflyIII\JsonApi\V3\Accounts\Capabilities;
use FireflyIII\Models\Account;
use FireflyIII\Support\JsonApi\Concerns\UsergroupAware; use FireflyIII\Support\JsonApi\Concerns\UsergroupAware;
use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment;
use FireflyIII\Support\JsonApi\ExpandsQuery; use FireflyIII\Support\JsonApi\ExpandsQuery;
@@ -48,6 +47,7 @@ class AccountQuery extends QueryAll implements HasPagination
*/ */
#[\Override] public function get(): iterable #[\Override] public function get(): iterable
{ {
$filters = $this->queryParameters->filter(); $filters = $this->queryParameters->filter();
$sort = $this->queryParameters->sortFields(); $sort = $this->queryParameters->sortFields();
$pagination = $this->filtersPagination($this->queryParameters->page()); $pagination = $this->filtersPagination($this->queryParameters->page());

View File

@@ -3,6 +3,7 @@
namespace FireflyIII\JsonApi\V3; namespace FireflyIII\JsonApi\V3;
use FireflyIII\JsonApi\V3\Accounts\AccountSchema; use FireflyIII\JsonApi\V3\Accounts\AccountSchema;
use FireflyIII\JsonApi\V3\Balances\BalanceSchema;
use FireflyIII\JsonApi\V3\Users\UserSchema; use FireflyIII\JsonApi\V3\Users\UserSchema;
use LaravelJsonApi\Core\Server\Server as BaseServer; use LaravelJsonApi\Core\Server\Server as BaseServer;
@@ -36,6 +37,7 @@ class Server extends BaseServer
return [ return [
AccountSchema::class, AccountSchema::class,
UserSchema::class, UserSchema::class,
BalanceSchema::class,
]; ];
} }

View File

@@ -7,6 +7,7 @@ use LaravelJsonApi\Eloquent\Contracts\Paginator;
use LaravelJsonApi\Eloquent\Fields\DateTime; use LaravelJsonApi\Eloquent\Fields\DateTime;
use LaravelJsonApi\Eloquent\Fields\ID; use LaravelJsonApi\Eloquent\Fields\ID;
use LaravelJsonApi\Eloquent\Fields\Relations\HasMany; use LaravelJsonApi\Eloquent\Fields\Relations\HasMany;
use LaravelJsonApi\Eloquent\Fields\Str;
use LaravelJsonApi\Eloquent\Filters\WhereIdIn; use LaravelJsonApi\Eloquent\Filters\WhereIdIn;
use LaravelJsonApi\Eloquent\Pagination\PagePagination; use LaravelJsonApi\Eloquent\Pagination\PagePagination;
use LaravelJsonApi\Eloquent\Schema; use LaravelJsonApi\Eloquent\Schema;
@@ -31,7 +32,8 @@ class UserSchema extends Schema
return [ return [
ID::make(), ID::make(),
DateTime::make('created_at')->sortable()->readOnly(), DateTime::make('created_at')->sortable()->readOnly(),
DateTime::make('created_at')->sortable()->readOnly(), DateTime::make('updated_at')->sortable()->readOnly(),
Str::make('email'),
HasMany::make('accounts'), HasMany::make('accounts'),
]; ];
} }

View File

@@ -51,4 +51,19 @@ class AccountPolicy
{ {
return auth()->check(); return auth()->check();
} }
/**
* Everybody can do this, but selection should limit to user.
*
* @return true
*/
public function viewUser(User $user, Account $account): bool
{
return $this->view($user, $account);
}
public function viewBalances(User $user, Account $account): bool
{
return $this->view($user, $account);
}
} }

View File

@@ -0,0 +1,53 @@
<?php
/*
* BalancePolicy.php
* Copyright (c) 2024 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/.
*/
declare(strict_types=1);
namespace FireflyIII\Policies;
use FireflyIII\Models\Account;
use FireflyIII\User;
class BalancePolicy
{
/**
* TODO needs better authentication.
*
* @param User $user
* @param Account $account
*
* @return bool
*/
public function view(User $user, Account $account): bool
{
return auth()->check() && $user->id === $account->user_id;
}
/**
* Everybody can do this, but selection should limit to user.
*
* @return true
*/
public function viewAny(): bool
{
return auth()->check();
}
}

View File

@@ -51,6 +51,11 @@ class AccountEnrichment implements EnrichmentInterface
$this->collection->transform(function (Account $account) { $this->collection->transform(function (Account $account) {
$account->user_array = ['id' => 1,'bla bla' => 'bla']; $account->user_array = ['id' => 1,'bla bla' => 'bla'];
$account->balances = collect([
['balance_id' => 1,'balance' => 5],
['balance_id' => 2,'balance' => 5],
['balance_id' => 3,'balance' => 5],
]);
return $account; return $account;
}); });

View File

@@ -23,14 +23,18 @@
declare(strict_types=1); declare(strict_types=1);
use LaravelJsonApi\Laravel\Facades\JsonApiRoute; use LaravelJsonApi\Laravel\Facades\JsonApiRoute;
use LaravelJsonApi\Laravel\Routing\ResourceRegistrar;
use LaravelJsonApi\Laravel\Http\Controllers\JsonApiController; use LaravelJsonApi\Laravel\Http\Controllers\JsonApiController;
use LaravelJsonApi\Laravel\Routing\Relationships;
use LaravelJsonApi\Laravel\Routing\ResourceRegistrar;
JsonApiRoute::server('v3') JsonApiRoute::server('v3')
->prefix('v3') ->prefix('v3')
->resources(function (ResourceRegistrar $server) { ->resources(function (ResourceRegistrar $server) {
$server->resource('accounts', JsonApiController::class); $server->resource('accounts', JsonApiController::class)->readOnly()->relationships(function (Relationships $relations) {
$relations->hasOne('user')->readOnly();
$relations->hasMany('balances')->readOnly();
});
$server->resource('users', JsonApiController::class); $server->resource('users', JsonApiController::class);
}); });