LapaRide

Supabase Setup Guide

Panduan lengkap setup database, auth & realtime untuk LapaRide

๐Ÿ—„๏ธ 16 Tables ๐Ÿ” RLS Policies โšก Realtime ๐Ÿ”‘ Auth Roles ๐Ÿ’ณ Toyyibpay
1 Buat Supabase Project
โœ“
Pergi ke supabase.com dan daftar
Klik "Start your project" โ†’ login dengan GitHub atau email
โ†’ supabase.com โ†—
โœ“
Buat New Project
Name: laparide-prod ยท Region: Southeast Asia (Singapore) ยท Set password yang kuat
โœ“
Copy API Keys
Pergi Settings โ†’ API โ†’ copy Project URL dan anon public key
2 Run Schema SQL

Pergi Supabase Dashboard โ†’ Database โ†’ SQL Editor โ†’ New query, paste dan run SQL schema (fail laparide_schema.sql)

SQL Editor โ€” Supabase DashboardSQL
-- 1. Buka SQL Editor dalam Supabase Dashboard
-- 2. Klik "New query"
-- 3. Paste semua kandungan laparide_schema.sql
-- 4. Klik "Run" (Ctrl+Enter)
-- 5. Pastikan "Success. No rows returned" muncul

-- Verify tables wujud:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name;
3 Senarai Tables
TableKegunaaanRealtimeRLS
profilesSemua user โ€” buyer, rider, resto, adminโ€”โœ“ ON
buyer_profilesStats & reward points buyerโ€”โœ“ ON
rider_profilesInfo rider + lokasi terkiniโšก Liveโœ“ ON
restaurantsInfo restoran + operating hoursโ€”โœ“ ON
menu_categoriesKategori menu setiap restoranโ€”โœ“ ON
menu_itemsItem menu dengan harga & availabilityโ€”โœ“ ON
ordersCORE โ€” semua order dengan status flowโšก Liveโœ“ ON
order_itemsItem dalam setiap orderโ€”โœ“ ON
rider_locationsHistory GPS rider untuk live trackingโšก Liveโœ“ ON
delivery_addressesAlamat saved buyerโ€”โœ“ ON
vouchersPromo codes & discountsโ€”โœ“ ON
paymentsRekod pembayaran Toyyibpayโ€”โœ“ ON
rider_earningsPendapatan rider per deliveryโ€”โœ“ ON
notificationsPush notif dalam appโšก Liveโœ“ ON
reviewsRating & ulasan food + riderโ€”โœ“ ON
voucher_usageTrack penggunaan voucherโ€”โœ“ ON
4 Order Status Flow
๐Ÿ›’
pending
Buyer buat order
โ†’
โœ…
confirmed
Restoran terima
โ†’
๐Ÿณ
preparing
Sedang masak
โ†’
๐Ÿ“ฆ
ready
Siap, tunggu rider
โ†’
๐Ÿ›ต
picked_up
Rider ambil
โ†’
๐Ÿƒ
on_the_way
Rider OTW
โ†’
๐ŸŽ‰
delivered
Selesai!
โšก Realtime: Setiap kali status berubah dalam database, semua client yang subscribe akan dapat update secara automatik โ€” buyer dapat notif, rider dapat order baru, restoran dapat confirmation. Tiada polling, tiada refresh!
5 Setup Environment Variables

Tambah dalam setiap HTML file anda (ganti value yang sebenar)

Dalam setiap HTML โ€” before closing HTML + JS

<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2">script>

<script type="module">
import { signIn, getBuyerOrders, subscribeOrderStatus }
  from './supabase.js'

// Atau set terus:
const { createClient } = supabase
const db = createClient(
  'https://XXXXXXXXXXXXXXXX.supabase.co',  // <-- your URL
  'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'  // <-- anon key
)
script>
SUPABASE_URLhttps://abcdefghijk.supabase.coSettings โ†’ API
SUPABASE_ANON_KEYeyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...Settings โ†’ API
TOYYIBPAY_KEYxxxxxxxxxxxxxxxxxxxxxxxxtoyyibpay.com โ†’ Profile
TOYYIBPAY_CAT_CODExxxxxxxxtoyyibpay.com โ†’ Kategori
6 Konfigurasi Auth
โœ“
Enable Email Auth
Authentication โ†’ Providers โ†’ Email โ†’ Enable. Boleh disable "Confirm email" untuk development.
โœ“
Set Redirect URLs
Authentication โ†’ URL Configuration โ†’ tambah:
http://localhost:3000/** dan https://yourdomain.com/**
โœ“
Setup Storage Buckets
Storage โ†’ New bucket:
โ€ข avatars (public)
โ€ข menu-images (public)
โ€ข restaurant-logos (public)
โœ“
Test Register User
Cuba daftar user pertama, check Authentication โ†’ Users dan profiles table dalam Table Editor
7 Contoh Code Integration
Login + Semak Role โ†’ Redirect ke Dashboard
import { signIn, getCurrentUser } from './supabase.js'

async function handleLogin(email, password) {
  try {
    await signIn({ email, password })
    const user = await getCurrentUser()

// Redirect ikut role
    const routes = {
      buyer:      'user.html',
      rider:      'rider.html',
      restaurant: 'restaurant.html',
      admin:      'admin.html'
    }
    window.location.href = routes[user.profile.role]

} catch (err) {
    showError(err.message)
  }
}
Real-time Order Tracking (dalam user.html)
import { subscribeOrderStatus, subscribeRiderLocation } from './supabase.js'

// Bila user bukak track page
async function initTracking(orderId, riderId) {

// 1. Subscribe status order
  const unsubOrder = subscribeOrderStatus(orderId, (order) => {
    updateStatusBadge(order.status)    // update UI

if (order.status === 'delivered') {
      showDeliveredPopup()
      unsubOrder()                       // stop subscribe
      unsubLoc()
    }
  })

// 2. Subscribe rider GPS (update map pin)
  const unsubLoc = subscribeRiderLocation(riderId, ({ lat, lng }) => {
    riderMarker.setLatLng([lat, lng])   // Leaflet map
    leafMap.panTo([lat, lng])
  })
}
Rider โ€” Update GPS setiap 5 saat
import { updateRiderLocation } from './supabase.js'

let trackingInterval = null

function startTracking(activeOrderId) {
  trackingInterval = setInterval(() => {
    navigator.geolocation.getCurrentPosition(
      ({ coords }) => {
        updateRiderLocation(
          coords.latitude,
          coords.longitude,
          activeOrderId
        )
      },
      null,
      { enableHighAccuracy: true, timeout: 5000 }
    )
  }, 5000)  // update setiap 5 saat
}

function stopTracking() {
  clearInterval(trackingInterval)
}
๐Ÿ“‹ Setup Progress
Schema SQL siap
supabase.js integration siap
Buat Supabase project
Run SQL schema
Setup Auth providers
Tambah API keys dalam HTML
Test register & login
Test create order
Test realtime tracking
Setup Toyyibpay
๐Ÿ’ก Next step selepas setup: Buat login.html dengan form email/password yang guna signIn() dan redirect ke dashboard ikut role