Skip to content

Seguimientos

Endpoints para gestionar relaciones de seguimiento entre usuarios.

El siguiente modelo de Prisma pertenece al schema social:

model Follow {
id String @id @default(cuid())
followerId String @map("follower_id")
followingId String @map("following_id")
follower UserProfile @relation("UserFollows", fields: [followerId], references: [id], onDelete: Cascade)
following UserProfile @relation("UserFollowers", fields: [followingId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now()) @map("created_at")
@@unique([followerId, followingId])
@@map("follows")
@@schema("social")
}

Seguir a otro usuario.

  • URL: /api/v1/social/follow
  • Método: POST
  • Autenticación Requerida:

Este endpoint crea una relación de seguimiento:

  1. Validaciones:

    • No puede seguirse a sí mismo: “No puedes seguirte a ti mismo”
    • El usuario a seguir debe existir: “Usuario no encontrado”
    • No debe estar siguiendo ya al usuario: “Ya sigues a este usuario”
  2. Crea Follow con:

    • followerId: Usuario autenticado
    • followingId: Usuario a seguir
  3. Retorna el follow con información del usuario seguido

{
"followingId": "user_id_to_follow"
}
import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.social.follow.$post({
json: {
followingId: 'user_id_to_follow'
}
})

Dejar de seguir a un usuario.

  • URL: /api/v1/social/follow/:id
  • Método: DELETE
  • Autenticación Requerida:

Este endpoint elimina una relación de seguimiento:

  1. Busca Follow con compound key (followerId + followingId)
  2. Si no existe: Lanza error “No sigues a este usuario”
  3. Si existe: Elimina el registro Follow
import { hcWithType } from '@vitality-gym/api/client'
const client = hcWithType('http://localhost:3000')
const res = await client.api.v1.social.follow[':id'].$delete({
param: { id: 'user_id_to_unfollow' }
})

Obtener lista de seguidores de un usuario.

  • URL: /api/v1/social/followers/:userId
  • Método: GET
  • Autenticación Requerida:

Este endpoint obtiene los seguidores de un usuario:

  1. Busca Follows donde followingId = userId
  2. Incluye información del follower (id, name)
  3. Ordena por createdAt descendente (más recientes primero)
{
"data": [
{
"id": "...",
"createdAt": "2023-10-27T10:00:00Z",
"follower": {
"id": "...",
"name": "Jane Doe"
}
}
],
"pagination": {...}
}

Obtener lista de usuarios que sigue.

  • URL: /api/v1/social/following/:userId
  • Método: GET
  • Autenticación Requerida:

Este endpoint obtiene a quiénes sigue un usuario:

  1. Busca Follows donde followerId = userId
  2. Incluye información del following (id, name)
  3. Ordena por createdAt descendente
{
"data": [
{
"id": "...",
"createdAt": "2023-10-27T10:00:00Z",
"following": {
"id": "...",
"name": "John Doe"
}
}
],
"pagination": {...}
}

Verificar si el usuario actual sigue a otro usuario.

  • URL: /api/v1/social/follow/status/:userId
  • Método: GET
  • Autenticación Requerida:
{
"data": {
"isFollowing": true
}
}

Obtener Estadísticas Sociales del Usuario

Section titled “Obtener Estadísticas Sociales del Usuario”

Obtener estadísticas sociales para un usuario.

  • URL: /api/v1/social/stats/:userId
  • Método: GET
  • Autenticación Requerida:

Este endpoint calcula estadísticas sociales:

  1. Ejecuta 4 consultas en transacción:

    • Conteo de posts del usuario
    • Conteo de seguidores
    • Conteo de seguidos
    • Conteo de likes recibidos en sus posts
  2. Retorna objeto con las estadísticas

{
"data": {
"postsCount": 15,
"followersCount": 120,
"followingCount": 85,
"likesReceived": 350
}
}