PHP Classes

File: server/app/Http/Controllers/Wallet/TransactionsController.php

Recommend this page to a friend!
  Classes of mohammad anzawi   PHP Wallet API and Application   server/app/Http/Controllers/Wallet/TransactionsController.php   Download  
File: server/app/Http/Controllers/Wallet/TransactionsController.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Wallet API and Application
Application to manage a wallet by calling an API
Author: By
Last change:
Date: 2 years ago
Size: 4,007 bytes
 

Contents

Class file image Download
<?php

namespace App\Http\Controllers\Wallet;

use
App\Http\Controllers\Controller;
use
App\Models\Payment;
use
App\Models\Transaction;
use
App\Models\User;
use
App\Transformers\TransactionsTransformer;
use
Illuminate\Http\Request;

/**
 * all transaction processes
 */
class TransactionsController extends Controller
{
    public function
__construct()
    {
       
// all method need admin except (total, create)
       
$this->middleware(['admin'])->except(['total', 'create']);
    }

   
/**
     * get all transaction
     * @return \Illuminate\Http\JsonResponse
     */
   
public function index()
    {
        return
response()->json(
           
fractal()
                ->
collection(Transaction::all())
                ->
transformWith(new TransactionsTransformer())
                ->
toArray()['data']
        );
    }

   
/**
     * create new transaction
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
   
public function create(Request $request)
    {
       
// get payment method choices by user
       
$payment = Payment::where('slug', $request->payment_method)->first();
        if (
$payment === null) // if payment method not found
           
return $this->sendError(['Payment Method is not found'], 404);

       
// create a transaction
       
$response = $request->user()->wallet->tryCreateTransaction($request->all(), $payment);

       
// check if transaction not created, then tell user about a problem
       
if ($response['status'] === false) {
            return
$this->sendError([$response['msg']], 422);
        }


       
// return created transaction details
       
return response()->json(fractal()
            ->
item($response)
            ->
transformWith(new TransactionsTransformer())
            ->
toArray()['data']);
    }

   
/**
     * confirm transaction from admin (approve/decline/set to pending)
     * @param Request $request
     * @param Transaction $transaction
     * @return \Illuminate\Http\JsonResponse
     */
   
public function confirm(Request $request, Transaction $transaction)
    {
       
$transaction->confirmation = $request->type;

        return
$this->sendResponse([], 'Transaction Changed');
    }

   
/**
     * get all approved transaction
     * @return \Illuminate\Http\JsonResponse
     */
   
public function approved()
    {
        return
response()->json(fractal()
            ->
collection(Transaction::approved()->get())
            ->
transformWith(new TransactionsTransformer())
            ->
toArray()['data']);
    }

   
/**
     * get all declined transaction
     * @return \Illuminate\Http\JsonResponse
     */
   
public function declined()
    {
        return
response()->json(fractal()
            ->
collection(Transaction::declined()->get())
            ->
transformWith(new TransactionsTransformer())
            ->
toArray()['data']);
    }

   
/**
     * get all pending transaction
     * @return \Illuminate\Http\JsonResponse
     */
   
public function pending()
    {
        return
response()->json(fractal()
            ->
collection(Transaction::waiting()->get())
            ->
transformWith(new TransactionsTransformer())
            ->
toArray()['data']);
    }

   
/**
     * get transactions count for user
     * @return \Illuminate\Http\JsonResponse
     */
   
public function total()
    {
        return
response()->json([
           
'approved' => auth()->user()->totalApproved(),
           
'declined' => auth()->user()->totalDeclined(),
           
'pending' => auth()->user()->totalPending(),
        ]);
    }

   
/**
     * get all transactions count for dashboard chart
     * @return \Illuminate\Http\JsonResponse
     */
   
public function allTotals()
    {
       
$transaction = new Transaction();
        return
response()->json([
           
'approved' => $transaction->approved()->count(),
           
'declined' => $transaction->declined()->count(),
           
'pending' => $transaction->waiting()->count(),
        ]);
    }
}