Files
firefly-iii/app/JsonApi/V2/Accounts/AccountSchema.php

113 lines
3.2 KiB
PHP
Raw Normal View History

2024-05-10 09:42:09 +02:00
<?php
declare(strict_types=1);
2024-07-26 12:52:54 +02:00
namespace FireflyIII\JsonApi\V2\Accounts;
2024-05-10 09:42:09 +02:00
use FireflyIII\Models\Account;
2024-07-27 15:42:43 +02:00
use FireflyIII\Support\JsonApi\Concerns\UsergroupAware;
2024-07-28 07:02:04 +02:00
use Illuminate\Support\Facades\Log;
2024-07-27 15:42:43 +02:00
use LaravelJsonApi\Core\Schema\Schema;
2024-05-10 09:42:09 +02:00
use LaravelJsonApi\Eloquent\Fields\Relations\HasOne;
2024-07-27 15:42:43 +02:00
use LaravelJsonApi\NonEloquent\Fields\Attribute;
use LaravelJsonApi\NonEloquent\Fields\ID;
2024-07-28 12:23:45 +02:00
use LaravelJsonApi\NonEloquent\Filters\Filter;
2024-08-03 07:28:56 +02:00
use LaravelJsonApi\NonEloquent\Pagination\EnumerablePagination;
2024-07-27 15:42:43 +02:00
2024-05-10 09:42:09 +02:00
class AccountSchema extends Schema
{
2024-07-27 15:42:43 +02:00
use UsergroupAware;
2024-05-10 09:42:09 +02:00
/**
* The model the schema corresponds to.
*/
public static string $model = Account::class;
/**
* Get the resource fields.
*/
public function fields(): array
{
return [
ID::make(),
2024-07-28 12:23:45 +02:00
Attribute::make('created_at'),
Attribute::make('updated_at'),
// basic info and meta data
2024-08-03 06:18:46 +02:00
Attribute::make('name')->sortable(),
Attribute::make('active')->sortable(),
Attribute::make('order')->sortable(),
Attribute::make('iban')->sortable(),
Attribute::make('account_type'),
2024-07-28 12:23:45 +02:00
Attribute::make('account_role'),
2024-08-03 06:18:46 +02:00
Attribute::make('account_number')->sortable(),
2024-07-28 12:23:45 +02:00
// currency
Attribute::make('currency_id'),
Attribute::make('currency_name'),
Attribute::make('currency_code'),
Attribute::make('currency_symbol'),
Attribute::make('currency_decimal_places'),
2024-08-02 05:39:04 +02:00
Attribute::make('is_multi_currency'),
// balance
2024-08-03 06:18:46 +02:00
Attribute::make('balance')->sortable(),
Attribute::make('native_balance')->sortable(),
2024-07-28 12:23:45 +02:00
// liability things
Attribute::make('liability_direction'),
Attribute::make('interest'),
Attribute::make('interest_period'),
// Attribute::make('current_debt')->sortable(),
// TODO credit card fields.
2024-07-28 12:23:45 +02:00
// dynamic data
Attribute::make('last_activity')->sortable(),
2024-08-03 06:18:46 +02:00
Attribute::make('balance_difference')->sortable(), // only used for sort.
2024-07-28 12:23:45 +02:00
2024-08-02 05:39:04 +02:00
// group
Attribute::make('object_group_id'),
Attribute::make('object_group_title'),
Attribute::make('object_group_order'),
// relations.
HasOne::make('user')->readOnly(),
2024-05-10 09:42:09 +02:00
];
}
/**
2024-07-27 15:42:43 +02:00
* Get the resource filters.
2024-05-10 09:42:09 +02:00
*/
public function filters(): array
{
Log::debug(__METHOD__);
$array = [];
$config = config('api.valid_api_filters')[Account::class];
foreach ($config as $entry) {
$array[] = Filter::make($entry);
}
return $array;
2024-05-10 09:42:09 +02:00
}
2024-07-27 15:42:43 +02:00
public function repository(): AccountRepository
2024-05-10 09:42:09 +02:00
{
2024-08-03 07:28:56 +02:00
Log::debug(__METHOD__);
2024-07-27 15:42:43 +02:00
$this->setUserGroup($this->server->getUsergroup());
2024-08-03 07:28:56 +02:00
return AccountRepository::make()
->withServer($this->server)
->withSchema($this)
->withUserGroup($this->userGroup)
;
2024-08-03 07:28:56 +02:00
}
public function pagination(): EnumerablePagination
{
Log::debug(__METHOD__);
2024-08-03 07:28:56 +02:00
return EnumerablePagination::make();
2024-05-10 09:42:09 +02:00
}
}