# Obtener Comentarios Post (1) - [obtain-comments2]

## 🧾 Descripción

*Obtiene los comentarios de una publicación específica del módulo **Publicaciones (Frappe/ERPNext)** junto con información adicional del empleado que realizó cada comentario.*  
*El servicio:*

1. *Consulta los comentarios del documento <span style="color: rgb(224, 62, 45);">**`Publicaciones/{post_name}`**</span>.*
2. *Obtiene la lista de empleados activos desde ERP para enlazar <span style="color: rgb(224, 62, 45);">**`owner → nombre_completo`**</span>.*
3. *Ordena todos los comentarios por fecha de creación en orden ascendente.*
4. *Devuelve la lista final enriquecida con el nombre completo del usuario comentador.*

---

# 🚀 Endpoint

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fobtain-comment"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr"><span style="color: rgb(224, 62, 45);">**`POST /obtain-comments-by-post`**</span></div></div>*(La ruta final depende de la configuración en routes/api.php)*

---

# 🔐 Seguridad

- Requiere **cookie de sesión Frappe** válida (el usuario debe estar logueado).
- Sin cookie → fallo en la consulta al endpoint de ERP.

---

# 📥 Request Body

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22cookie%22%3A-%22string%22" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"cookie"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"post_name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"start"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"limit"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">10</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

### Campos

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-requerido"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1688" data-start="1204"><thead data-end="1255" data-start="1204"><tr data-end="1255" data-start="1204"><th data-col-size="sm" data-end="1218" data-start="1204">Campo</th><th data-col-size="sm" data-end="1228" data-start="1218">Tipo</th><th data-col-size="sm" data-end="1240" data-start="1228">Requerido</th><th data-col-size="md" data-end="1255" data-start="1240">Descripción</th></tr></thead><tbody data-end="1688" data-start="1308"><tr data-end="1418" data-start="1308"><td data-col-size="sm" data-end="1322" data-start="1308">cookie</td><td data-col-size="sm" data-end="1332" data-start="1322">string</td><td data-col-size="sm" data-end="1344" data-start="1332">Sí</td><td data-col-size="md" data-end="1418" data-start="1344">Cookie de sesión enviada por ERP para realizar consultas autenticadas.</td></tr><tr data-end="1519" data-start="1419"><td data-col-size="sm" data-end="1433" data-start="1419">post\_name</td><td data-col-size="sm" data-end="1443" data-start="1433">string</td><td data-col-size="sm" data-end="1455" data-start="1443">Sí</td><td data-col-size="md" data-end="1519" data-start="1455">Nombre (ID) de la publicación en ERP, ejemplo: `"PUB-0001"`.</td></tr><tr data-end="1606" data-start="1520"><td data-col-size="sm" data-end="1534" data-start="1520">start</td><td data-col-size="sm" data-end="1544" data-start="1534">number</td><td data-col-size="sm" data-end="1556" data-start="1544">No</td><td data-col-size="md" data-end="1606" data-start="1556">Índice inicial para paginación de comentarios.</td></tr><tr data-end="1688" data-start="1607"><td data-col-size="sm" data-end="1621" data-start="1607">limit</td><td data-col-size="sm" data-end="1631" data-start="1621">number</td><td data-col-size="sm" data-end="1643" data-start="1631">No</td><td data-col-size="md" data-end="1688" data-start="1643">Cantidad máxima de comentarios a obtener.</td></tr></tbody></table>

</div></div>---

# 📤 Responses

## ✔️ 200 – Comentarios obtenidos correctamente

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--5"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22data%22%3A-%5B-%7B-%22owner" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>    <span class="hljs-punctuation">{</span>      <span class="hljs-attr">"owner"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"user@example.com"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"COM-0001"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"content"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Buen trabajo equipo!"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"creation"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"2025-01-01 10:30:00"</span><span class="hljs-punctuation">,</span>      <span class="hljs-attr">"nombre_completo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Juan Pérez"</span>    <span class="hljs-punctuation">}</span>  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

## ❌ 400/500 – Error en la solicitud a ERPNext

Si ocurre una excepción desde Guzzle (cookie inválida, publicación inexistente, etc.):

**Respuesta directa del error de ERPNext**, ejemplo:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--7"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B%22exc%22%3A-%5B%22traceback." style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span><span class="hljs-attr">"exc"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"Traceback..."</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"..."</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

# 🧩 Lógica Interna (Resumen Técnico)

1. **Validación de entradas**
    
    
    - Se extraen: <span style="color: rgb(224, 62, 45);">**`cookie`**</span>, <span style="color: rgb(224, 62, 45);">**`post_name`**</span>, <span style="color: rgb(224, 62, 45);">**`start`**</span>, <span style="color: rgb(224, 62, 45);">**`limit`**</span>.
2. **Consulta de comentarios**
    
    
    - **Endpoint Frappe llamado:** <span style="color: rgb(224, 62, 45);">**`GET APICAPACITACION/resource/Publicaciones/{post_name}`**</span>
    - **Envia parámetros:**
        
        <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-section">fields: []</span><span class="hljs-section">filters: []</span><span class="hljs-section">limit_start: start</span><span class="hljs-section">limit_page_length: limit</span>`</div></div>
3. **Consulta de empleados activos**
    
    
    - **Solicita:** <span style="color: rgb(224, 62, 45);">**`Employee?fields=[<span class="hljs-string">"name"</span>,<span class="hljs-string">"nombre_completo"</span>,<span class="hljs-string">"user_id"</span>]&filters=<span class="hljs-string">[["status","=","Active"]]</span>`**</span>
    - **Construye un mapa:** <span style="color: rgb(224, 62, 45);">**`<span class="hljs-attribute">user_id</span> → nombre_completo`**</span>
4. **Enriquecimiento de comentarios**
    
    
    - **A cada comentario se le agrega:** <span style="color: rgb(224, 62, 45);">**`<span class="hljs-attr">nombre_completo</span> = jsonEmployee[owner] ?? owner`**</span>
5. **Ordenamiento**
    
    
    - Orden ascendente por la fecha <span style="color: rgb(224, 62, 45);">**`creation`**</span>.
6. **Resultado final**

<table border="1" id="bkmrk-%7B-%22data%22%3A-%5B-...comen" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`{ <span class="hljs-string">"data"</span>: [ ...comentarios_ordenados... ] }`</td></tr></tbody></table>

---

# 📚 Schema de respuesta final

### Comentario:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--10"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div><table border="1" id="bkmrk-%7B-%22owner%22%3A-%22string%22%2C" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"owner"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"content"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"creation"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"datetime"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"nombre_completo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

# 🧪 Ejemplo de uso (curl)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-curl--x-post-https%3A%2F"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`curl -X POST https://midominio.com/api/obtain-comments-by-post \-H <span class="hljs-string">"Content-Type: application/json"</span> \-d <span class="hljs-string">'{  "cookie":"sid=abc123",  "post_name":"PUB-0005",  "start":0,  "limit":20}'</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>