# Página nueva - [registerLikeForPosts]

## 🧾 **Descripción**

*Permite registrar un **Like** o **Dislike** sobre una publicación del módulo Publicaciones en ERPNext.*  
*La acción se ejecuta usando el endpoint interno <span style="color: rgb(224, 62, 45);">**`frappe.desk.like.toggle_like`**</span>, el cual requiere un **cookie de sesión válido**.*

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fregister-like-"><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 /<span class="hljs-keyword">register</span>-like-<span class="hljs-keyword">for</span>-posts`**</span></div></div>> La ruta exacta depende de tu archivo <span style="color: rgb(224, 62, 45);">**`routes/api.php`**</span>.

---

# 🔐 **Seguridad**

Este endpoint **requiere el cookie de sesión Frappe**, el cual se envía desde la aplicación móvil.  
Sin el cookie, el servicio **rechaza la operación**.

---

# 📥 **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">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"marked"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

### Campos requeridos:

<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="1189" data-start="872"><thead data-end="918" data-start="872"><tr data-end="918" data-start="872"><th data-col-size="sm" data-end="881" data-start="872">Campo</th><th data-col-size="sm" data-end="891" data-start="881">Tipo</th><th data-col-size="sm" data-end="903" data-start="891">Requerido</th><th data-col-size="md" data-end="918" data-start="903">Descripción</th></tr></thead><tbody data-end="1189" data-start="966"><tr data-end="1029" data-start="966"><td data-col-size="sm" data-end="975" data-start="966">cookie</td><td data-col-size="sm" data-end="985" data-start="975">string</td><td data-col-size="sm" data-end="990" data-start="985">Sí</td><td data-col-size="md" data-end="1029" data-start="990">Cookie de sesión válido en ERPNext.</td></tr><tr data-end="1127" data-start="1030"><td data-col-size="sm" data-end="1039" data-start="1030">name</td><td data-col-size="sm" data-end="1049" data-start="1039">string</td><td data-col-size="sm" data-end="1054" data-start="1049">Sí</td><td data-col-size="md" data-end="1127" data-start="1054">Nombre del documento `Publicaciones` al que se aplicará Like/Dislike.</td></tr><tr data-end="1189" data-start="1128"><td data-col-size="sm" data-end="1137" data-start="1128">marked</td><td data-col-size="sm" data-end="1147" data-start="1137">boolean</td><td data-col-size="sm" data-end="1152" data-start="1147">Sí</td><td data-col-size="md" data-end="1189" data-start="1152">`true` = Like, `false` = Dislike.</td></tr></tbody></table>

</div></div>---

# 📤 **Responses**

## ✔️ **200 – Like o Dislike registrado 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-%22valor%22%3A-true%2C-%22ms" 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">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Like para publicación correcto"</span><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-punctuation">}</span>`</td></tr></tbody></table>

(El mensaje cambia dependiendo de `marked`)

---

## ❌ **400 – Falta de parámetros**

### Falta nombre

<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-%22valor%22%3A-false%2C-%22m" 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">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es necesario el nombre de la publicación para dar like"</span><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-punctuation">}</span>`</td></tr></tbody></table>

### Falta marked

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--8"><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-%22valor%22%3A-false%2C-%22m-1" 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">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es necesario el estado del like"</span><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-punctuation">}</span>`</td></tr></tbody></table>

### Falta cookie

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--9"><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-%22valor%22%3A-false%2C-%22m-2" style="border-collapse: collapse; width: 100%; height: 29.6px;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Es necesario el cookie para dar like"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"cookie_recibida"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

## ❌ **500 – Error desde ERPNext**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--11"><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-%22valor%22%3A-false%2C-%22m-3" 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">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Error al generar Servicio"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"<detalle_del_error>"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

---

# 🧩 **Lógica Interna**

1. Valida parámetros obligatorios: <span style="color: rgb(224, 62, 45);">**`name`**</span>, <span style="color: rgb(224, 62, 45);">**`marked`**</span>, <span style="color: rgb(224, 62, 45);">**`cookie`**</span>.
2. Construye la propiedad <span style="color: rgb(224, 62, 45);">**`add`**</span>:
    
    
    - <span style="color: rgb(224, 62, 45);">**`marked = true`**</span> → `"<span style="color: rgb(224, 62, 45);"><strong>Yes</strong></span>"`
    - <span style="color: rgb(224, 62, 45);">**`marked = false`**</span> → `"<span style="color: rgb(224, 62, 45);"><strong>No</strong></span>"`
3. Construye la llamada a ERPNext:
    
    <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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.8711%;"></col></colgroup><tbody><tr><td><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">`POST /method/frappe.desk.like.toggle_likeHeaders:    Cookie: <cookie>    Content-Type: application/jsonBody:    {      <span class="hljs-string">"doctype"</span>: <span class="hljs-string">"Publicaciones"</span>,      <span class="hljs-string">"name"</span>: <span class="hljs-string">"<nombre>"</span>,      <span class="hljs-string">"add"</span>: <span class="hljs-string">"Yes/No"</span>    }`</div></td></tr></tbody></table>
    
    </div></div>
4. ERPNext registra o quita el Like.
5. Devuelve mensaje según operación: "Like" o "Dislike".

---

# 📚 **Schemas**

### Request Schema

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--14"><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-1" style="border-collapse: collapse; width: 100%; height: 29.6px;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">`<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">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"marked"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"boolean"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

### Response Schema

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--15"><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-%22valor%22%3A-%22boolean%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">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"boolean"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"array | object"</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></div><div class="overflow-y-auto p-4" dir="ltr"><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/register-like-for-posts \-H <span class="hljs-string">"Content-Type: application/json"</span> \-d <span class="hljs-string">'{  "cookie": "sid=12345abcde",  "name": "PUB-00012",  "marked": true}'</span>`</td></tr></tbody></table>

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