Contributing
Terima kasih atas ketertarikan Anda untuk meningkatkan Teldock. Halaman ini merangkum cara mengusulkan perubahan, standar kode yang diikuti proyek, serta pemeriksaan yang harus lolos sebelum perubahan digabungkan.
Memulai
Fork repositori di GitHub.
Clone fork Anda dan tambahkan remote upstream:
bashgit clone https://github.com/YOUR_USERNAME/Teldock.git cd Teldock git remote add upstream https://github.com/Chaerulcp/Teldock.gitPasang dependency untuk bagian yang Anda ubah:
bashcd backend && npm install cd ../frontend && npm installJalankan dev server (di terminal terpisah):
bashcd backend && npm run dev # API on http://localhost:3001 cd frontend && npm run dev # SPA on http://localhost:3000
Lihat Installation untuk penyiapan lokal lengkap, termasuk database dan file environment.
Cara berkontribusi
- Cari issue berlabel
good first issueatauhelp wanted. - Komentari issue untuk mengklaimnya sebelum mulai bekerja, agar tidak terjadi pekerjaan ganda.
- Untuk fitur baru, buka issue untuk mendiskusikan pendekatannya sebelum implementasi.
- Untuk kerentanan keamanan, jangan membuka issue atau PR publik; laporkan secara privat.
Standar kode
Arsitektur berlapis
Jaga backend tetap berlapis dan hormati arah dependensinya:
routes → controllers → services → models- Routes mendeklarasikan endpoint dan memasang middleware (autentikasi, validasi).
- Controllers hanya menangani siklus request/response.
- Services berisi logika bisnis yang dapat dipakai ulang.
- Models memiliki akses data dan definisi skema.
Jangan menaruh query database di routes atau network call di layer presentasi.
Kualitas kode
- Jaga fungsi tetap fokus; maksimal 30–40 baris.
- Gunakan early return dan guard clause; hindari nesting lebih dari dua level
if/else. - Utamakan pengetikan eksplisit dan hindari
anyatau map yang tidak terdefinisi. - Gunakan
constsecara default,lethanya saat perlu reassignment, dan jangan pernahvar. - Gunakan
async/awaitdaripada rantai promise mentah bila lebih mudah dibaca. - Pecah file yang mendekati 200–250 baris menjadi modul yang lebih kecil dan fokus.
Keamanan dan penanganan error
- Tanpa secret hardcoded. Baca kredensial dari
.env; ekstrak magic string menjadi konstanta. - Jangan pernah meninggalkan
catchkosong. Tangani atau lempar ulang dengan konteks. - Tangani respons Telegram 429 dengan exponential backoff, bukan retry langsung.
- Validasi semua input di batas dengan skema Zod.
- Sanitasi input untuk mencegah SQL injection, XSS, SSRF, dan path traversal.
- Jangan pernah membocorkan storage chat ID atau bot token ke response klien.
- Gunakan signed URL untuk akses download dan preview.
Streaming
Jangan pernah menampung seluruh file di memori. Gunakan streaming atau chunking untuk upload dan download berukuran besar; implementasi yang ada di backend/src/services/telegram-storage.service.js adalah acuannya.
Frontend
- Gunakan functional component dengan hooks.
- Kelola state dengan Zustand, bukan Redux.
- Tangani state loading dan error secara eksplisit.
- Jaga form dan dialog tetap aksesibel serta responsif.
Database
- Gunakan query builder Sequelize (atau raw query bila sesuai) dengan nilai terparameterisasi.
- Tambahkan indeks untuk kolom yang sering di-query.
- Bungkus penulisan multi-langkah dalam transaction.
Jalankan pemeriksaan secara lokal
Jalankan ini sebelum membuka pull request. CI menjalankan perintah yang sama.
# Backend: lint and unit tests
cd backend
npm run lint
npm test
# Frontend: production build must succeed
cd ../frontend
npm run buildTIP
CI berjalan pada setiap push ke main dan setiap pull request. Pull request hanya digabungkan setelah job backend (lint + test) dan frontend (build) hijau.
Konvensi commit
Teldock menggunakan Conventional Commits:
<type>(<scope>): <description>| Tipe | Deskripsi |
|---|---|
feat | Fitur baru |
fix | Perbaikan bug |
docs | Hanya dokumentasi |
style | Pemformatan tanpa perubahan perilaku |
refactor | Perubahan kode yang bukan fix maupun fitur |
perf | Peningkatan performa |
test | Menambah atau memperbarui test |
chore | Pemeliharaan, dependency, tooling |
Contoh:
git commit -m "feat(auth): add email verification flow"
git commit -m "fix(upload): handle large file chunking properly"
git commit -m "docs(readme): clarify deployment requirements"Hindari pesan yang kabur seperti fixed stuff, update, atau WIP.
Proses pull request
- Buat branch dari
maindengan formattype/scope/description, misalnyafeat/email-verification. - Lakukan perubahan yang fokus; jaga diff tetap minimal dan hindari refactor yang tidak terkait.
- Tambahkan atau perbarui test dan dokumentasi bersamaan dengan kode.
- Jalankan pemeriksaan lokal di atas.
- Push branch Anda dan buka pull request ke
main. - Lengkapi deskripsi PR: apa yang berubah, issue terkait, cara pengujian, screenshot untuk perubahan UI, dan breaking change bila ada.
- Tanggapi masukan review dengan commit tambahan alih-alih force-push bila memungkinkan.
- Setelah disetujui dan CI hijau, maintainer akan menggabungkan PR.
Checklist review
- [ ] Perubahan terbatas pada lingkup yang diminta.
- [ ] Arsitektur berlapis dipatuhi.
- [ ] Input divalidasi dan secret tidak di-hardcode.
- [ ] Error ditangani; tidak ada blok
catchkosong. - [ ] File besar di-streaming, bukan di-buffer.
- [ ] Test mencakup perilaku yang diubah.
- [ ]
npm run lintdannpm testlulus dibackend. - [ ]
npm run buildlulus difrontend. - [ ] Dokumentasi diperbarui saat perilaku berubah.
Halaman terkait
- Project Structure — lokasi setiap layer.
- Security — model keamanan yang harus dipatuhi perubahan Anda.
- Changelog — bagaimana rilis dicatat.