Academic & Social Graph Models

Universidad (app/Models/Universidad.php)

Campo Tipo Descripción
nombre string Nombre completo de la universidad
dominio string Dominio de email institucional (ej: ues.edu.sv) — único
siglas string Abreviatura (ej: UES)
color_primario string Color hex para branding (ej: #FF0000)

Relaciones:

$universidad->carreras()   // belongsToMany Carrera (pivot: carrera_universidad)
$universidad->alumnos()    // hasMany User

La detección automática de universidad funciona por dominio del email durante el social login (Google/Microsoft).

Carrera (app/Models/Carrera.php)

Campo Tipo Descripción
nombre string Nombre de la carrera — único

Relaciones:

$carrera->universidades()  // belongsToMany Universidad
$carrera->users()          // hasMany User

Una carrera puede estar vinculada a múltiples universidades mediante la tabla pivote carrera_universidad (usando syncWithoutDetaching para evitar duplicados).

Follower (tabla followers)

Tabla pivote self-referencing para el sistema de seguimiento:

Campo Descripción
user_id Usuario que es seguido
follower_id Usuario que sigue

Se accede vía relaciones User::followers() y User::following().

Like (app/Models/Like.php)

Campo Descripción
user_id FK a User
post_id FK a Post

Un usuario solo puede dar un like por post (toggle en la API).

Comentario (app/Models/Comentario.php)

Campo Tipo Descripción
user_id FK Autor del comentario
post_id FK Post al que pertenece
comentario text Texto del comentario (max 500)
parent_id FK nullable Comentario padre (para anidamiento)
depth integer Nivel de profundidad (0 = raíz, max 5)
reply_count integer Contador de respuestas directas
gif_url string nullable URL de GIF adjunto