𝗠𝗲𝗺𝗯𝗮𝗻𝗴𝘂𝗻 𝗕𝗮𝗰𝗸𝗲𝗻𝗱 𝗠𝗮𝗻𝗮𝗷𝗲𝗺𝗲𝗻 𝗣𝗿𝗼𝗷𝗲𝗸
Saya sedang membangun alat manajemen proyek kolaboratif untuk magang saya di CodeAlpha.
Cara kerjanya mirip dengan Trello atau Asana versi sederhana. Pengguna dapat membuat proyek, mengundang anggota, dan memindahkan tugas di berbagai papan. Saya menggunakan Express.js, Prisma, dan Socket.io untuk menggerakkannya.
Berikut adalah pelajaran teknis yang saya pelajari saat membangun backend tersebut.
𝗠𝗲𝗻𝗴𝗲𝗹𝗼𝗹𝗮 𝗥𝗲𝗹𝗮𝘀𝗶 𝗗𝗮𝘁𝗮
Pengguna dan proyek memiliki hubungan many-to-many. Saya menggunakan tabel ProjectMember untuk menghubungkan keduanya. Tabel ini menyimpan data tambahan seperti peran (role) pengguna.
Saya menambahkan unique constraint pada tabel ini. Hal ini memastikan seorang pengguna hanya muncul satu kali per proyek. Ini juga membuat composite key untuk pencarian yang cepat.
Untuk papan Kanban, saya membuatnya tetap sederhana. Status tugas ditentukan oleh papan tempat tugas tersebut berada. Memindahkan tugas dari "To Do" ke "Done" hanyalah masalah memperbarui board ID-nya.
𝗞𝗲𝘀𝗮𝗹𝗮𝗵𝗮𝗻 𝗔𝗿𝘀𝗶𝘁𝗲𝗸𝘁𝘂𝗿
Saya mendapat pelajaran berharga tentang koneksi database. Jangan membuat PrismaClient baru di setiap file route. Hal ini akan membuat terlalu banyak koneksi dan menyebabkan aplikasi Anda crash.
Sebagai gantinya, buatlah satu instance bersama dalam satu file tunggal. Impor instance yang sama tersebut ke setiap route. Ini menjaga connection pool Anda tetap stabil.
𝗢𝘁𝗼𝗿𝗶𝘀𝗮𝘀𝗶 𝗱𝗮𝗻 𝗞𝗲𝗮𝗺𝗮𝗻𝗮𝗻
Saya menggunakan middleware protect untuk melindungi route. Middleware ini memeriksa JWT di header Authorization.
Saya menggunakan optional chaining saat membaca header. Ini mencegah aplikasi crash jika ada header yang hilang.
Untuk proyek ini, saya menggunakan access token berdurasi 7 hari. Meskipun aplikasi produksi menggunakan token berdurasi pendek dan refresh token, token berdurasi panjang sudah cukup baik untuk cakupan spesifik ini.
𝗜𝗻𝘁𝗲𝗴𝗿𝗶𝘁𝗮𝘀 𝗗𝗮𝘁𝗮 𝗱𝗲𝗻𝗴𝗮𝗻 𝗧𝗿𝗮𝗻𝘀𝗮𝗸𝘀𝗶
Membuat proyek memerlukan tiga langkah:
- Membuat record proyek
- Menetapkan pemilik
- Membuat papan default
Jika satu langkah gagal, data Anda akan menjadi korup. Saya menggunakan prisma.$transaction untuk membungkus langkah-langkah ini. Jika ada bagian yang gagal, seluruh proses akan di-rollback. Ini menjaga database Anda tetap bersih.
Kesalahan Logika Umum
Saya menemukan dua bug umum:
Relation Arrays: Saat Anda menyertakan relasi dalam sebuah query, Prisma mengembalikan sebuah array. Anda tidak dapat mengakses properti secara langsung pada relasi tersebut. Anda harus mengambil item pertama dalam array terlebih dahulu.
Urutan Rute: Express mencocokkan rute dari atas ke bawah. Jika Anda menempatkan rute dengan parameter sebelum rute yang spesifik, Express akan mencocokkan rute yang salah. Selalu letakkan rute yang spesifik di atas rute yang berparameter.
Pola backend ini sekarang menjadi bagian dari alur kerja saya.