Sindbad~EG File Manager
<?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