show transaction usage history detail

This commit is contained in:
Čarodej
2022-01-17 13:30:44 +01:00
parent 97b429f8d1
commit 2403f89ca3
11 changed files with 444 additions and 103 deletions
@@ -0,0 +1,19 @@
<?php
namespace Domain\Transactions\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Domain\Transactions\Resources\TransactionCollection;
class GetTransactionsController extends Controller
{
public function __invoke()
{
$transactions = Auth::user()
->transactions()
->sortable(['created_at' => 'desc'])
->paginate(20);
return new TransactionCollection($transactions);
}
}
@@ -0,0 +1,22 @@
<?php
namespace Domain\Transactions\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TransactionCollection extends ResourceCollection
{
public $collects = TransactionResource::class;
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => $this->collection,
];
}
}
@@ -0,0 +1,57 @@
<?php
namespace Domain\Transactions\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Users\Actions\FormatUsageEstimatesAction;
class TransactionResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'data' => [
'id' => $this->id,
'type' => 'transactions',
'attributes' => [
'type' => $this->type,
'status' => $this->status,
'note' => $this->note,
'price' => format_currency($this->amount, $this->currency),
'currency' => $this->currency,
'amount' => $this->amount,
'driver' => $this->driver,
'reference' => $this->reference,
'metadata' => $this->metadata
? resolve(FormatUsageEstimatesAction::class)($this->currency, $this->metadata)
: null,
'created_at' => $this->created_at->formatLocalized('%d. %b. %Y'),
'updated_at' => $this->updated_at,
],
'relationships' => [
$this->mergeWhen($this->user && $this->user->settings, fn () => [
'user' => [
'data' => [
'id' => $this->user->id,
'type' => 'users',
'attributes' => [
'avatar' => $this->user->settings->avatar,
'first_name' => $this->user->settings->first_name,
'last_name' => $this->user->settings->last_name,
'name' => $this->user->settings->name,
'color' => $this->user->settings->color,
'email' => $this->user->email,
],
],
],
]),
],
],
];
}
}