Sistem masjid berasaskan SaaS
Matlamat utama sistem ini adalah seperti berikut.
Mudah digunakan
- Tidak semua orang pakar IT. Reka bentuk sistem untuk bukan pakar IT memerlukan pertimbangan teliti.
Gunakan kemahiran IT untuk kebaikan
- Sumber terbuka adalah satu bentuk sedekah yang digalakkan dalam Islam.
Kekal lama
- Syarikat hosting/teknologi mungkin tidak kekal, tetapi dengan sumber terbuka, projek ini diharap dapat bertahan lebih lama demi ummah.
Kita memberi, bukan mengambil
- Kita sepatutnya menyumbang kepada komuniti Muslim, bukan mengambil manfaat daripada mereka, terutamanya Masjid.
Sebelum memulakan, pastikan perkara berikut telah tersedia:
- Supabase CLI
- Homebrew (untuk macOS)
- pnpm
- Node.js
- Akses ke terminal/shell
- Sambungan internet untuk klon repositori dan pemasangan kebergantungan
π Ringkasan Pantas untuk Pengguna Baru
git clone https://github.com/Dev4w4n/e-masjid.my.git cd e-masjid.my pnpm install ./scripts/setup-supabase.sh # Sediakan pangkalan data dan persekitaran pnpm run build:clean # PENTING: Gunakan build:clean untuk kali pertama pnpm dev # Mulakan server pembangunanAplikasi akan tersedia di: http://localhost:3000
Sebelum menjalankan aplikasi, pastikan anda telah memasang perkara berikut:
-
Pasang Supabase CLI:
# Using npm npm install -g supabase # Using Homebrew (macOS) brew install supabase/tap/supabase # Verify installation supabase --version
-
Mulakan perkhidmatan Supabase:
# Initialize and start Supabase supabase start
Projek ini menggunakan TypeScript composite projects yang memerlukan urutan binaan yang betul:
- Binaan Bersih (selepas
pnpm cleanatau klon baru): Gunakanpnpm run build:clean - Binaan Biasa (semasa pembangunan): Gunakan
pnpm build
Pakej shared-types mesti dibina terlebih dahulu sebelum pakej lain boleh mengimport jenisnya.
# Klon repositori
git clone https://github.com/Dev4w4n/e-masjid.my.git e-masjid.my-agent-1
cd e-masjid.my-agent-1
# Pasang kebergantungan dengan pnpm
pnpm install
# PENTING: Bina semua pakej dengan urutan yang betul (untuk persediaan kali pertama)
pnpm run build:cleanpnpm run build:clean selepas pnpm install. Ini memastikan TypeScript composite projects dibina dengan urutan kebergantungan yang betul.
# Konfigurasi pangkalan data dan persekitaran
./scripts/setup-supabase.sh# Di root projek
# Mulakan semua aplikasi dengan Turborepo
pnpm dev
# Atau mulakan aplikasi tertentu
pnpm dev --filter=@masjid-suite/hubCatatan: Jika anda menghadapi ralat semasa pnpm dev, pastikan langkah bina telah selesai dengan jayanya menggunakan pnpm run build:clean terlebih dahulu.
Aplikasi akan tersedia di:
- Aplikasi Profil: http://localhost:3000
- Supabase Studio: http://localhost:54323
uvx --from git+https://github.com/github/spec-kit.git specify init --here- Pergi ke aplikasi: http://localhost:3000
- Log masuk sebagai super admin:
- Emel:
super.admin@test.com - Kata laluan:
TestPassword123!
- Emel:
- Lengkapkan profil super admin:
- Nama penuh: "System Administrator"
- Telefon: "+601234567890"
- Alamat: Isikan alamat Malaysia yang sah
- Masjid rumah: Biarkan kosong (akan cipta baru)
- Akses Pengurusan Masjid (hanya super admin)
- Cipta masjid baru:
{ "name": "Masjid Jamek Sungai Rambai", "registration_number": "MSJ-2024-001", "email": "admin@masjidjameksungairambai.org", "phone_number": "+60412345678", "description": "Community mosque in Bukit Mertajam, Pulau Pinang", "address": { "address_line_1": "Jalan Masjid Jamek", "address_line_2": "Sungai Rambai", "city": "Bukit Mertajam", "state": "Pulau Pinang", "postcode": "14000" } }
- Buka tetingkap pelayar baru/incognito (untuk simulasi pengguna lain)
- Pergi ke pendaftaran: http://localhost:3000/auth/register
- Daftar pengguna baru:
- Emel:
ali@example.com - Kata laluan:
UserPassword123!
- Emel:
- Lengkapkan profil:
- Nama penuh: "Ali bin Abdullah"
- Telefon: "+60123456789"
- Alamat: Alamat Malaysia yang sah
- Masjid rumah: Pilih "Masjid Jamek Sungai Rambai"
- Sebagai pengguna berdaftar, pergi ke "Permohonan Admin"
- Hantar permohonan:
- Pilih masjid: "Masjid Jamek Sungai Rambai"
- Mesej: "Saya ingin membantu mengurus masjid ini"
- Status permohonan: Akan dipaparkan "Menunggu"
- Tukar semula ke tetingkap super admin
- Pergi ke "Permohonan Admin"
- Semak permohonan Ahmad:
- Status: Lulus
- Nota: "Diluluskan untuk penglibatan komuniti"
- Sahkan kelulusan
- Sebagai Ahmad, segarkan halaman
- Peranan kini: "Admin Masjid"
- Akses ciri admin:
- Lihat senarai ahli masjid
- Lihat profil pengguna yang menunggu kelulusan
- Kemaskini maklumat masjid
- Buka tetingkap pelayar lain
- Layari tanpa pendaftaran:
- Lihat senarai masjid awam
- Lihat butiran masjid
- Cuba tindakan terhad β akan diarahkan ke pendaftaran
# Jalankan semua ujian unit
pnpm test
# Jalankan ujian dengan liputan
pnpm test:coverage
# Jalankan ujian dalam mod pantau
pnpm test:watch# Jalankan ujian integrasi API
pnpm test:integration
# Uji operasi pangkalan data
pnpm test:db# Jalankan ujian E2E dengan Playwright
pnpm test:e2e
# Jalankan ujian E2E dalam mod UI
pnpm test:e2e:ui
# Uji aliran pengguna tertentu
pnpm test:e2e --grep "admin workflow"-
Keadaan profil tidak lengkap:
- Pengguna melihat arahan melengkapkan profil
- Tidak boleh akses ciri khusus peranan
- Penunjuk kemajuan menunjukkan medan yang belum lengkap
-
Pengesahan borang:
- Format nombor telefon Malaysia
- Poskod yang sah
- Penunjuk medan wajib
-
Maklum balas kejayaan:
- Pengesahan profil lengkap
- Notifikasi ciri dibuka
- Perubahan UI mengikut peranan
Uji pengalaman pengguna berbeza:
| Peranan | Boleh Akses | Tidak Boleh Akses |
|---|---|---|
| Awam | Senarai masjid, butiran | Pengurusan pengguna, cipta profil |
| Berdaftar | Pengurusan profil, permohonan admin | Pengurusan pengguna, cipta masjid |
| Admin Masjid | Pengurusan masjid yang ditugaskan, profil ahli | Masjid lain, peranan pengguna |
| Super Admin | Semua ciri | N/A |
# Lint semua pakej
pnpm lint
# Baiki isu lint
pnpm lint:fix
# Semak jenis
pnpm type-check
# Format kod
pnpm format# Bina semua aplikasi (pembangunan normal)
pnpm build
# Bina selepas operasi bersih (gunakan ini selepas pnpm clean)
pnpm run build:clean
# atau
./scripts/build-packages.sh
# Bina aplikasi tertentu
pnpm build --filter=@masjid-suite/hub
# Pratonton binaan produksi
pnpm previewSelepas menjalankan pnpm clean && pnpm install, jangan terus gunakan pnpm build. Gunakan pnpm run build:clean untuk memastikan pakej dibina dengan urutan yang betul:
# β Jangan lakukan ini selepas pnpm clean
pnpm clean && pnpm install && pnpm build
# β
Lakukan ini pula
pnpm clean && pnpm install && pnpm run build:cleanSebab: TypeScript composite projects memerlukan fail deklarasi (.d.ts) dijana dalam urutan kebergantungan yang betul. Pakej shared-types mesti dibina dahulu sebelum pakej lain boleh mengimport jenisnya.
# Cipta migrasi baru
supabase migration new add_new_feature
# Laksanakan migrasi
supabase db push
# Tetapkan semula pangkalan data
supabase db reset
# Jana jenis TypeScript
supabase gen types typescript --local > packages/shared-types/src/database.tsRalat Sambungan Supabase
# Semak status Supabase
supabase status
# Mulakan semula Supabase
supabase stop
supabase startRalat Binaan
# Bersihkan cache binaan
pnpm clean
# Pasang semula kebergantungan dan bina dengan urutan yang betul
rm -rf node_modules
pnpm install
pnpm run build:clean # PENTING: Gunakan build:clean selepas operasi bersihRalat TypeScript "Cannot find module '@masjid-suite/shared-types'"
Ralat ini berlaku apabila:
- Selepas menjalankan
pnpm clean && pnpm install - Kloning repositori untuk kali pertama
- Fail deklarasi (.d.ts) belum dijana dengan urutan yang betul
Penyelesaian:
# Bina pakej dalam urutan kebergantungan
./scripts/build-packages.sh
# atau
pnpm run build:cleanMengapa ini berlaku?: TypeScript composite projects memerlukan pakej shared-types dibina dahulu sebelum pakej lain boleh menggunakan jenisnya. Skrip build:clean memastikan urutan binaan yang betul.
Ralat Jenis
# Jana semula jenis pangkalan data
supabase gen types typescript --local > packages/shared-types/src/database.ts
# Mulakan semula pelayan TypeScript dalam VS Code
Cmd+Shift+P β "TypeScript: Restart TS Server"Pastikan semua pembolehubah persekitaran yang diperlukan telah ditetapkan:
SUPABASE_URLSUPABASE_ANON_KEYSUPER_ADMIN_EMAILSUPER_ADMIN_PASSWORD
Port lalai yang digunakan:
- Aplikasi Profil: 3000
- Supabase API: 54321
- Supabase Studio: 54323
- Supabase Auth: 9999
Daftar pengguna:
curl -X POST http://localhost:54321/auth/v1/signup \
-H "Content-Type: application/json" \
-H "apikey: YOUR_ANON_KEY" \
-d '{"email": "test@example.com", "password": "password123"}'Cipta profil:
curl -X POST http://localhost:54321/rest/v1/profiles \
-H "Content-Type: application/json" \
-H "apikey: YOUR_ANON_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"full_name": "Test User",
"phone_number": "+60123456789",
"address": {
"address_line_1": "123 Test Street",
"city": "Kuala Lumpur",
"state": "Kuala Lumpur",
"postcode": "50100"
}
}'Import spesifikasi OpenAPI dari contracts/api-spec.yaml untuk dokumentasi API penuh dan keupayaan ujian.
- Super admin boleh log masuk dengan kelayakan persekitaran
- Super admin boleh cipta masjid
- Pengguna boleh daftar dan lengkapkan profil
- Pengesahan profil berfungsi untuk format Malaysia
- Pengguna boleh mohon peranan admin
- Super admin boleh lulus/tolak permohonan
- Admin masjid boleh urus masjid mereka
- Kawalan akses berdasarkan peranan berfungsi dengan betul
- Pengguna awam mempunyai tahap akses yang sesuai
- Muat halaman awal < 2 saat
- Navigasi antara halaman < 500ms
- Penyerahan borang < 1 saat
- Pertanyaan pangkalan data dioptimumkan dengan indeks yang betul
- Token JWT disahkan dengan betul
- Polisi Keselamatan Tahap Baris berfungsi
- Pengesahan dan pembersihan input
- Pengendalian ralat yang betul tanpa kebocoran data
Selepas melengkapkan panduan pantas ini:
- Terokai struktur kod
- Baca dokumentasi seni bina
- Sediakan persekitaran pembangunan anda
- Mula menyumbang ciri baharu
Untuk menambah aplikasi baharu ke monorepo, lihat Panduan Sumbangan dan Dokumentasi Sistem Specify.
Perlukan Bantuan?
- Semak Panduan Penyelesaian Masalah
- Semak Dokumentasi API
- Rujuk Garis Panduan Pembangunan
Fork repo ini dan hantar Pull Request anda.
Kami mahu input anda! Kami ingin menjadikan penyumbangan kepada projek mudah dan telus, sama ada dengan:
- Melaporkan pepijat
- Menghantar pembetulan
- Mencadangkan ciri baru
- Menambah baik ciri
- Dokumentasi
- Ujian unit
Atau anda ingin berbual dengan kami, cari kami di Discord.
