Pada live code kali ini, kamu diminta untuk membuat aplikasi menggunakan client-server model.
Untuk membuat aplikasi ini mengharuskan kamu untuk mengakses 3rd party API, bacalah dokumentasi API yang diberikan dengan detail. API Documentation nya ada pada link berikut.
Fork repo ini, kemudian buatlah 2 folder dalam repo tersebut, client
dan server
. Setelah selesai mengerjakan, buat pull request dengan title nama
lengkap kamu (ex: Dimitri Wahyudiputra) dan berikan comment
environment variables apa saja yang kamu gunakan dalam mengerjakan
aplikasi ini (beserta value aslinya).
- Aplikasi ini memungkinkan user untuk mendapatkan random joke dan menyimpan joke yang disukai oleh user (favorites).
- User harus login terlebih dahulu untuk dapat menyimpan joke tersebut.
- Aplikasi ini dibuat SPA (Single Page Application) DAN harus reactive. Apabila tidak reactive, -10 point.
Notes:
- Berhubung kompetensi live code ini bukan MVC, maka kamu diperbolehkan untuk tidak membuat controller di server. Apabila kamu membuat routing nya di dalam 1 file routes/index.js juga diperbolehkan.
- File HTML telah disediakan, boleh menggunakan template ini, boleh juga menggunakan template sendiri asalkan layout-nya sama.
- Nama database harus
classic_fox_live_code_1
Buatlah endpoint untuk register dengan ketentuan sebagai berikut:
- route:
POST /register
- request:
- body:
{ email: 'dimitri@mail.com', password: 'secret' }
- body:
- response:
201
:{ _id: ObjectId(''), email: 'dimitri@mail.com', password: 'HashedPassword' }
Email bersifat unique, jadi tidak boleh ada email yang sama di dalam database.
Untuk melakukan hash terhadap password, kamu diperbolehkan menggunakan package apa saja. TIDAK PERLU mengimplementasikan fitur ini di client-side.
Buatlah endpoint untuk login sesuai dengan ketentuan sebagai berikut:
- route:
POST /login
- request:
- body
{ email: 'dimitri@mail.com', password: 'secret' }
- body
- response:
201
:{ access_token: '...' }
Gunakan package JWT untuk generate access token.
Todo:
- Buatlah fitur login di client side. Apabila user tidak berhasil
login, misalnya salah email/password, akan menampilkan pesan error (No
alert()
!). - Setelah berhasil login, maka form untuk login harus hilang, lalu muncul link/ button untuk logout.
- Semua fitur di aplikasi ini mengharuskan user untuk login terlebih dahulu, jadi jika belum login tidak akan muncul konten apapun di halaman webnya. ^^
Tampilkan joke yang kamu dapat dari 3rd party API ke client dan
implementasikan button untuk Generate
joke baru (No page refresh ya!).
Buat endpoint untuk menyimpan joke yang dipilih user dengan ketentuan sebagai berikut:
- route:
POST /favorites
- request
- body
{ joke }
- headers
{ access_token }
- body
- response
201
:{ _id: ObjectId(''), joke }
Todo:
- Implementasikan button
Add to My Favorites
di joke yang kamu dapatkan dari 3rd party API. - Setelah
Add to My Favorites
berhasil,Generate
joke baru. - Tampilkan semua joke favorit milik user yang sedang login.
Buat endpoint untuk menghapus joke favorit milik user dengan ketentuan sebagai berikut:
- route:
DELETE /favorites/:id
- request
- headers
{ access_token }
- headers
- response
200
:{ _id: ObjectId('') }
Note: Pastikan user tidak bisa menghapus joke favorit milik user lain. Silakan tulis logicnya di middleware.
Implementasikan button Remove
di setiap joke favorit yang
dimiliki oleh user.