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 DEFINERAmaç#
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#
| Parametre | Tip | Açıklama |
|---|---|---|
p_class_id | INTEGER | Öğ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_memberspublic.userspublic.classes
Notlar#
Uyarı: Bu fonksiyon sadece test ve geliştirme ortamları içindir. Production veritabanında kullanılmamalıdır.