📝 Endpoints de Publicaciones (Posts)
La API de MiniTweet permite a los usuarios crear, ver, editar, eliminar y dar like a publicaciones conocidas como "posts". A continuación, te presentamos todos los endpoints disponibles relacionados con este recurso.
➕ Crear una publicación
POST /api/posts/create
Crea una nueva publicación disponible para todos los usuarios, dicha publicación puede contener texto y una imagen opcional.
🔐 Requiere autenticación
Sí Se require un token JWT válido.
📤 Body (form-data)
Campo | Tipo | Requerido | Descripción |
---|---|---|---|
text |
string | Opcional | Mensaje o pensamiento a compartir |
image |
archivo | Opcional | Imagen relacionada al post |
✅ Ejemplo de respuesta
HTTP/1.1 201 Created
{
"message": "Post created successfully",
"data": {
"id": "1fe4cca5-2f75-42eb-8731-873ae5338c2e",
"content": "2",
"image": "https://res.cloudinary.com/dosctrwix/image/upload/v1/posts/koedzuqwdfv30cusmch4",
"createdAt": "2025-07-15T00:24:54.124+00:00",
"likedBy": null,
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
}
}
⚠️ Notas
- El campo
text
es opcional, pero si se deja vacío, el post no será creado. - La imagen debe ser un archivo válido y no exceder el tamaño máximo permitido por la API.
- El campo
likedBy
se inicializa como[]
y se actualizará cuando los usuarios den like a la publicación.
👀 Ver todas las publicaciones de un usuario
GET /api/posts/{userId}/all
Devuelve todos los posts públicos del usuario o todos si es el mismo usuario autenticado.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
userId |
UUID | ID del usuario cuyas publicaciones se desean obtener |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "success",
"data": [
{
"id": "1fe4cca5-2f75-42eb-8731-873ae5338c2e",
"content": "2",
"image": "https://res.cloudinary.com/dosctrwix/image/upload/v1/posts/koedzuqwdfv30cusmch4",
"createdAt": "2025-07-15T00:24:54.124+00:00",
"likedBy": [],
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
},
{
"id": "03bde210-dc3b-400b-ac54-dfb7f17a4269",
"content": "2",
"image": null,
"createdAt": "2025-07-15T00:25:43.018+00:00",
"likedBy": [],
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
}
]
}
⚠️ Notas
- Si el usuario no tiene publicaciones, se devolverá un array vacío.
- Si el usuario autenticado es el mismo que el
userId
, se devolverán todas sus publicaciones, independientemente de su visibilidad.
📚 Ver todos los posts (admin)
GET /api/posts/all
Muestra todas las publicaciones registradas dentro del sistema (solo para administradores).
🔐 Requiere autenticación
Sí Se requiere un token JWT válido con rol de administrador.
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "success",
"data": [
{
"id": "1fe4cca5-2f75-42eb-8731-873ae5338c2e",
"content": "2",
"image": "https://res.cloudinary.com/dosctrwix/image/upload/v1/posts/koedzuqwdfv30cusmch4",
"createdAt": "2025-07-15T00:24:54.124+00:00",
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"authorities": [
{
"authority": "USER"
}
],
"accountNonExpired": false,
"accountNonLocked": false,
"credentialsNonExpired": false,
"enabled": true
},
"likedBy": []
},
{
"id": "03bde210-dc3b-400b-ac54-dfb7f17a4269",
"content": "2",
"image": null,
"createdAt": "2025-07-15T00:25:43.018+00:00",
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"authorities": [
{
"authority": "USER"
}
],
"accountNonExpired": false,
"accountNonLocked": false,
"credentialsNonExpired": false,
"enabled": true
},
"likedBy": []
}
]
}
⚠️ Notas
- Este endpoint es exclusivo para administradores y requiere un token JWT con los permisos adecuados.
- La respuesta incluye todos los posts, independientemente de su autor o contenido.
🔎 Buscar publicación por ID
GET /api/posts/by-id/{postId}
Permite obtener una publicacion especifica a partir de su ID.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
postId |
UUID | ID de la publicación que se desea obtener |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "success",
"data": {
"id": "03bde210-dc3b-400b-ac54-dfb7f17a4269",
"content": "2",
"image": null,
"createdAt": "2025-07-15T00:25:43.018+00:00",
"likedBy": [],
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
}
}
⚠️ Notas
- Si el post no existe, se devolverá un error 404.
- El usuario debe tener permisos para ver la publicación, de lo contrario se devolverá un error 403.
❌ Eliminar una publicación
DELETE /api/posts/delete/{postId}
Este endpoint permite a un usuario eliminar una publicación específica creada por él.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
postId |
UUID | ID de la publicación que se desea eliminar |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "Post deleted successfully",
"data": null
}
⚠️ Notas
- Si el post no existe, se devolverá un error 404.
- El usuario debe ser el autor de la publicación para poder eliminarla, de lo contrario se devolverá un error 403.
❤️ Dar like a una publicación
POST /api/posts/like/{postId}
Permite a un usuario dar like a una publicación específica y si ya le dio like, se lo quita.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
postId |
UUID | ID de la publicación a la que se desea dar like |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "Post liked successfully",
"data": null
}
⚠️ Notas
- Si el post no existe, se devolverá un error 404.
- El usuario debe estar autenticado para poder dar like a una publicación, de lo contrario se devolverá un error 403.
- Si el usuario ya había dado like a la publicación, este se eliminará de la lista de likes.
- La lista de usuarios que han dado like a la publicación se actualizará automáticamente.
👥 Ver posts de personas que sigues
GET /api/posts/following/all
Devuelve las publicaciones de los usuarios que el usuario autenticado sigue.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
createAt |
Date | Fecha para paginación (ISO 8601) |
size |
int | Cantidad de posts a devolver |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "success",
"data": [
{
"id": "1fe4cca5-2f75-42eb-8731-873ae5338c2e",
"content": "2",
"image": "https://res.cloudinary.com/dosctrwix/image/upload/v1/posts/koedzuqwdfv30cusmch4",
"createdAt": "2025-07-15T00:24:54.124+00:00",
"likedBy": [],
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
}
]
}
⚠️ Notas
- Si el usuario no sigue a nadie, se devolverá un array vacío.
- Si no hay publicaciones recientes, se devolverá un array vacío.
- Este endpoint es útil para ver las publicaciones más recientes de las personas que sigues.
✏️ Editar una publicación
PUT /api/posts/update/{postId}
Permite al usuario actualizar el texto o imagen de una publicación existente.
🔐 Requiere autenticación
Sí Se requiere un token JWT válido.
📤 Body (form-data)
Campo | Tipo | Requerido | Descripción |
---|---|---|---|
text |
string | Opcional | Nuevo contenido del post |
image |
archivo | Opcional | Nueva imagen (si se desea cambiar) |
📄 Parámetros de ruta
Campo | Tipo | Descripción |
---|---|---|
postId |
UUID | ID de la publicación que se desea editar |
✅ Ejemplo de respuesta
HTTP/1.1 200 OK
{
"message": "Post updated successfully",
"data": {
"id": "2f82ece7-ad34-4814-a7e7-e60578f37804",
"content": "3",
"image": null,
"createdAt": "2025-07-15T00:47:16.364+00:00",
"likedBy": [],
"author": {
"id": "1f547782-79fc-4acf-9ab6-0a16bf1f0450",
"username": "hernandex2",
"email": "fabio2@gmail.com",
"biography": null,
"profilePicture": null
}
}
}
⚠️ Notas
- Si el post no existe, se devolverá un error 404.
- El usuario debe ser el autor de la publicación para poder editarla, de lo contrario se devolverá un error 403.
- Si no se proporciona un nuevo texto o imagen, la publicación no se actualizará y se devolverá la publicación original sin cambios.
- La imagen debe ser un archivo válido y no exceder el tamaño máximo permitido por la API.
- Si se proporciona un nuevo texto, este reemplazará al texto original de la publicación.
🧠 Notas importantes
- Las publicaciones pueden contener texto, imagen o ambos.
- Las publicaciones solo pueden ser modificadas o eliminadas por sus creadores.
- El endpoint /following/all permite paginación con fecha para obtener posts recientes de seguidores.
¿Quieres ver cómo gestionar comentarios?
➡️ Próximo paso: Gestionar comentarios