notifService = $notifService; } private function getUserSession(): ?array { if (!session()->has('user_logged_in')) return null; return ['tipo' => session('user_tipo'), 'id' => session('user_id')]; } /** * POST /seguimiento/equipo/{id} — Toggle: seguir o dejar de seguir un equipo */ public function toggle(int $id) { $u = $this->getUserSession(); if (!$u) { return response()->json(['ok' => false, 'msg' => 'Debés iniciar sesión para seguir equipos.'], 401); } $equipo = Equipo::find($id); if (!$equipo) { return response()->json(['ok' => false, 'msg' => 'Equipo no encontrado.'], 404); } $existing = EquipoSeguimiento::where('id_equipo', $id) ->where('tipo_usuario', $u['tipo']) ->where('id_usuario', (string)$u['id']) ->first(); if ($existing) { $existing->delete(); return response()->json(['ok' => true, 'siguiendo' => false, 'msg' => 'Dejaste de seguir este equipo.']); } EquipoSeguimiento::create([ 'id_equipo' => $id, 'tipo_usuario'=> $u['tipo'], 'id_usuario' => (string)$u['id'], 'created_at' => now(), ]); return response()->json(['ok' => true, 'siguiendo' => true, 'msg' => '¡Ahora seguís este equipo!']); } /** * GET /seguimiento/mis-equipos — Devuelve equipos seguidos y próximos partidos */ public function misEquipos() { $u = $this->getUserSession(); if (!$u) return response()->json(['equipos' => []]); $seguimientos = EquipoSeguimiento::with(['equipo.club']) ->where('tipo_usuario', $u['tipo']) ->where('id_usuario', (string)$u['id']) ->get(); $equiposIds = $seguimientos->pluck('id_equipo'); // Próximos partidos de los equipos seguidos $proximosPartidos = Evento::with(['equipoLocal.club', 'equipoVisitante.club']) ->where('fecha_evento', '>=', now()->toDateString()) ->where(function ($q) use ($equiposIds) { $q->whereIn('id_equipo_local', $equiposIds) ->orWhereIn('id_equipo_visitante', $equiposIds); }) ->orderBy('fecha_evento') ->orderBy('hora_inicio') ->limit(10) ->get(); return response()->json([ 'equipos' => $seguimientos->map(fn($s) => [ 'id' => $s->id_equipo, 'nombre' => ($s->equipo->club->nombre ?? 'Equipo') . ' ' . $s->equipo->categoria . ($s->equipo->division ? ' ' . $s->equipo->division : ''), 'club' => $s->equipo->club->nombre ?? '—', 'categoria'=> $s->equipo->categoria, 'division' => $s->equipo->division, ]), 'proximos_partidos' => $proximosPartidos->map(fn($e) => [ 'id' => $e->id_evento, 'fecha' => $e->fecha_evento->format('d/m/Y'), 'hora' => $e->hora_inicio ? $e->hora_inicio->format('H:i') : '', 'local' => $e->equipoLocal->club->nombre ?? '?', 'visitante'=> $e->equipoVisitante->club->nombre ?? '?', 'sede' => $e->sede, ]), ]); } /** * GET /seguimiento/estado/{id_equipo} — ¿El usuario sigue este equipo? */ public function estado(int $id) { $u = $this->getUserSession(); if (!$u) return response()->json(['siguiendo' => false]); $siguiendo = EquipoSeguimiento::where('id_equipo', $id) ->where('tipo_usuario', $u['tipo']) ->where('id_usuario', (string)$u['id']) ->exists(); return response()->json(['siguiendo' => $siguiendo]); } }