app/Models/User.php)HasApiTokens — Sanctum: gestión de tokens de autenticación para la APIHasFactory — Factories para testing/seedingNotifiable — Notificaciones por múltiples canales| Campo | Tipo | Descripción |
|---|---|---|
name |
string | Nombre completo |
username |
string | Nombre de usuario (único, usado como route key) |
email |
string | Correo electrónico (validado con EmailDomain rule) |
password |
hashed | Contraseña (cast automático) |
role |
string | aspirante, estudiante, egresado |
imagen |
string | Nombre del archivo de foto de perfil (default: img.jpg via mutator) |
gender |
string | Género |
profession |
string | Profesión |
insignia |
string | Insignia legacy (string directo) |
is_online |
boolean | Estado de presencia |
last_activity |
datetime | Última actividad registrada |
last_seen |
datetime | Última vez visto (se muestra como diffForHumans) |
universidad_id |
FK | Relación con Universidad |
carrera_id |
FK | Relación con Carrera |
protected $appends = ['imagen_url'];
// Se incluye automáticamente en JSON:
public function getImagenUrlAttribute()
{
return $this->imagen ? url('perfiles/' . $this->imagen) : null;
}
public function getRouteKeyName() { return 'username'; }
Laravel resuelve {user} en rutas usando username en lugar de id.
// Contenido
$user->posts() // hasMany Post
$user->likes() // hasMany Like
$user->tasks() // hasMany Task
$user->pomodoroSessions() // hasMany PomodoroSession
// Grafo social (self-referencing many-to-many via tabla 'followers')
$user->followers() // belongsToMany User (quiénes lo siguen)
$user->following() // belongsToMany User (a quiénes sigue)
$user->isFollowing($user) // Verifica si sigue a un usuario
// Notificaciones
$user->notifications() // hasMany Notification (scope: recent)
$user->unreadNotifications() // hasMany Notification (scope: unread + recent)
$user->unread_notifications_count // Accessor con conteo
// Social
$user->socialLinks() // hasMany SocialLink (scope: ordered)
$user->insignias() // belongsToMany Insignia (pivote con timestamps)
$user->reportesRecibidos() // hasMany Reporte (reported_user_id)
// Académico
$user->universidad() // belongsTo Universidad
$user->carrera() // belongsTo Carrera
$user->updateActivity() // Marca is_online=true, last_activity=now()
$user->setOffline() // Marca is_online=false, last_seen=now()
$user->isOnline() // true si is_online && last_activity < 5 min
// Scope:
User::online()->get() // Solo usuarios activos en últimos 5 min
El middleware UpdateUserActivity actualiza automáticamente en cada request autenticado.
public function setImagenAttribute($value) {
$this->attributes['imagen'] = $value ?: 'img.jpg';
}