Saltar al contenido principal

Incorporación (Onboarding) — Referencia técnica

← Volver a Incorporación

Dónde vive esto

Backend

Frontend

Checklist de implementación técnica

  • completeOnboarding(interests: [String!]): User! — requiere getFollowingCount(userId) >= 5 del lado del servidor, establece isOnboardingCompleted + onboardingCompletedAt, guarda los intereses
  • interestSuggestions(limit, interests): [User!]! — usa los intereses pasados (en vivo durante la incorporación) o los intereses guardados de quien mira; se completa con getSuggestedUsers para que la lista nunca quede corta
  • Validación persistente — ProtectedRoute redirige cuando user.isOnboardingCompleted === false (la bandera viene del payload de login/registro; volver a iniciar sesión la vuelve a activar)
  • isOnboardingCompleted agregado a las selecciones de usuario de login / verificación de 2FA / OAuth (Firebase, Apple, teléfono, passkey) en Login.tsx; la mutation Register no solicita el campo, así que Login.tsx lo asigna por defecto a false ahí (las cuentas nuevas siempre necesitan incorporación)

GraphQL

type Query {
interestSuggestions(limit: Int, interests: [String!]): [User!]!
}

type Mutation {
completeOnboarding(interests: [String!]): User!
}

type User {
isOnboardingCompleted: Boolean! # self-only
# ...
}

Notas

  • Los intereses se guardan en user.interests (text[]) — el atributo del modelo Sequelize es interestTags (campo interests) para evitar colisionar con la asociación muchos-a-muchos existente Interest, llamada interests.
  • Reutiliza la columna existente is_onboarding_completed, por lo que no hay migración para la validación en sí; la columna user.interests se incluye en 20260721120000-add-interests-to-user.