Proje: OkulUp API · Hub: OkulUp API — Architecture

OkulUp API — Veritabanı Şeması

KRITIK: Primary Key Türleri ve FK Kuralı

Bu kritik bilgi FK hatalarına yol açtığından kesinlikle ezberlenmelidir:

TabloPK TürüFK için kullan
schoolsincrements('id') = unsigned intunsignedInteger
usersincrements('id') = unsigned intunsignedInteger
classes$table->id() = bigIncrementsunsignedBigInteger
Diğer yeni tablolar$table->id() = bigIncrementsunsignedBigInteger

ASLA foreignId('school_id') veya foreignId('user_id') kullanma — type mismatch hatası verir!

Ana Tablolar ve İlişkiler

Çekirdek Kimlik

schools          (id: uint, name, about, mission, vision, status, soft_delete)
  └── settings   (school_id, features JSON, policies JSON, branding JSON, support JSON)
roles            (id, name: admin|manager|teacher|parent|student)
users            (id: uint, role_id, school_id, name, first_name, last_name, email, ...)
class_user       (class_id: ubigint, user_id: uint, role: teacher|student)
student_parent   (student_id: uint, parent_id: uint, relationship)

Akademik Modüller

classes          (id: ubigint, school_id: uint, name, grade_level, branch, is_active)
announcements    (school_id, class_id nullable, student_id nullable, title, body, published_at)
announcement_reads  (announcement_id, user_id)
announcement_attachments

schedules        (school_id, class_id, teacher_id, day_of_week, start_time, end_time, subject)
attendances      (school_id, class_id, student_id, teacher_id, attendance_date, status, check_in_time)
  status: present | absent | late | excused

assignments      (school_id, class_id, teacher_id, title, due_date, status: draft|published|closed)
assignment_submissions (assignment_id, student_id, status: pending|submitted|late|reviewed, grade, submitted_by)
assignment_attachments (assignment_id, file_path, file_name, file_size, mime_type)

İletişim

conversations    (title, conversation_type: direct|broadcast|group, reply_policy, teacher_id, parent_id, class_id)
conversation_participants (conversation_id, user_id)
messages         (conversation_id, sender_id, content, read_at, attachment_path)
message_reads    (message_id, user_id, read_at)

Ödeme

payment_types    (school_id, name, description)
payments         (school_id, student_id, payment_type_id, amount, currency, due_date, paid_date, status, receipt_url)
  status: pending | paid | overdue | cancelled

Diğer Modüller

events           (school_id, class_id nullable, title, description, start_datetime, end_datetime, cover_image)
event_rsvps      (event_id, user_id, status: attending|not_attending|maybe)
galleries        (school_id, class_id, title, status: pending|approved|rejected)
gallery_media    (gallery_id, uploaded_by, file_path, thumbnail_path, mime_type)
tracking_entries (school_id, student_id, created_by, date, category, status, time, notes, photo_path)
  categories: meal_breakfast|meal_lunch|meal_snack|sleep|medication|diaper|mood|note
appointments     (school_id, teacher_id, parent_id, student_id, appointment_date, start_time, end_time, status)
  status: pending|confirmed|cancelled|completed
notes            (user_id, title, content, note_date, category, color, reminder_at)
document_requests (school_id, requester_id, receiver_id, type, title, status, due_date)
enrollment_requests (user_id, school_id, status: pending|approved|rejected)
meal_menus       (school_id, created_by, date, title, content)
meal_menu_attachments
devices          (user_id, token, platform: ios|android, is_active)
notifications    (user_id, type, title, body, data JSON, read_at)
audit_logs       (user_id, action, model_type, model_id, old_values JSON, new_values JSON, ip_address)
report_exports   (user_id, type, status, file_path, filters JSON)