[Case Study] Bagaimana caranya meminta izin dengan mudah -Bagian 3

Djaka Pradana Jaya Priambudi
6 min readMar 14, 2019

--

Hi, setelah 3 hari development akhirnya selesai juga dan bagian 3 sudah siap so lets dive in …
WAIT bagian 3 dari apa ? Lho jangan jangan belum baca sebelumnya nih ? Kalau belum baca yang sebelumnya bisa baca dulu dong :

Pemilihan Tools

Jadi saya dan tim memutuskan untuk menggunakan :

  • Platform : Mobile (Android)

Hal ini sudah dibahas di bagian 1.

  • Database : MySQL

Aplikasi ini tidak memerlukan fleksibilitas NoSQL karena data yang kami simpan memiliki struktur yang pasti dan memiliki kemungkinan kecil berubah strukturnya. Ditambah lagi hostingan yang kami gunakan tidak support dengan MongoDB.
Jadi jika kita memilih jalur NoSQL kita akan menambah waktu dan resource development tanpa keuntungan yang signinfikan.

  • API : Laravel REST API

Meskipun sebenarnya menggunakan Laravel terlalu overkill, kami memutuskan untuk menggunakan ini demi kecepatan development dan memungkinkan kita untuk membuat website dan admin panel langsung disini apabila dibutuhkan.

  • Messaging Service: Firebase Cloud Messaging

Karena dapat diintegrasikan dengan cepat dan gratis

Desain Database & API

Desain DB & API

Setelah selesai merancang database dan API kita masuk ke development API

Development API

Kita menggunakan Laravel, jadi kita manfaatkan Passport dan Eloquent

  • Kenapa Passport ?

Karena Passport memberikan kita kemampuan untuk menggunakan seluruh kemampuan OAuth2 dengan cepat dan mudah.

  • Kenapa OAuth2?

Karena OAuth2 memiliki keamanan yang cukup kuat sekaligus memberikan kemampuan untuk sharing resource hanya dengan bearer token.

  • Kenapa Eloquent ?

Dengan memanfaatkan Eloquent, kita bisa menciptakan query ke database tanpa perlu mengetikan perintah SQL. Dengan kata lain melakukan query ke database seperti semudah memanggil function dari suatu class saja.

Mari kita lihat activity diagram yang sebelumnya.

Bisa dilihat ada bagian di mana kita menjalankan 2 proses secara bersamaan yaitu setelah orang tua mengkonfirmasi surat izin.

  • Kenapa perlu dijalankan secara bersamaan ?

Karena proses pengiriman notifikasi menggunakan FCM jadi saya manfaatkan CURL dan disaat itu pula kita perlu penyimpan data ke database jadi dua hal tersebut dikerjakan secara asynchronous dengan Laravel Queue.

Saya membuat satu Job dengan nama NotificationSender untuk mengurus pengiriman notifikasi ke user.

Karena menggunakan FCM, saya perlu menyimpan device key setiap user yang login, saya memutuskan untuk menyimpan device key setiap user login dan akan dihapus ketika mereka logout.

Development Aplikasi

Pada awal development, saya mengajukan saran bagaimana jika kita cukup membuat 1 button saja? Setelah berdiskusi akhirnya kami setuju dengan saran itu. Nantinya button tersebut dapat digunakan untut login ke semua user (baik murid, guru, dan orang tua) jadi hasil akhirnya :

Setelah login, data detail tentang pengguna dan token OAuth akan disimpan ke Shared Preferences berupa JSON.

  • Kenapa disimpan dalam JSON ?

Karena kita bisa merubah JSON tersebut menjadi object dengan bantuan GSON sehingga dapat mempermudah dan mempercepat dalam pengambilan data.

Karena kita memerlukan token setiap kali kita request ke beberapa rute API, jadi kita tanamkan ke Retrofit kita langsung

Demi reusability dan kerapihan kode, saya memutuskan membuat object Request yang menampung perintah perintah untuk Retrofit.

Home Screen

Home Screen (Siswa, Guru & Orang Tua)

Siswa

Pada bagian berapa hari, saya menggunakan Button yang bekerja seperti Radio Button.

  • Kenapa tidak pakai Radio Button atau Spinner saja ?

Karena demi estetika dan kemudahan pengguna, serta mudah diimplementasikan.

Function untuk Submit Izin dan Dispensasi
  • Kenapa tidak ada parameter id pengguna di function untuk submit ?

Karena di API kita otomatis akan mendeteksi siapa pengguna itu berdasarkan token yang digenerate setiap kali mereka login.

Sakit

Untuk bagian sakit kita dapat mengupload surat bukti keterangan dokter ataupun bukti lainnya.

  • Kenapa menggunakan Coroutine ?

Agar proses upload tidak menghambat proses lainnya, saya memanfaatkan Kotlin Coroutine dan mengkombinasikannya dengan Retrofit sehingga proses upload dapat dikerjakan secara Async.

  • Kenapa tidak pakai RxJava/RxKotlin saja ?

Karena Kotlin Coroutine sangat berpotensi untuk menggantikan mereka, sebab lebih mudah digunakan dan disupport secara resmi oleh JetBrains.

  • Kenapa Glide ?

Karena sangat mudah digunakan dan cukup powerful untuk meload gambar dari internet.

  • Bagaimana jika pengguna ingin melihat gambar dengan jelas ?

Pengguna dapat memperbesar gambar dengan cara mengklik gambar tersebut maka akan membuka activity “Lihat Gambar”.

Riwayat SIswa

Karena setiap tipe izin (sakit, izin, dispen) dan status sudah diberi id di db, kita cukup mengecek apa idnya lalu kita set background dan warna background sesuai id itu.

Saat membuka detail izin, saya taruh extra berupa object yang sudah di Parcelize

  • Kenapa menggunakan Parcelize ? Bukan Parcelable ?

Karena lebih mudah digunakan dan sangat rapi, silahkan baca ini.

Orang Tua

Orang Tua

Pada home, akan menampilkan izin-izin yang belum dikonfirmasi oleh orang tua dan orang tua cukup klik Izinkan atau Tolak untuk mengkonfirmasi izin tersebut.

Pada history, akan menampilkan izin-izin yang sudah dikonfirmasi oleh orang tua.

Guru

Guru dapat melihat siswa yang absen pada hari itu di sini. Yang tampil disini hanyalah izin-izin yang sudah disetujui oleh wali kelas atau orang tua.

Dispensasi

Jika guru (yang login) adalah seorang wali kelas, maka akan muncul daftar dispensasi yang diajukan oleh murid kelasnya yang belum diizinkan.

Notifikasi

Karena notifikasi menggunakan FCM, kita hanya perlu membuat agar notifikasi tersebut tampil saat di background dan foreground dengan cara membuat class FirebaseMessagingService dan jalankan perintah untuk memunculkan notifikasi ketika ada pesan masuk.

Notifikasi

Maka selesai juga development aplikasi ini.

Terima kasih karena sudah mengikuti trilogi case study ini, semoga bermanfaat 😁.

Sekian case study dari kami, jika ada kekurangan mohon maaf dan jangan lupa bantu koreksi di kolom response 🙏. Jangan lupa 👏 ya !

Critics and feedbacks are always welcomed, so don't hesitate in the response below ❤️.

SC Link : https://github.com/DjakaTechnology/dispen-app

--

--