Skip to main content

Overview

The TransactionController is a resource controller that handles CRUD operations for financial transactions. It supports filtering, pagination, and automatically updates account balances and net worth. Namespace: App\Http\Controllers Extends: Controller

Routes

MethodURINameMiddleware
GET/transactionstransactions.indexauth, verified
GET/transactions/createtransactions.createauth, verified
POST/transactionstransactions.storeauth, verified
GET/transactions/{transaction}/edittransactions.editauth, verified, can:update,transaction
PATCH/transactions/{transaction}transactions.updateauth, verified, can:update,transaction
DELETE/transactions/{transaction}transactions.destroyauth, verified, can:delete,transaction

Methods

index()

Displays a paginated list of transactions with optional filtering.
public function index(Request $request)
category_id
int
Filter transactions by category ID
min_amount
float
Filter transactions with minimum amount
max_amount
float
Filter transactions with maximum amount
page
int
Page number for pagination (10 items per page)

Returns

Returns the transactions.index view with:
  • transactions - Paginated transactions grouped by date
  • categories - All user categories for filtering
  • minAmount - Minimum transaction amount in database
  • maxAmount - Maximum transaction amount in database

Example Request

curl -X GET "https://your-app.com/transactions?category_id=5&page=1" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Example Response

{
  "transactions": {
    "2024-02-28": [
      {
        "id": 101,
        "title": "Grocery Shopping",
        "amount": -85.50,
        "category": {
          "id": 5,
          "name": "Groceries",
          "type": "expense"
        },
        "created_at": "2024-02-28T10:30:00Z"
      }
    ]
  },
  "minAmount": -500.00,
  "maxAmount": 5000.00
}

create()

Shows the form for creating a new transaction.
public function create()

Returns

Returns the transactions.create view with:
  • incomeCategories - Collection of income categories
  • expenseCategories - Collection of expense categories
  • accounts - User’s accounts

Example Request

curl -X GET https://your-app.com/transactions/create \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

store()

Stores a newly created transaction and updates account balance.
public function store(TransactionRequest $request): RedirectResponse
title
string
required
Transaction title/description
amount
float
required
Transaction amount (positive value, automatically negated for expenses)
category_id
int
required
ID of the category
account_id
int
required
ID of the account
details
string
Optional transaction details/notes
created_at
datetime
Optional custom transaction date (defaults to now)

Behavior

  • Automatically negates amount for expense transactions
  • Updates the associated account balance
  • Recalculates user’s net worth
  • Displays success toast message

Example Request

curl -X POST https://your-app.com/transactions \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Monthly Salary",
    "amount": 5000.00,
    "category_id": 1,
    "account_id": 2,
    "details": "February salary payment",
    "created_at": "2024-02-28T00:00:00Z"
  }'

Example Response

{
  "success": true,
  "message": "Transaction created successfully.",
  "redirect": "/transactions"
}

edit()

Shows the form for editing a transaction.
public function edit(Transaction $transaction)
transaction
Transaction
required
The transaction model instance to edit

Returns

Returns the transactions.edit view with:
  • transaction - The transaction being edited
  • categories - Categories matching the transaction type
  • accounts - User’s accounts
  • selectedCategory - Currently selected category
  • selectedAccount - Currently selected account

Example Request

curl -X GET https://your-app.com/transactions/101/edit \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

update()

Updates an existing transaction and adjusts account balances accordingly.
public function update(TransactionRequest $request, Transaction $transaction)
transaction
Transaction
required
The transaction model instance to update
title
string
required
Updated transaction title
amount
float
required
Updated transaction amount
category_id
int
required
Updated category ID
account_id
int
required
Updated account ID
details
string
Updated transaction details

Behavior

  • Handles account changes by updating both old and new account balances
  • Automatically negates amount for expense transactions
  • Recalculates user’s net worth
  • Displays success toast message

Example Request

curl -X PATCH https://your-app.com/transactions/101 \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated Grocery Shopping",
    "amount": 95.00,
    "category_id": 5,
    "account_id": 2,
    "details": "Updated details"
  }'

Example Response

{
  "success": true,
  "message": "Transaction updated successfully.",
  "redirect": "/transactions"
}

destroy()

Deletes a transaction and creates a correction transaction to maintain balance integrity.
public function destroy(Transaction $transaction)
transaction
Transaction
required
The transaction model instance to delete

Behavior

  • Creates a “Balance Correction” transaction to reverse the deleted transaction
  • Uses the user’s “correction” category type
  • Updates account balance
  • Recalculates user’s net worth
  • Displays success toast message

Example Request

curl -X DELETE https://your-app.com/transactions/101 \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Example Response

{
  "success": true,
  "message": "Transaction deleted successfully.",
  "redirect": "/transactions"
}

Dependencies

  • App\Filters\TransactionFilter - Filter class for transaction queries
  • App\Http\Requests\TransactionRequest - Form request validation
  • App\Models\Account - Account model
  • App\Models\Category - Category model
  • App\Models\Transaction - Transaction model
  • Illuminate\Support\Facades\Auth - Authentication facade

Helper Functions

This controller uses the following helper functions:
  • groupTransactionsByDate($transactions) - Groups transactions by their date
  • updateNetworth() - Recalculates and updates user’s net worth
  • flashToast($type, $message) - Displays toast notification

Authorization

All routes require authentication and email verification. Edit, update, and delete operations are additionally protected by Laravel policy gates that check ownership.

Build docs developers (and LLMs) love