Posts, Comments & Likes API

Posts

Controlador: app/Http/Controllers/Api/PostController.php (480 líneas)


GET /api/posts (pública)

Feed de publicaciones paginado (10 por página).

Query params (opcionales):

Response:

{
  "success": true,
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 42,
        "titulo": "Mi primer post",
        "descripcion": "Descripción del post",
        "tipo": "imagen",
        "imagen": "uuid_full.webp",
        "imagen_mini": "uuid_feed.webp",
        "imagen_url": "https://dominio.com/uploads/uuid_full.webp",
        "imagen_mini_url": "https://dominio.com/uploads/uuid_feed.webp",
        "visibility": "public",
        "user": {
          "id": 1,
          "name": "Juan",
          "username": "juanp",
          "imagen": "perfil.jpg",
          "insignia": null,
          "imagen_url": "https://dominio.com/perfiles/perfil.jpg"
        },
        "comments_count": 5,
        "likes_count": 12,
        "created_at": "2025-06-20T...",
        "compact_time": "2 horas"
      }
    ],
    "last_page": 8,
    "per_page": 10,
    "total": 76
  }
}

Flujo: Ordena por created_at DESC, eager loads user y comentarios, agrega withCount('likes', 'comentarios'), construye URLs de imagen dinámicamente.


GET /api/posts/{post} (pública)

Detalle de un post con comentarios en árbol jerárquico.

Response: Incluye el post completo con:

formatCommentTree():

Post
├── Comentario 1 (depth 0)
│   ├── Respuesta 1.1 (depth 1)
│   │   └── Respuesta 1.1.1 (depth 2)
│   └── Respuesta 1.2 (depth 1)
└── Comentario 2 (depth 0)

El método agrupa comentarios por parent_id, luego construye el árbol recursivamente. Incluye user data en cada comentario.


POST /api/posts/filter (pública)

Filtrar posts por universidad y/o carrera.