Sebuah backend yang dibuat oleh seseorang yang sedang mengikuti seleksi Laboratorium Programming dengan niat untuk mengerjakan tugas dari awal diberikan, tetapi pada kenyataannya malah lebih mengaret dari frontendnya
git clone https://github.com/msyahrulsp/labpro-be.git labpro-be
cd labpro-be
npm install
Silahkan pilih metode yang ingin digunakan. Menjalankan sepenuhnya secara lokal menggunakan docker. Ataupun menjalankan secara lokal, tetapi terhubung dengan database dan redis yang telah di deploy
File drive-service-key.json diperlukan jika ingin menjalankan secara lokal. Kontak saya via Line untuk mendapatkannya. Terima kasih :D
- Ubah file .env.development menjadi .env
- Isi field yang kosong dengan ketentuan berikut
DATABASE_PASSWORD
: Isi dengan password root MySQL/MariaDBDATABASE_HOST
: Isi dengan IP dari container docker
- Cara mendapatkan IP terkait ialah dengan menjalankan perintah
cd ~ | cat /etc/resolv.conf
pada terminal - Jalankan di WSL jika menggunakan Windows
- Cara mendapatkan IP terkait ialah dengan menjalankan perintah
JWT_SECRET
: Isi dengan karakter random sesuai dengan keinginan
- Isi juga
MYSQL_ROOT_PASSWORD
pada filedocker-compose.yml
dengan password root MySQL - Jalankan perintah
docker-compose up
- Backend akan berjalan di http://localhost:5000 dengan database dan redis di container docker
Database akan terinisiasi jika container database dimulai untuk pertama kali
- Ubah file .env.production menjadi .env
- Isi
JWT_SECRET
dengan karakter random sesuai dengan keinginan REDIS_PASSWORD
perlu mengontak saya via Line- Jalankan perintah
npm run dev
- Backend akan berjalan di http://localhost:5000 dengan database dan redis yang telah di deploy
Endpoint | Method | Access |
---|---|---|
/register | POST | All |
/login | POST | All |
/login | GET | Customer, Admin |
/transfer | POST | Customer |
/history/{username} | GET | Customer |
/verifications/requests | POST | Customer |
/verifications/accounts | PUT, GET | Admin |
/verifications/requests | PUT, GET | Admin |
/users | GET | Admin |
Untuk melihat dokumentasi API terkait, silahkan pergi ke link berikut
Pada backend ini, saya menggunakan beberapa design pattern. Design pattern yang saya maksud ialah:
-
Chain of Responsibility
Pada salah satu endpoint, digunakan sebuah middleware, multer. Ini digunakan untuk menyimpan file terlebih dahulu pada backend untuk sementara sebelum di upload pada Google Drive. Jika file valid, maka akan dilanjutkan pada controller selanjutnya -
Factory
Pada Express JS, penginisiasian variabel yang membutuhkan library, hanya dibutuhkan 1 line, yaitu assignment itu sendiri. Namun, jika diliat dibelakang, penginisiasian ini memanggil method-method lain untuk menginisiasi variabel terkait -
Observer
Pada backend ini terdapat beberapa endpoint. Untuk membuat fungsi-fungsi pada backend terpanggil, disubscribe lah fungsi-fungsi tersebut pada tiap endpoint yang ada. Jadi, ketika publisher (frontend) memanggil endpoint, fungsi yang mensubscribe pada endpoint tersebut akan tereksekusi -
Proxy
Setiap memanggil API exchangerate, availibilitas pemanggilan API tersebut akan berkurang. Belum ditambah response time yang menambah karena ada tambahan pemanggilan API. Oleh karena itu, digunakanlah Proxy design pattern dengan cara mengimplementasikan redis. Alhasil, backend hanya akan memanggil API exchangerate ketika currency yang diingkan belum pernah dipanggil sama sekali. Namun, jika pernah dipanggil dengan currency yang sama, backend hanya akan mengambil nilai yang telah di cached
- NodeJS v16.14.2
- ExpressJS v4.18.1
- Typescript v4.7.4
- MySQL/MariaDB v2.18.1
- TypeORM v0.3.7
- redis v4.2.0