Cara mengonversikan snake case ke camel case di adonis

    Halo teman-teman! Kali ini, saya akan menjelaskan bagaimana cara mengonversikan snake case ke camel case dengan menggunakan framework adonisJS.

    Anggapan saya adalah teman-teman sudah menguasai basic adonisJS dan sudah menguasai sekilas mengenai model. Ada kalanya dimana teman-teman mungkin mengalami kasus seperti saya, jadi saya ingin membuat sebuah aplikasi RESTful API, dan saya menggunakan konvensi snake case untuk penamaan kolom di database. 

Sebelumnya, saya ingin bercerita sedikit berdasarkan apa yang saya baca dari beberapa sumber di internet (saya tidak mengklaim pengetahuan ini, jadi harap benarkan kalau misal saya salah ya)

/* START */

Pada umumnya, konvensi standar penamaan variable ada 4:
1. camelCase
2. snake_case
3. PascalCase
4. kebab-case

    Sebenarnya untuk semua konvensi ini, mengacu pada tujuan yang sama, untuk menghindari penggunaan spasi (" ") untuk sebuah variable, karena beberapa bahasa pemograman ataupun aplikasi ada limitasi ini. Tapi kita sebagai developer, tetap ingin membuat penamaan variable yang gampang dan jelas, namun tetap bisa dibaca. Maka mulailah konvensi ini dipakai sesuai kebutuhan. 

Walaupun sekarang ini banyak bahasa yang mulai menggunakan camelCase sebagai acuan standar koding mereka, bahkan database pun tidak masalah antara menggunakan camelCase atau snakeCase, karena di database terutama SQL, case sensitivity tidak masalah untuk nama kolom, jadi misal kita akan membuat nama kolom firstName, lalu firstname, FirstName ataupun semua huruf besar FIRSTNAME, semua kondisi adalah valid. Namun ini kembali lagi ke sistem operasi yang dipakai, SQL di unix merupakan case-sensitive yang mana huruf besar kecil akan sangat berpengaruh, tapi sebaliknya di windows. Dan juga karena di database, ada sebuah konsep "folding" atau mengubah nama table menjadi huruf kecil semua, sehingga kapitalisasi yang ada di camelCase, PascalCase tidak berarti lagi. 

Kesimpulannya, agar penamaan tidak menyebabkan masalah karena sistem operasi, ataupun lainnya, dan juga agar lebih mudah dibaca dan ditelusuri apabila ada kesalahan, maka snake_case lebih umum dipakai untuk penamaan table dan kolom di database SQL.

source: 

/* END */

lalu setelah cerita panjang lebar diatas, apa masalahnya? ya sudah di aplikasinya pakai saja camel_case juga, beres. Tapi ternyata pada kenyataan nya, di mobile apps contohnya iOS, standar yang dipakai adalah camelCase, jadi mau tidak mau kita harus menyesuaikan data tergantung dari pemakai/aplikasi. Jadi saya akan mengubah snake_case dari database ke camelCase ketika mengembalikan data API dalam bentuk JSON untuk dikonsumsi oleh aplikasi,

Ya... terus kenapa? tinggal diubah saja toh? nah, kebetulan karena saya pakai adonisJS, saya awalnya berpikir kalau adonisJS juga mempunyai fitur yang sama seperti Laravel API resource & collection untuk bertindak sebagai layer logic yang menerima dan menampilkan data (adonisJS adalah adaptasi laravelnya nodeJS), jadinya saya browsing dan ketemu package npm namanya adonis-bumbleebee.

Singkat cerita karena sudah panjang cerita saya diatas, saya install package tersebut dan mengikuti instruksi pemasangan nya sesuai di bawah ini:
- adonis install adonis-bumblebee



lalu kita buat dulu class transformer model nya dengan command
adonis make:transformer User

sebuah file baru akan terbuat di folder /App/Transformer, didalam file tersebut akan ada function transform, disinilah kita akan membuat representasi layer model dengan logic business yang diperlukan
contoh isi file UserTransform sesuai dokumentasi:
const BumblebeeTransformer = use('Bumblebee/Transformer')
 
class UserTransformer extends BumblebeeTransformer {
  transform (model) {
    return {
      id: model.id,
 
      firstname: model.first_name,
      lastname: model.last_name
    }
  }
}
 
module.exports = UserTransformer
Cara menggunakannya pun cukup mudah, di controller ketika kalian merefer object dari model, cukup

const users = await User.all()
return transform.collection(users, 'App/Transformers/UserTransformer') 

** gunakan transform.item untuk per row data, bisa merefer ke dokumentasi transformer adonis bumblebee untuk penggunaan lainnya


Selamat mencoba! Pembetulan / koreksi silakan langsung di komentar :)




Comments

Popular posts from this blog

Product Manager - Apa, Siapa & Bagaimana?

Upgrading Python version di Mac OS

Data Science - Pengenalan