@extends('layouts.app') @section('title', 'API Dokumantasyonu - QR Yoklama') @section('description', 'QR Yoklama REST API dokumantasyonu. Endpoint referansi, istek/yanit ornekleri ve hata kodlari.') @section('styles') @endsection @section('content')
QR Yoklama sisteminin tüm REST API endpointleri, istek/yanıt örnekleri ve hata kodları.
{{ url('/api') }}
Tüm istekler Content-Type: application/json ve Accept: application/json headerları ile gönderilmelidir.
Tarih/saat alanları ISO 8601 formatındadır.
Sayfalandırma destekleyen endpointlerde ?page=2 parametresi kullanılabilir.
Korunmuş endpointler için Authorization: Bearer {TOKEN} headeri gereklidir.
Token, /auth/login endpointinden alınır. Her token tek bir cihaz için geçerlidir.
Yetkisiz erişimde 401 Unauthenticated, yetersiz roldeyse 403 Forbidden döner.
POST /student/verify endpointinin döndürebileceği hata kodları:
Kullanıcı girişi yapar ve API tokeni döndürür.
| Alan | Tip | Açıklama |
|---|---|---|
| email Zorunlu | string | Kullanıcı e-posta adresi |
| password Zorunlu | string | Kullanıcı şifresi |
| device_id Opsiyonel | string | Cihaz benzersiz kimlik numarası |
{
"message": "Giriş başarılı.",
"user": {
"id": 2,
"name": "Ahmet",
"surname": "Yilmaz",
"email": "ahmet.yilmaz@yoklama.edu.tr",
"student_number": null,
"role": "instructor"
},
"token": "1|abc123..."
}
Mevcut tokeni siler ve oturumu sonlandırır.
{
"message": "Çıkış başarılı."
}
Giriş yapmış kullanıcının profil bilgilerini döndürür.
{
"user": {
"id": 4,
"name": "Mehmet",
"surname": "Kaya",
"full_name": "Mehmet Kaya",
"email": "mehmet.kaya@stu.yoklama.edu.tr",
"student_number": "2021001",
"role": "student"
}
}
Kullanıcının şifresini günceller.
| Alan | Tip | Açıklama |
|---|---|---|
| current_password Zorunlu | string | Mevcut şifre |
| password Zorunlu | string | Yeni şifre (min: 8) |
| password_confirmation Zorunlu | string | Yeni şifre tekrarı |
Öğrenci rolüne sahip kullanıcılar için endpointler.
Öğrencinin kayıtlı olduğu derslerdeki aktif yoklama oturumlarını listeler. Aktif oturum yoksa bilgi mesajı döner.
{
"sessions": [
{
"session_id": 1,
"course_code": "BIL101",
"course_name": "Bilgisayar Bilimine Giris",
"started_at": "14:30",
"expires_at": "15:00",
"remaining_minutes": 22.5
}
]
}
QR kod ve GPS konum ile çift katmanlı yoklama doğrulaması yapar. Sistemin en kritik endpointidir.
| Alan | Tip | Açıklama |
|---|---|---|
| qr_token Zorunlu | string | QR koddan okunan token (max: 128) |
| latitude Zorunlu | number | Öğrencinin enlemi (-90 ile 90) |
| longitude Zorunlu | number | Öğrencinin boylamı (-180 ile 180) |
| device_info Opsiyonel | object | Cihaz bilgileri (fake GPS tespiti için) |
| device_info.is_mock_location | boolean | Android mock location durumu |
| device_info.gps_accuracy | number | GPS doğruluk değeri (metre) |
| device_info.platform | string | "android" veya "ios" |
{
"success": true,
"message": "Yoklama kaydınız başarıyla alındı.",
"record": {
"course": "Bilgisayar Bilimine Giris",
"verified_at": "14:32:15",
"qr_verified": true,
"gps_verified": true,
"result": "present"
}
}
{
"success": false,
"message": "Konum sınıf dışında. Mesafe: 589 metre (izin verilen: 50 metre)",
"error_code": "GPS_OUT_OF_RANGE",
"record": {
"qr_verified": true,
"gps_verified": false,
"distance_meters": 589.03,
"allowed_radius": 50,
"result": "failed_gps"
}
}
Öğrencinin geçmiş yoklama kayıtlarını listeler. Opsiyonel course_id parametresi ile ders bazlı filtreleme yapılabilir.
Öğrencinin tüm derslerindeki katılım özetini döndürür: toplam oturum, katılım, devamsızlık ve katılım oranı.
{
"summary": [
{
"course_code": "BIL101",
"course_name": "Bilgisayar Bilimine Giris",
"total_sessions": 12,
"attended": 10,
"absent": 2,
"attendance_rate": 83.3
}
]
}
Yoklama yönetimi, canlı takip ve raporlama endpointleri.
Öğretim elemanının aktif derslerini öğrenci sayısıyla birlikte listeler.
Yeni bir yoklama oturumu başlatır. Dinamik QR token otomatik üretilir.
| Alan | Tip | Açıklama |
|---|---|---|
| course_id Zorunlu | integer | Ders ID |
| latitude Zorunlu | number | Yoklama konum enlemi |
| longitude Zorunlu | number | Yoklama konum boylami |
| duration_minutes Zorunlu | integer | Oturum süresi (5-360 dk) |
| classroom_id Opsiyonel | integer | Derslik ID (seçimliyse konumu override eder) |
| radius_meters Opsiyonel | integer | Kabul yarıçapı metre (varsayılan: 50) |
| qr_refresh_seconds Opsiyonel | integer | QR yenilenme süresi (varsayılan: 30sn) |
{
"message": "Yoklama oturumu başlatıldı.",
"session": {
"id": 1,
"qr_token": "QvlpFZ0ob3xAJ0sM2uApLD...",
"qr_refresh_seconds": 30,
"started_at": "2026-03-23T14:30:00+00:00",
"expires_at": "2026-03-23T15:00:00+00:00",
"latitude": "39.9255330",
"longitude": "32.8662870",
"radius_meters": 50
}
}
Aktif oturumun QR tokenini manuel olarak yeniler. Yeni token ve geçerlilik süresi döner.
Yoklama oturumunu sonlandırır. Katılım özeti döner.
{
"message": "Yoklama oturumu sonlandırıldı.",
"summary": {
"present": 8,
"absent": 2,
"total": 10
}
}
Yoklama sırasında anlık katılım durumunu döndürür. Öğrenci listesi, doğrulama durumları ve mesafe bilgilerini içerir.
{
"session_id": 1,
"status": "active",
"is_active": true,
"present_count": 1,
"absent_count": 9,
"total_students": 10,
"records": [
{
"student_number": "2021001",
"name": "Mehmet",
"surname": "Kaya",
"verified_at": "14:32:15",
"qr_verified": true,
"gps_verified": true,
"result": "present",
"distance_meters": "0.82"
}
]
}
Geçmiş yoklama oturumlarını ders ve tarih aralığı bazında listeler.
Yoklama kayıtlarını Excel (.xlsx) dosyası olarak indirir. Sütunlar: Öğrenci No, Ad, Soyad, Ders, Tarih, Saat, QR Durumu, GPS Durumu, Sonuç, Mesafe, Devamsızlık Oranı, Toplam Katılım, Öğretmen Notu.
| Alan | Tip | Açıklama |
|---|---|---|
| course_id Zorunlu | integer | Ders ID |
| date_from Opsiyonel | date | Başlangıç tarihi (YYYY-MM-DD) |
| date_to Opsiyonel | date | Bitiş tarihi (YYYY-MM-DD) |
Sistem yönetimi: kullanıcı, ders, derslik oluşturma ve log görüntüleme.
Kullanıcılar listelenir (sayfalandırılmış). role ve search parametreleri ile filtrelenir.
Yeni kullanıcı oluşturur (öğrenci, öğretim elemanı veya admin).
| Alan | Tip | Açıklama |
|---|---|---|
| name Zorunlu | string | Ad |
| surname Zorunlu | string | Soyad |
| email Zorunlu | string | E-posta (benzersiz) |
| password Zorunlu | string | Şifre (min: 8) |
| role Zorunlu | string | student | instructor | admin |
| student_number Opsiyonel | string | Öğrenci numarası (benzersiz) |
Yeni ders oluşturur. Ayrıca POST /admin/courses/assign-student ve POST /admin/courses/assign-instructor endpointleri ile kullanıcılar derslere atanır.
Yeni derslik oluşturur. Enlem, boylam ve varsayılan kabul yarıçapı tanımlanır.
| Alan | Tip | Açıklama |
|---|---|---|
| name Zorunlu | string | Derslik adı (örn: D-201) |
| building Opsiyonel | string | Bina adı |
| floor Opsiyonel | string | Kat |
| latitude Zorunlu | number | Enlem |
| longitude Zorunlu | number | Boylam |
| radius_meters Opsiyonel | integer | Kabul yarıçapı (varsayılan: 50m) |