add_test_students_to_class()#

Önceden tanımlanmış test öğrencilerini belirtilen sınıfa toplu olarak ekleyen fonksiyon.


Fonksiyon İmzası#

CREATE OR REPLACE FUNCTION add_test_students_to_class(p_class_id INTEGER)
RETURNS JSON
SECURITY DEFINER

Amaç#

Test ve geliştirme ortamlarında hızlı veri doldurmak için belirli test öğrencilerini (ID: 93, 94, 96, 97) otomatik olarak bir sınıfa ekler. Zaten kayıtlı öğrencileri atlayarak duplicate kayıt oluşmasını önler.


Parametreler#

ParametreTipAçıklama
p_class_idINTEGERÖğrencilerin ekleneceği sınıfın ID’si

Dönüş Değeri#

Type: JSON

Başarılı Yanıt:

{
  "success": true,
  "added_count": 3,
  "skipped_count": 1,
  "message": "3 öğrenci eklendi, 1 öğrenci zaten sınıfta"
}

Hata Yanıtı:

{
  "success": false,
  "error": "Hata mesajı"
}

SQL Kodu#

CREATE OR REPLACE FUNCTION public.add_test_students_to_class(p_class_id integer)
 RETURNS json
 LANGUAGE plpgsql
 SECURITY DEFINER
AS $function$
DECLARE
    v_result json;
    v_added_count integer := 0;
    v_skipped_count integer := 0;
    v_test_student_ids integer[] := ARRAY[93, 94, 96, 97];
    v_student_id integer;
BEGIN
    FOREACH v_student_id IN ARRAY v_test_student_ids
    LOOP
        IF NOT EXISTS (
            SELECT 1 
            FROM class_members 
            WHERE class_id = p_class_id 
            AND student_id = v_student_id 
            AND deleted_at IS NULL
        ) THEN
            INSERT INTO class_members (class_id, student_id, joined_at)
            VALUES (p_class_id, v_student_id, now());
            
            v_added_count := v_added_count + 1;
        ELSE
            v_skipped_count := v_skipped_count + 1;
        END IF;
    END LOOP;
    
    v_result := json_build_object(
        'success', true,
        'added_count', v_added_count,
        'skipped_count', v_skipped_count,
        'message', format('%s öğrenci eklendi, %s öğrenci zaten sınıfta', v_added_count, v_skipped_count)
    );
    
    RETURN v_result;
    
EXCEPTION
    WHEN OTHERS THEN
        RETURN json_build_object(
            'success', false,
            'error', SQLERRM
        );
END;
$function$

Kullanım Örneği#

Projede Kullanım#

Dosya: lib/teacher/pages/class/teacher_class_detail_screen.dart
Satır: ~258
Açıklama: Öğretmen sınıf detay ekranında test öğrencilerini hızlıca eklemek için kullanılır.

SQL Örneği#

-- Test öğrencilerini 5 numaralı sınıfa ekle
SELECT add_test_students_to_class(5);

-- Sonuç:
-- {"success": true, "added_count": 4, "skipped_count": 0, "message": "4 öğrenci eklendi, 0 öğrenci zaten sınıfta"}

Test Öğrenci ID’leri#

  • 93 - Test öğrencisi 1
  • 94 - Test öğrencisi 2
  • 96 - Test öğrencisi 3
  • 97 - Test öğrencisi 4

Özellikler#

  • Duplicate kayıt kontrolü
  • Toplu ekleme işlemi
  • Detaylı sonuç raporu
  • Hata yakalama mekanizması

Güvenlik#

  • SECURITY DEFINER - Fonksiyon owner yetkisiyle çalışır
  • Test amaçlı kullanım için tasarlanmıştır
  • Production ortamında kullanımı önerilmez

İlgili Tablolar#

  • public.class_members
  • public.users
  • public.classes

Notlar#

Uyarı: Bu fonksiyon sadece test ve geliştirme ortamları içindir. Production veritabanında kullanılmamalıdır.