BAB 23. SEQUENCE DIAGRAM
Bab ini menyajikan sequence diagram yang menggambarkan interaksi antar komponen sistem untuk setiap proses kritis TemuBelajar.
Sequence Diagram — Login
sequenceDiagram
participant U as Pengguna
participant App as Flutter App
participant API as Laravel API
participant DB as MySQL
U->>App: Masukkan Username & Password
App->>API: POST /api/v1/auth/login
API->>DB: Cari user by username
DB-->>API: Data user
API->>API: Verify password (bcrypt)
alt Password salah
API-->>App: 401 Unauthorized
App-->>U: Tampilkan pesan error
else Password benar
API->>DB: Buat personal access token
DB-->>API: Token tersimpan
API-->>App: 200 OK + token + profil
App->>App: Simpan token ke Secure Storage
App-->>U: Masuk ke Dashboard
end
Sequence Diagram — Request Bantuan & AI Matching
sequenceDiagram
participant S as Siswa
participant App as Flutter App
participant API as Laravel API
participant Queue as Job Queue
participant AI as AI Engine
participant T as Tutor
participant FCM as Firebase FCM
S->>App: Isi Form Request
App->>API: POST /api/v1/requests
API->>API: Validasi data request
API->>Queue: Dispatch MatchingJob
API-->>App: 201 Created (status: SEARCHING)
App-->>S: Notifikasi "Mencari tutor..."
Queue->>AI: Jalankan AI Matching
AI->>API: Ambil kandidat tutor
API-->>AI: Daftar tutor dengan profil
AI->>AI: Hitung skor kesesuaian
AI-->>API: Tutor terpilih + skor
API->>FCM: Kirim push notification
FCM-->>T: Notifikasi request masuk
API->>API: Update status → PENDING_TUTOR
Sequence Diagram — Booking Accept/Reject
sequenceDiagram
participant T as Tutor
participant App as Flutter App
participant API as Laravel API
participant FCM as Firebase FCM
participant S as Siswa
T->>App: Buka notifikasi request
App->>API: GET /api/v1/bookings/{id}
API-->>App: Detail booking
App-->>T: Tampilkan detail request
alt Tutor Accept
T->>App: Klik Accept
App->>API: POST /api/v1/bookings/{id}/accept
API->>API: Update status → ACCEPTED
API->>API: Buat Chat Room
API->>FCM: Notifikasi ke Siswa
FCM-->>S: "Tutor ditemukan! 🎉"
API-->>App: 200 OK + chat room info
else Tutor Reject
T->>App: Klik Reject
App->>API: POST /api/v1/bookings/{id}/reject
API->>API: Cari tutor alternatif
API-->>App: 200 OK
else Tutor Reschedule
T->>App: Isi jadwal alternatif
App->>API: POST /api/v1/bookings/{id}/reschedule
API->>FCM: Notifikasi ke Siswa
FCM-->>S: "Tutor mengusulkan jadwal baru"
API-->>App: 200 OK
end
Sequence Diagram — Check-In
sequenceDiagram
participant P as Peserta
participant App as Flutter App
participant GPS as GPS Device
participant API as Laravel API
participant DB as MySQL
P->>App: Buka fitur Check-In
App->>App: Buka kamera QR scanner
P->>App: Scan QR Code
App->>API: Validasi QR token
API->>DB: Cek QR valid & belum expired
DB-->>API: Status QR
alt QR Tidak Valid
API-->>App: 422 QR Tidak Valid
App-->>P: Tampilkan error
else QR Valid
App->>GPS: Minta koordinat GPS
GPS-->>App: Latitude, Longitude
App->>API: POST /api/v1/meetings/check-in (QR + coords)
API->>API: Hitung jarak dari lokasi meeting
alt Diluar Radius
API-->>App: 422 Diluar Radius
App-->>P: "Kamu terlalu jauh dari lokasi"
else Dalam Radius
API->>DB: Simpan check-in timestamp
DB-->>API: OK
API-->>App: 200 OK — Check-In Berhasil
App-->>P: "Check-In berhasil! Sesi dimulai ✅"
end
end
Sequence Diagram — Check-Out & Rating
sequenceDiagram
participant P as Peserta
participant App as Flutter App
participant API as Laravel API
participant DB as MySQL
P->>App: Klik Check-Out
App->>API: POST /api/v1/meetings/check-out
API->>DB: Simpan waktu selesai & durasi
API->>API: Hitung XP berdasarkan durasi
API->>DB: Update XP siswa & tutor
DB-->>API: OK
API-->>App: 200 OK — Sesi Selesai
App-->>P: Tampilkan form rating
P->>App: Beri rating 1-5 + komentar
App->>API: POST /api/v1/ratings
API->>DB: Simpan rating
API->>API: Hitung ulang rating rata-rata tutor
API->>API: Update Social Impact Score
API->>API: Update Leaderboard
DB-->>API: OK
API-->>App: 200 OK
App-->>P: "Terima kasih! Sesi selesai 🎉"