akupintar-online-test merupakan server API implementasi online test dari akupintar.id yang dibuat menggunakan NodeJS.
Fitur-fitur yang terdapat pada server API ini:
- Cari kampus
- Mengikuti dan berhenti mengikuti kampus
- List jurusan pada kampus
- NodeJS
- Mysql
-
Mengkloning repositori ini
git clone https://github.com/putuadityabayu/akupintar-online-test.git cd akupintar-online-test
-
Konfigurasi Mysql
NOTE: Data msyql yang terdapat pada repositori ini tidak benar dan hanya contoh yang digunakan untuk keperluan development
Pastikan server mysql sudah terinstall pada perangkat. Langkah-langkah untuk mengkonfigurasi mysql:
-
Membuat database baru. Dapat menggunakan mysql workbench ataupun menggunakan terminal
DB_USER="MYSQL USER" DB_PASS="PASSWORD MYSQL" DB_DATABASE="NAMA DATABASE YANG AKAN DIBUAT" SQL_STRING="CREATE DATABASE IF NOT EXISTS $DB_DATABASE;" mysql -u$DB_USER -p$DB_PASS -e "$SQL_STRING"
-
Import struktur dan contoh data ke dalam database
mysql -u$DB_USER -p$DB_PASS $DB_DATABASE < ./sql/akupintar_data.sql
-
-
Konfigurasi variabel environment
Buat file dengan nama
.env
pada folder projek ini.Isikan dengan variabel-variabel yang diperlukan. Contoh variabelnya dapat dilihat pada file .env.example
Server API ini dibuat menggunakan bahasa typescript, dimana NodeJS tidak dapat langsung mengeksekusi bahasa typescript.
Sehingga untuk menjalankan server dapat menggunakan 2 cara, tergantung environtment-nya.
-
Development
Menggunakan bantuan
ts-node
untuk memudahkan proses development, sehingga tidak perlu meng-compile kode setiap selesai melakukan pengeditan.ts-node
sudah terinstall otomatis pada development dependensi.npm run dev
-
Production
Bahasa typescipt harus di-compile terlebih dahulu menjadi bahasa javascript yang dapat dieksekusi oleh NodeJS
npm run build
Kemudian menjalan server menggunakan NodeJS
npm start
Server sudah berjalan dan dapat diakses pada
http://localhost:$PORT
Beberapa contoh data pengguna untuk mengeksekusi API yang memerlukan otentikasi:
-
Name: Aku Pintar
Username: akupintar
Password: akupintar -
Name: User 1
Username: user1
Password: user1 -
Name: User 2
Username: user2
Password: user2
Respon pada server API ini juga dapat dilihat Postman.
-
Endpoint:
/login
-
POST body:
{ "username":"akupintar", "password": "akupintar" }
-
Contoh respon:
{ "token": "JWT_TOKEN used for Authorization Header", "user": { "id": 1, "name": "Aku Pintar", "username": "akupintar" } }
-
Endpoint:
/campus
-
Optional header:
Authorization: Bearer JWT_TOKEN
-
Optional query:
page
: Halaman yang ingin minta. Default 1page_size
: Ukuran data dalam satu permintaan panggilan. Default 15category
: Kategori kampus yang diminta. ContohSWASTA
,NEGERI
,KEDINASAN
,PTN-BLU
q
: Nama kampus yang ingin dicari
-
Contoh respon:
{ "page": 1, "total": 1, "total_pages": 1, "data": [ { "id": 2, "name": "Universitas Brawijaya (UB)", "accreditation": "A", "profile": "Profil \n\nUniversitas Brawijaya merupakan saah satu universitas terkemuka di Indonesia yang didirikan oleh Presiden Republik Indonesia melalui kawat no. 258/K/61 dikirim pada tanggal 11 Juli 1961. Nama Brawijaya ini diambil dari gelar Raja-Raja Majapahit, sebuah kerajaan besar di Indonesia dari abad ke-12 hingga ke-15. UB telah terakreditasi secara nasional dan internasional dengan tingkat nilai A baik dari BAN-PT dan juga IATUL Universitas Brawijaya berusaha untuk terus memberikan fasilitas yang dapat menunjang setiap mahasiswa didalamnya.", "history": null, "achievement": "Webometrics :\nMeraih peringkat 5 dalam hasil penilaian perguruan tinggi se-Indonesia pada periode Januari 2013\n\n4ICU :\nMeraih peringkat 4 dalam hasil penilaian situs perguruan tinggi se-Indonesia pada periode Januari 2013\n\nQS-Stars :\nJurusan Teknik Sipil UB meraih peringkat 4 dalam kategori jurusan Teknik Sipil terbaik se-Indonesia\nJurusan Ilmu Akuntansi UB meraih peringkat 2 dalam kategori jurusan Ilmu Akuntansi terbaik se-Indonesia\nJurusan Ilmu Komunikasi UB meraih peringkat 3 dalam kategori jurusan Ilmu Komunikasi terbaik se-Indonesia", "location": "Kota Malang, Jawa Timur", "image": "https://image", "phone_number": "0812345678", "fax": "021-23456", "rangking": 428, "politeknik": false, "status": { "id": 3, "name": "PTN-BLU" }, "category": { "id": 2, "name": "SWASTA" }, "is_followed": true } ] }
-
Endpoint:
/campus/:campus_id/majors
campus_id
: ID kampus
-
Optional header:
Authorization: Bearer JWT_TOKEN
-
Optional query:
page
: Halaman yang ingin minta. Default 1page_size
: Ukuran data dalam satu permintaan panggilan. Default 15strata
: Jenjang pendidikan yang diminta. Contoh:Sarjana
atauPasca Sarjana
q
: Nama jurusan yang ingin dicari
-
Contoh respon:
{ "page": 1, "total": 31, "total_pages": 3, "data": [ { "id": 15674, "name": "Arsitektur", "accreditation": "A", "website": "https://", "prospect": "Lembaga Keuangan, Akuntan Pemerintah, Akuntan Publik/Perusahaan, Account Officer, Tenaga Pendidik, Wirausaha", "learned": "Ilmu menganalisis dan melaporkan", "faculty": { "id": 1030, "name": "Fakultas Pertanian" }, "strata": { "id": 1, "name": "Sarjana" }, "ukt": { "minimum": 1600000, "maximum": 16500000 } } ] }
Endpoint ini tetap akan berhasil (kode status 200) meskipun user
sudah mengikuti kampus.
-
Endpoint:
/campus/:campus_id
campus_id
: ID kampus yang ingin diikuti
-
Header:
Authorization: Bearer JWT_TOKEN
-
Contoh respon:
{ "success": true }
Endpoint ini tetap akan berhasil (kode status 200) meskipun user
tidak mengikuti kampus.
-
Endpoint:
/campus/:campus_id
campus_id
: ID kampus yang ingin berhenti diikuti
-
Header:
Authorization: Bearer JWT_TOKEN
-
Contoh respon:
{ "success": true }