Folder backend-section berisi aplikasi restAPI untuk user (Menjawab soal backend no 2)
Folder frontend-section berisi aplikasi web (Menjawab soal frontend no 2)
- Tingkat Kompleksitas berdasarkan pendekatan O(n)
-
fungsi mengakses elemen pertama array
def get_first_item(arr): return arr[0]
Tingkat kompleksitas algoritma ini adalah O(1) atau bisa disebut dengan constant yang yang berarti berapa pun banyaknya input yang dimasukkan, proses yang dijalankan tetap hanya 1 proses saja
-
fungsi mengecek apakah ada nilai yang sama didalah sebuah array
def check_duplicate(arr): for outer in range(len(arr)): for inner in range(len(arr)): if outer == inner: continue if arr[outer] == arr[inner]: return true return false
Tingkat kompleksitas algoritma ini adalah O(n^2). Kompleksitas tersebut bisa dilihat dari fungsinya yang mempunyai 2 nested loop sehingga kompleksitas nya menjadi nn atau n^2. Walaupun Jumlah prosesnya dapat berkurang saat mendapatkan nilai yang sama, Pendekatan notasi O menggunakan asumsi worstcase yang dapat terjadi yang dalam hal ini tidak ada satupun nilai yang duplicate sehingga proses yang terjadi akan sebanyak nn atau n^2
-
mencari bilangan fibonacci
def Fibonacci(number): if number <= 1: return number return Fibonacci(number - 2) + Fibonacci(number - 1)
Tingkat kompleksitas algoritma ini adalah O(2^n) atau biasa disebut algoritma eksponensial. Hal ini dikarenakan fungsi tersebut akan menjalankan subproblem dimana subproblem tetapi subproblem yang sama akan menjalankan fungsi lebih dari sekali. Dengan menggunakan algoritma tersebut, untuk mencari Fibonacci(5) maka akan dijalankan proses sebanyak 2^5 atau 32 proses.
-
Tingkat Kompleksitas berdasarkan pendekatan O(n)
if (true) { let first = 1 } if (true) { var second = 10 } console.log(first) // Pertanyaan 1 console.log(second) // Pertanyaan 2
Output yang dikeluarkan dari fungsi console.log(first) adalah error karena first tidak terdefinisi di scope dimana console.log(first) berada karena deklarasi variabel let first = 1 hanya dapat diakses dalam scope lokalnya yang dalam hal ini adalah skop pengondisian/(if). Sedangkan Output yang dikeluarkan dari console.log(second) adalah 10 karena deklarasi variabel menggunakan var dapat diakses secara global.
Aplikasi restAPI pada backend test ini dibuat menggunakan node.js dan postgreSQL sehingga untuk itu pastikan untuk menginstal node.js, nodemon,PostgreSQL, serta sequelize-cli terlebih dahulu.
Berikut adalah langkah untuk menjalankan aplikasi rest API
-
$npm install
Untuk menginstal semua dependecies yang ada di package.json
-
Buat folder config yang didalamnya berisi file config.json yang menggunakan environment development untuk menfigurasi koneksi di database. Berikut contoh dari isi file config
{ "development": { "username": "your_usernmae", "password": "your_password", "database": "db-smu", "host": "127.0.0.1", "dialect": "postgres" } }
-
$sequelize db:create
buat data base sesuai dengan config.json
-
$sequelize db:migrate
Untuk migrasi semua file yang ada di folder migrations
-
buat file .env yang berisi varibel sesuai dengn yang ada di envTemplate. Berikut contohnya
SECRET=mania-mantap PORT=3000
-
$npm run dev
running programnya pada directory backend-section. applikasi akan dijalankan pada port yang diisi pada file .env
setelah menjalankan perintah npm run dev pada terminal, anda akan melihat respon di terminal sebagai berikut yang menandakan aplikasi telah berjalan
[nodemon] 2.0.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node ./bin/http.js` listening to port 3000
untuk endpoint resAPI (resAPI doc) dapat dilihat dibawah
_Base Url : http://localhost:3000/user
User Register for insert new user to database
-
URL
/register
-
Method:
POST
-
URL Params
None
-
Data Params
email = [string]
username = [string]
password = [string]
Here the request body example
{ "username": "bau fakhran", "email": "bau@mail.com", "password": "bau123" }
-
Success Response:
-
Code: 201
Content: `{{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImJhdWZha0BtYWlsLmNvbSIsImlhdCI6MTU4NzA0MzYwOX0.u8LM28d43twdlPm8oiVIDOMISgOk4-DL1hK71iDh5Sk", "msg": "register successfully" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "Bad Request", "errors": "Email has already been taken" }
- Code: 400
Content:
{ "msg": "Bad Request", "errors": [ "email cannot be null", "password cannot be null", "username cannot be null" ] }
- Code: 400
-
User Login use Password
-
URL
/loginPassword
-
Method:
POST
-
URL Params
None
-
Data Params
email = [string]
password = [string]
Request Body Example
{ "email": "bau@mail.com", "password": "bau123" }
-
Success Response:
-
Code: 201
Content: `{{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImJhdWZha0BtYWlsLmNvbSIsImlhdCI6MTU4NzA0MzYwOX0.u8LM28d43twdlPm8oiVIDOMISgOk4-DL1hK71iDh5Sk", "msg": "login successfully" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "login failed", "errors": "invalid email or password" }
-
Generate 6 digit OTP code and send it to user email. User will receive 6 digit OTP from email awarungq@gmail.com . The OTP will valid for 3 minutes from time we hit the endpoint.
-
URL
/generateOTP
-
Method:
POST
-
URL Params
None
-
Data Params
email = [string]
example for the request body
{ "email": "bau@mail.com" }
-
Success Response:
-
Code: 200
Content: `{ "msg": "ITP code has send, check your email" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "send OTP failed", "errors": "email not registered" }
-
verify the OTP which get from the email, and then give the access token
-
URL
/verifyOTP
-
Method:
POST
-
URL Params
None
-
Data Params
email = [string]
otp = [integer]
example for the request body
{ "email": "bau@mail.com", "OTP": 123456 }
-
Success Response:
-
Code: 200
Content: `{{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImJhdWZha2hyYW5AZ21haWwuY29tIiwiaWF0IjoxNTg3MDQ0OTIyfQ.aob6s1sR_Xn-g3I_O8JaqEqISyxWnMoIpdzkrqyDveg", "msg": "login successfullly" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "login failed", "errors": "wrong ITP code" }
-
give user data (email, username, id)
-
URL
/:id
-
Method:
GET
-
URL Params
id = [integer]
-
Data Params
none
-
Success Response:
-
Code: 200
Content: `{{ "id": 5, "email": "baufakhran@gmail.com", "username": "fakhran" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "NOT FOUND", "errors": "DATA NOT FOUND" }
-
change user password, require old password
-
URL
/:id
-
Method:
PATCH
-
URL Params
id = [integer]
-
Data Params
password = [integer]
new_password = [integer]
Request Body example:
{ "password": "bau123", "new_password": "newBau123" }
-
Success Response:
-
Code: 200
Content: `{{ "result": [1], "msg": "success change password" }
-
-
Error Response:
-
Code: 400
Content: `{{ "msg": "change password failed", "errors": "old password wrong" }
-
delete user - asumption just SuperUser doit, not the user
-
URL
/:id
-
Method:
DELETE
-
URL Params
id = [integer]
-
Data Params
none
-
Success Response:
-
Code: 200
Content: `{{ "result": 1, "msg": "success delete user" }
-
-
Error Response:
-
Code: 200
Content: `{{ "result": 0, "msg": "failed delete user, user not found" }
-
aplikasi web untuk front end section dibuat mengunakan framework vue.js. Adapun langkah untuk menjalankan aplikasi tersebut adalah sebagai berikut
-
Arahkan terminal pada direktori folder frontend-section.
-
Jalankan npm install pada terminal untuk mengistall semua dependecies pada packaje.json.
-
Jalankan npm run serve untuk menjalankan applikasi.