Root Zanli
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
o5t6x7pgljbm
/
public_html
/
app
/
Http
/
Controllers
/
Api
/
Filename :
TUITWalletController.php
back
Copy
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\TUITWallet; use App\Models\TUITWalletTransaction; use App\Models\User; use Exception; use Illuminate\Support\Facades\Log; use Helpers; use Illuminate\Support\Str; /** * !Important! * All functionality around TUIT wallet needs to be done using TUITWalletController only. * TUITWallet and TUITWalletTransaction models should not be used outside of TUITWalletController. */ class TUITWalletController extends Controller { /** * returns TUITWallet as array with balance, used to get from any other controller */ public function getTUITWallet(User $user){ return $this->getTUITWalletPvt($user)->toArray(); } public function getEarnedTuit(User $user){ $wallet = $this->getTUITWalletPvt($user); if(isset($wallet)) return $wallet->getEarnedTuit(); else return 0; } /** * returns TUITWallet Object with balance */ private function getTUITWalletPvt(User $user){ $tuitWallet = TUITWallet::where('user_id', $user->user_id)->first(); if(!isset($tuitWallet)){ throw new Exception("TUITWallet not found for user_id: $user->user_id"); } $tuitWallet['balance'] = 0; $tuitWalletTransaction = TUITWalletTransaction::where('tuit_wallet_id', $tuitWallet->tuit_wallet_id) ->orderBy('created_at', 'desc') ->first(); if(isset($tuitWalletTransaction)) $tuitWallet['balance'] = $tuitWalletTransaction->balance; return $tuitWallet; } public function canCreditTUIT(User $user, $points){ $tuitWallet = $this->getTUITWalletPvt($user); if($tuitWallet->balance >= $points) return true; else return false; } /** * $transactionDetails = array( * 'transaction_title', 'ref_table', 'ref_table_id', 'description' * ); */ public function creditTUIT(User $user, $points, $transactionDetails = array()){ $tuitWallet = $this->getTUITWalletPvt($user); $transactionId = Str::uuid()->toString(); $tuitWalletTransaction = TUITWalletTransaction::create([ 'transaction_id' => $transactionId, 'tuit_wallet_id' => $tuitWallet->tuit_wallet_id, 'transaction_title' => $transactionDetails['transaction_title'], 'transaction_type' => 'CREDIT', 'ref_table' => $transactionDetails['ref_table'], 'ref_table_id' => $transactionDetails['ref_table_id'], 'tuit' => $points, 'tuit_credit' => $points, 'tuit_debit' => 0, 'balance' => ($tuitWallet->balance - $points), 'entry_date_time'=> date('Y-m-d H:i:s'), 'description' => $transactionDetails['description'], ]); $tuitWalletArray = $tuitWallet->toArray(); $tuitWalletArray['tuitWalletTransaction'] = $tuitWalletTransaction->toArray(); $tuitWalletArray['balance'] = $tuitWalletTransaction->balance; return $tuitWalletArray; } /** * $transactionDetails = array( * 'transaction_title', 'ref_table', 'ref_table_id', 'description' * ); */ public function debitTUIT(User $user, $points, $transactionDetails = array()){ $tuitWallet = $this->getTUITWalletPvt($user); $transactionId = Str::uuid()->toString(); $tuitWalletTransaction = TUITWalletTransaction::create([ 'transaction_id' => $transactionId, 'tuit_wallet_id' => $tuitWallet->tuit_wallet_id, 'transaction_title' => $transactionDetails['transaction_title'], 'transaction_type' => 'DEBIT', 'ref_table' => $transactionDetails['ref_table'], 'ref_table_id' => $transactionDetails['ref_table_id'], 'tuit' => $points, 'tuit_credit' => 0, 'tuit_debit' => $points, 'balance' => ($tuitWallet->balance + $points), 'entry_date_time'=> date('Y-m-d H:i:s'), 'description' => $transactionDetails['description'], ]); $tuitWalletArray['balance'] = $tuitWalletTransaction->balance; return $tuitWalletTransaction->toArray(); } } ?>