GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: /var/www/api.vaspayment.com/app/Http/Controllers/UserController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\BeneficiaryList;
use Exception;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class UserController extends Controller
{
    protected $user;

    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            if (!$this->user) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'Unauthorized, invalid token',
                ], 401);
            }
            return $next($request);
        });
    }

    public function updateAccount(Request $request)
    {
        $request->validate([
            'lastname' => 'required|string|max:255',
        ]);

        // Retrieve the authenticated user
        $user = $this->user;

        // Update the user's last name
        $user->lastname = $request->input('lastname');

        // Save the changes
        $user->save();

        // Return a JSON response
        return response()->json([
            'status' => 'success',
            'message' => 'Last name updated successfully',
            'data' => $user, 
        ]);
    }

    public function getBeneficiary(Request $request)
    {
        $userId = $this->user->id;
        $bene = BeneficiaryList::where('user_id', $userId)->get();
        if (!$bene) {
            return response()->json([
                'status' => 'success',
                'message' => 'No beneficiary found',
                'data' => [],
            ]); 
        }
        // Return a JSON response
        return response()->json([
            'status' => 'success',
            'message' => 'Beneficiaries found',
            'data' => $bene, 
        ]);
    }

    public function updateBeneficiary(Request $request)
    {
        // Validate the incoming request
        $request->validate([
            'beneficiaryUuid' => 'required|string',
            'type' => 'required|string',
        ]);

        $userId = $this->user->id;

        // Retrieve the beneficiary list for the user
        $beneficiaryList = BeneficiaryList::where('user_id', $userId)->where('product_type', $request->type)->first();

        info($beneficiaryList);
        // Handle case where no beneficiary list exists
        if (!$beneficiaryList) {
            return $this->responseError('No beneficiary found');
        }

        // Decode the JSON list of beneficiaries
        $beneficiaries = json_decode($beneficiaryList->list, true);

        // Log the UUID from the request for comparison
        info('Incoming beneficiary UUID: ' . $request->beneficiaryUuid);

        // Filter out the beneficiary with the matching UUID
        $filteredBeneficiaries = array_filter($beneficiaries, function ($ben) use ($request) {
            // Log for comparison
            info('Comparing with beneficiary UUID: ' . $ben['uuid']);
            return $ben['uuid'] !== $request->beneficiaryUuid; // Keep beneficiaries that do not match the UUID
        });

        // Log the original and filtered beneficiaries for debugging
        info('Original beneficiaries: ', $beneficiaries);
        info('Filtered beneficiaries: ', $filteredBeneficiaries);

        // Check if any beneficiaries were removed
        if (count($filteredBeneficiaries) === count($beneficiaries)) {
            return $this->responseError('Beneficiary not found');
        }

        // Update the beneficiary list and save
        $beneficiaryList->list = json_encode(array_values($filteredBeneficiaries)); // Ensure keys are reset
        $beneficiaryList->save();

        return $this->responseSuccess('Beneficiary deleted successfully');
    }

    private function responseError(string $message)
    {
        return response()->json([
            'status' => 'error',
            'message' => $message,
        ]);
    }

    private function responseSuccess(string $message)
    {
        return response()->json([
            'status' => 'success',
            'message' => $message,
        ]);
    }

    public function changePassword(Request $request)
    {
        try {
            $validatedData = $request->validate([
                "password" => "required|string",
            ]);
            $user = $this->user;
            $user->password = Hash::make($validatedData['password']);
            $user->save();
            return response()->json(['status' => 'success', 'message' => 'Your password was changed successfully'], 200);
        } catch (Exception $e) {
            info($e->getMessage());
            return response()->json(['status' => 'error', 'message' => 'Your password failed to change', 'data' => $e->getMessage()], 422);
        }
    }

    public function savePlayerId(Request $request)
    {
        $request->validate([
            'player_id' => 'required|string',
        ]);
        $user = $this->user;
        $user->device_id = $request->input('player_id');
        $user->save();
        info('Player ID saved successfully.');
        return response()->json(['status' => 'success', 'message' => 'Player ID saved successfully.']);
    } 
}