whisper-money/app/Http/Controllers/Api/TransactionController.php

63 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\BulkUpdateTransactionRequest;
use App\Models\Transaction;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class TransactionController extends Controller
{
/**
* Return paginated transactions for the authenticated user with optional filters.
*/
public function index(Request $request): JsonResponse
{
$query = $request->user()
->transactions()
->with('labels:id,name,color');
if ($request->query('encrypted') === 'true') {
$query->where(fn ($q) => $q->whereNotNull('description_iv')->orWhereNotNull('notes_iv'));
} elseif ($request->query('encrypted') === 'false') {
$query->whereNull('description_iv')->whereNull('notes_iv');
}
$transactions = $query->simplePaginate(100);
return response()->json($transactions);
}
/**
* Bulk update transactions (used for decryption migration).
*/
public function bulkUpdate(BulkUpdateTransactionRequest $request): JsonResponse
{
$validated = $request->validated();
$transactionIds = collect($validated['transactions'])->pluck('id');
$userTransactionIds = $request->user()
->transactions()
->whereIn('id', $transactionIds)
->pluck('id');
if ($userTransactionIds->count() !== $transactionIds->count()) {
abort(403, 'Some transactions do not belong to the authenticated user.');
}
foreach ($validated['transactions'] as $data) {
$updateData = collect($data)->except('id')->toArray();
Transaction::query()
->where('id', $data['id'])
->toBase()
->update($updateData);
}
return response()->json(['message' => 'Transactions updated successfully.']);
}
}