Sindbad~EG File Manager

Current Path : /var/www/html/digiesfera.sumar.com.py/gamificacion-bk/app/Http/Livewire/
Upload File :
Current File : /var/www/html/digiesfera.sumar.com.py/gamificacion-bk/app/Http/Livewire/TransferenciasFront.php

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Transferencia;
use App\Models\User;
use App\Models\Historial;
use App\Models\Monedaparticipante;
use Livewire\WithPagination;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;

class TransferenciasFront extends Component
{
    use WithPagination;
    

    protected $paginationTheme = 'bootstrap';

    public $userId,$amount,$password;

    public function render()
    {

        $usuario = auth()->user();
        $usuario_monedas = $usuario->monedas;

        $transferencias_enviadas = DB::table('historial')
            ->join('users as emisor', 'historial.origen_id', '=', 'emisor.id')
            ->join('users as receptor', 'historial.receptor_id', '=', 'receptor.id')
            ->where('historial.origen_id', '=', auth()->user()->id)
            ->where('historial.tipo', '=', 'Transferencia')
            ->select('historial.*', 'emisor.name as emisor_name', 'receptor.name as receptor_name')
            ->paginate(5);

        $transferencias_recibidas=DB::table('historial')
            ->join('users as emisor', 'historial.origen_id', '=', 'emisor.id')
            ->join('users as receptor', 'historial.receptor_id', '=', 'receptor.id')
            ->where('historial.receptor_id', '=', auth()->user()->id)
            ->where('historial.tipo', '=', 'Recepcion')
            ->select('historial.*', 'emisor.name as emisor_name', 'receptor.name as receptor_name')
            ->paginate(5);


        return view('livewire.transferencias-front',[
            'usuario' => $usuario, 
            'usuario_monedas' => $usuario_monedas, 
            'transferencias_enviadas' => $transferencias_enviadas, 
            'transferencias_recibidas' => $transferencias_recibidas
        ]);
    }

   
    public function transferir()
    {
        $usuario = auth()->user();
        // Validaciones iniciales
        $this->validate([
            'userId' => 'required|exists:users,id',
            'amount' => 'required|numeric|min:1',
            'password' => 'required',
        ]);

        // Verificar que no se envíe monedas a sí mismo
        if ($usuario->id == $this->userId) {
            $this->emit('alert', ['type' => 'error', 'message' => 'No puedes enviarte monedas a ti mismo.']);
            return;
        }

        // Verificar contraseña
        if (!Hash::check($this->password, $usuario->password)) {
            $this->emit('alert', ['type' => 'error', 'message' => 'La contraseña es incorrecta.']);
            return;
        }
        $monto = (int) $this->amount;
        // Verificar si el usuario tiene suficientes monedas
        if ($usuario->monedas < $monto) {
            $this->emit('alert', ['type' => 'error', 'message' => 'Fondos insuficientes.']);
            return;
        }
        // Obtener el destinatario
        $destinatario = User::find($this->userId);
        if (!$destinatario) {
            $this->emit('alert', ['type' => 'error', 'message' => 'Usuario destinatario no encontrado.']);
            return;
        }
        DB::beginTransaction();
        try {
            // Restar monedas al usuario actual
            $usuario->decrement('monedas', $monto);

            // Sumar monedas al destinatario
            $destinatario->increment('monedas', $monto);

            // Registrar en el historial
            Historial::create([
                'origen_id' => $usuario->id,
                'receptor_id' => $destinatario->id,
                'cantidad' => $monto,
                'tipo' => 'Transferencia',
                'comentario' => 'El usuario ' . $usuario->name . ' ha transferido ' . $monto . ' monedas a ' . $destinatario->name,
            ]);

            Historial::create([
                'origen_id' => $usuario->id,
                'receptor_id' => $destinatario->id,
                'cantidad' => $monto,
                'tipo' => 'Recepcion',
                'comentario' => 'El usuario ' . $destinatario->name . ' ha recibido ' . $monto . ' monedas de ' . $usuario->name,
            ]);

            DB::commit();
            $this->emit('alert', ['type' => 'success', 'message' => 'Transferencia realizada con éxito.']);
        } catch (\Exception $e) {
            DB::rollBack();
            $this->emit('alert', ['type' => 'error', 'message' => 'Error en la transferencia.']);
        }
        $this->resetInputFields();
    }

    public function resetInputFields()
    {
        $this->userId = '';
        $this->amount = '';
        $this->password = '';
    }

}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists