Skip to main content

Signature

dloopiq.getUserReputation(userId: string): Promise<UserReputation>

Type UserReputation

interface UserReputation {
  userId: string
  score: number              // 0-100, démarre à 50
  goldenTasksAnswered: number
  correctAnswers: number
  accuracy: number           // 0-1, ex: 0.87 = 87%
  certification: CertificationLevel
  nextLevel: NextLevelInfo | null
}

interface NextLevelInfo {
  level: CertificationLevel
  requiredScore: number
  requiredAnswers: number
  missingScore: number
  missingAnswers: number
}

type CertificationLevel = 'Unranked' | 'Bronze' | 'Silver' | 'Gold' | 'Expert'

Exemple

const rep = await dloopiq.getUserReputation('user_abc123')

console.log(rep.score)          // 73
console.log(rep.certification)  // "Silver"
console.log(rep.accuracy)       // 0.82

if (rep.nextLevel) {
  console.log(
    `Prochain niveau : ${rep.nextLevel.level} — ` +
    `manque ${rep.nextLevel.missingScore} points et ` +
    `${rep.nextLevel.missingAnswers} réponses`
  )
  // → "Prochain niveau : Gold — manque 2 points et 150 réponses"
}

Niveaux de certification

NiveauScore minimumRéponses golden minimum
Unranked< 10
Bronze 🥉≥ 40≥ 10
Silver 🥈≥ 60≥ 50
Gold 🥇≥ 75≥ 200
Expert ⭐≥ 90≥ 500
Un utilisateur doit satisfaire les deux conditions (score ET nombre de réponses) pour atteindre un niveau.

Comment évolue le score

Le score démarre à 50 pour tout nouvel utilisateur.
ÉvénementImpact score
Golden task — bonne réponse+1
Golden task — mauvaise réponse-3
Score minimum0
Score maximum100

Affichage suggéré dans votre app

function CertificationBadge({ userId }: { userId: string }) {
  const [rep, setRep] = useState<UserReputation | null>(null)

  useEffect(() => {
    dloopiq.getUserReputation(userId).then(setRep)
  }, [userId])

  if (!rep) return null

  const emoji = {
    Unranked: '⚪',
    Bronze: '🥉',
    Silver: '🥈',
    Gold: '🥇',
    Expert: '⭐'
  }[rep.certification]

  return (
    <View>
      <Text>{emoji} {rep.certification}</Text>
      <Text>Score : {rep.score}/100</Text>
      <Text>Précision : {Math.round(rep.accuracy * 100)}%</Text>
    </View>
  )
}

Progression vers le niveau suivant

const rep = await dloopiq.getUserReputation(userId)

if (rep.nextLevel) {
  const { level, missingScore, missingAnswers } = rep.nextLevel
  
  // Afficher une barre de progression vers le prochain niveau
  const progressScore = Math.max(0, 1 - missingScore / 15)  // approx
  const progressAnswers = Math.max(0, 1 - missingAnswers / 50)  // approx
  
  showProgressBar(`Vers ${level}`, Math.min(progressScore, progressAnswers))
} else {
  showMessage('Niveau maximum atteint ! Vous êtes Expert ⭐')
}

Première visite

Si l’utilisateur n’a encore répondu à aucune tâche, la réputation est créée à la première réponse. Si vous appelez getUserReputation avant toute réponse, l’API retourne null ou crée un profil vierge selon l’implémentation.
Le score de réputation est par (développeur, utilisateur) — un utilisateur peut avoir des scores différents selon l’app dans laquelle il annote.