/home/kueuepay/public_html/app/Http/Controllers/Api/V1/User/DashboardController.php
<?php

namespace App\Http\Controllers\Api\V1\User;

use App\Models\User;
use App\Models\UserWallet;
use App\Models\Transaction;
use App\Http\Helpers\Response;
use App\Models\UserNotification;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Constants\PaymentGatewayConst;
use App\Providers\Admin\CurrencyProvider;

class DashboardController extends Controller
{
    
    public function dashboard() {
        $default_currency = CurrencyProvider::default();

        // User Wallets
        $user_wallets = UserWallet::auth()->select('id','user_id','currency_id', DB::raw('CAST(balance AS FLOAT) as balance'),'status','created_at')->with(['currency' => function($q) {
            $q->select('id','code','flag','name','symbol');
        }])->get();

        
        $gateway_image_paths = [
            'base_url'          => url("/"),
            'path_location'     => files_asset_path_basename("payment-gateways"),
            'default_image'     => files_asset_path_basename("profile-default"),
        ];

        $transactions = Transaction::auth()->orderBy('id','desc')->get()->map(function($data){

            if($data->type == PaymentGatewayConst::TYPETRANSFERMONEY){
                if($data->attribute == PaymentGatewayConst::SEND){
                    $receiver_email     = $data->details->receiver->email ?? '';
                    $receiver           = User::where('email',$receiver_email)->first();
                    $receiver_fullname  = $receiver->fullname;
                    $receiver_image     = $receiver->image; 
                    $sender_fullname  = '';
                    $sender_image     = '';
                    
                    $card_name =  '';
                    $card_number =  '';
                }else{
                    $sender_email     = $data->details->sender->email ?? '';
                    $sender           = User::where('email',$sender_email)->first();
                    $sender_fullname  = $sender->fullname;
                    $sender_image     = $sender->image; 
                    $receiver_fullname  = '';
                    $receiver_image     = '';

                    $card_name =  '';
                    $card_number =  '';
                }
            }
            if($data->type == PaymentGatewayConst::TYPEADDMONEY){
                $gateway_image  = $data->payment_gateway->gateway->image;
                $card_name =  '';
                $card_number =  '';
            }
            if($data->type == PaymentGatewayConst::CARD_PAYMENT){
                $card_name = decrypt($data->card_method->name) ?? '';
                $card_number = '************'.substr(decrypt($data->card_method->card_number) ?? '',-4) ?? '';
            }

            return [
                'type'                  => $data->type,
                'trx_id'                => $data->trx_id,
                'sender_fullname'       => $sender_fullname ?? '',
                'sender_email'          => $sender_email ?? '',
                'sender_image'          => $sender_image ?? '',
                'receiver_fullname'     => $receiver_fullname ?? '',
                'receiver_email'        => $receiver_email ?? '',
                'receiver_image'        => $receiver_image ?? '',        
                'card_name'             => $card_name ?? '',
                'card_number'           => $card_number ?? '',
                'payment_gateway'       => $data->payment_gateway->name ?? '',
                'gateway_image'         => $gateway_image ?? '',
                'payment_type'          => $data->payment_type ?? '',
                'request_amount'        => get_amount($data->request_amount),
                'total_charge'          => get_amount($data->total_charge),
                'total_payable'         => get_amount($data->total_payable),
                'request_currency'      => $data->request_currency,
                'payment_currency'      => $data->payment_currency,
                'remark'                => $data->remark,
                'attribute'             => $data->attribute,
                'status'                => $data->stringStatus->value,
                'reject_reason'         => $data->reject_reason,
                'created_at'            => $data->created_at
            ];
        });

        // User Information
        $user_info = auth()->user()->only([
            'id',
            'firstname',
            'lastname',
            'fullname',
            'username',
            'email',
            'image',
            'mobile_code',
            'mobile',
            'full_mobile',
            'email_verified',
            'kyc_verified',
            'two_factor_verified',
            'two_factor_status',
            'two_factor_secret',
        ]);

        $profile_image_paths = [
            'base_url'          => url("/"),
            'path_location'     => files_asset_path_basename("user-profile"),
            'default_image'     => files_asset_path_basename("profile-default"),
        ];
        $currency_image_paths = [
            'base_url'          => url("/"),
            'path_location'     => files_asset_path_basename("currency-flag"),
            'default_image'     => files_asset_path_basename("profile-default"),
        ];
        
        $total_add_money        = Transaction::auth()->where('type',PaymentGatewayConst::TYPEADDMONEY)->count();
        $total_payments         = Transaction::auth()->where('type',PaymentGatewayConst::CARD_PAYMENT)->count();
    
        return Response::success([__('User dashboard data fetch successfully!')],[
            'instructions'  => [
                'user_info'         => [
                    'kyc_verified'  => "0: Default, 1: Approved, 2: Pending, 3:Rejected",
                ]
            ],
            'transactions'          => $transactions,
            'user_info'             => $user_info,
            'wallets'               => $user_wallets,
            'profile_image_paths'   => $profile_image_paths,
            'currency_image_paths'  => $currency_image_paths,
            'gateway_image_paths'   => $gateway_image_paths,
            'total_add_money'       => $total_add_money,
            'total_payments'        => $total_payments
        ]);
    }
    /**
     * Method for get the user notification.
     */
    public function notifications() {
        $user           = auth()->user()->id;
        $notification   = UserNotification::where('user_id',$user)->orderBy("id","desc")->get()->map(function($data){
            return [
                'id'            => $data->id,
                'details'       => $data->details,
                'created_at'    => $data->created_at
            ]; 
        });
        return Response::success([__('Notification Data Fetch Successfuly.')],[
            'notification'      => $notification,
        ],200);
    }
}
User Login
top