İlerleme
Bir kullanıcının eğitim ilerlemesini okuyun: pratik (zorluk başına), öğrenme (senaryo başına) ve aktif atamalar. Tüm uç noktalar salt okunurdur ve progress:read kapsamını gerektirir. Granül kasten incedir — çoğu LMS senkronizasyonu ve BI pipeline'ı, kullanıcı başına bu üç uç noktayı yoklamaktan başka bir şeye ihtiyaç duymaz.
Uç noktalar
| Method | Path | Kapsam | Amaç |
|---|---|---|---|
GET | /users/{'{'}userId{'}'}/practice-progress | progress:read | Skor ve zaman damgalarıyla tamamlanmış pratik zorlukları. |
GET | /users/{'{'}userId{'}'}/learn-progress | progress:read | Durum bilgisiyle öğrenme modu senaryoları. |
GET | /users/{'{'}userId{'}'}/assignments | progress:read | Kullanıcının aktif atamaları ve ilerleme yüzdesi. |
Bu rotaların API'nin kök seviyesinde olduğuna dikkat edin — /progress/ altında değil, /api/public/v1/users/{'{'}userId{'}'}/…. {'{'}userId{'}'}, Users API ve webhook payload'ları tarafından döndürülen SecureCodingHub kullanıcı id'sidir.
Pratik ilerlemesi
Kullanıcının tamamladığı her zorluk için bir satır. Pratik konuları birden fazla zorluk içerir (0'dan başlayarak indekslenir) ve her zorluk iki aşamadan geçer — zafiyet tespiti ve yama seçimi — bağımsız olarak puanlanır.
GET /api/public/v1/users/{userId}/practice-progress
Authorization: Bearer scs_live_…Yanıt
[
{
"topicId": "sql-injection",
"challengeIndex": 0,
"language": "python",
"score": 100,
"phase1Score": 50,
"phase2Score": 50,
"phase1HintUsed": false,
"phase2HintUsed": false,
"completedAt": "2026-05-20T14:32:08Z"
},
{
"topicId": "sql-injection",
"challengeIndex": 1,
"language": "python",
"score": 80,
"phase1Score": 30,
"phase2Score": 50,
"phase1HintUsed": true,
"phase2HintUsed": false,
"completedAt": "2026-05-21T09:14:55Z"
},
{
"topicId": "xss",
"challengeIndex": 0,
"language": "javascript",
"score": 100,
"phase1Score": 50,
"phase2Score": 50,
"phase1HintUsed": false,
"phase2HintUsed": false,
"completedAt": "2026-05-22T11:48:31Z"
}
]topicId— pratik konusunun katalog id'si (örn.sql-injection,xss,ssrf).challengeIndex— konu içindeki zorluğun sıfır tabanlı indeksi.language— kullanıcının zorluğu çözdüğü dil.score— 100 üzerinden toplam.phase1Scorevephase2Scoretoplamıscoreeder; her biri 50 üzerinden.phase1HintUsed/phase2HintUsed— boolean; ipucu kullanımının ne kadara mal olacağına client karar verir, sunucu yalnızca bayrağı ve sonuç skoru kaydeder.completedAt— en son tamamlanmanın ISO 8601 UTC zaman damgası.
Bu listede yalnızca tamamlanmış zorluklar görünür. Devam eden denemeler ifşa edilmez.
Örnek
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/practice-progressÖğrenme ilerlemesi
Kullanıcının açtığı her öğrenme modu senaryosu için bir satır. Öğrenme senaryoları rehberli yürüyüşlerdir; adım sayısı ve kaba bir status alanı ile izlenir.
GET /api/public/v1/users/{userId}/learn-progress
Authorization: Bearer scs_live_…Yanıt
[
{
"scenarioId": "auth-bypass-walkthrough",
"currentStep": 8,
"totalSteps": 8,
"status": "completed",
"startedAt": "2026-05-18T13:02:11Z",
"completedAt": "2026-05-18T13:41:07Z",
"lastAccessAt": "2026-05-18T13:41:07Z"
},
{
"scenarioId": "jwt-tampering",
"currentStep": 3,
"totalSteps": 7,
"status": "started",
"startedAt": "2026-05-23T16:20:00Z",
"completedAt": null,
"lastAccessAt": "2026-05-24T10:08:42Z"
}
]scenarioId— senaryonun katalog id'si.currentStep/totalSteps— senaryo içindeki ilerleme. Eşit olduğunda senaryo bitmiş demektir.status—startedveyacompleted'den biri.completedAt— senaryo bitene kadarnull.lastAccessAt— ilerleme yapıp yapmadığından bağımsız olarak kullanıcının senaryoyu son açtığı zaman.
Örnek
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/learn-progressAtamalar
Kullanıcının aktif atamaları, pratik ve öğrenme ilerlemesine kendiniz join atmak zorunda kalmamanız için önceden hesaplanmış bir tamamlanma yüzdesiyle birlikte. Bu bireye kadar çözülmüş kullanıcı seviyesi, ekip seviyesi ve kurum seviyesi atamaları içerir.
GET /api/public/v1/users/{userId}/assignments
Authorization: Bearer scs_live_…Yanıt
[
{
"id": "f1a2b3c4-d5e6-4708-8192-03405e6f7081",
"contentArea": "practice",
"targetType": "topic",
"targetId": "sql-injection",
"targetTitle": "SQL Injection",
"deadline": "2026-06-15T00:00:00Z",
"isMandatory": true,
"isOverdue": false,
"isCompleted": false,
"totalItems": 5,
"completedItems": 2,
"progressPercent": 40.0,
"note": "Assigned after CodeQL finding in payments-api."
},
{
"id": "a2b3c4d5-e6f7-4081-9203-405e6f708192",
"contentArea": "learn",
"targetType": "scenario",
"targetId": "auth-bypass-walkthrough",
"targetTitle": "Auth Bypass Walkthrough",
"deadline": "2026-05-31T00:00:00Z",
"isMandatory": false,
"isOverdue": false,
"isCompleted": true,
"totalItems": 1,
"completedItems": 1,
"progressPercent": 100.0,
"note": null
}
]contentArea—practiceveyalearn.targetType— pratik için:category,module,topicveyacustom-course. Öğrenme için:course,scenarioveyacustom-course.isOverdue— teslim tarihi geçtiyse ve atama henüz tamamlanmamışsatrue.progressPercent— 0-100'e ölçeklenmiş tamamlanma oranı.
Örnek
curl -sS \
-H "Authorization: Bearer $SCH_API_KEY" \
https://api.limeplate.com/api/public/v1/users/1a2b3c4d-5e6f-7081-9203-4d5e6f708192/assignmentsYoklama desenleri
LMS veya BI pipeline'ları için saatte bir kez batch yoklama normalde yeterlidir — pratik ve öğrenme ilerlemesi yalnızca kullanıcı bir iş bitirdiğinde değişir. Atama tarafında daha sıkı canlı gösterge panelleri için yoklama yerine assignment.completed webhook'una abone olun; bkz. Webhook'lar. v1'de practice.completed veya learn.completed olayı yoktur — bunlar için bu uç noktaları yoklayın.