Membuat Server GraphQL dengan Firestore + NodeJS + Clean Code Architecture (Bagian 3)

Mochammad Farrell
4 min readDec 11, 2019

--

Ok temen-temen setelah kita setting firestore dan install dependencies untuk kebutuhan akhirnya saat yang ditunggu telah tiba yaitu coding time.

Ok seperti biasa saya akan breakdown dulu untuk langkah-langkah yang akan kita lakukan.

  • Step 1 Membuat project firestore di firebase.
  • Step 2 Menginisiasi project nodejs dan install dependencies.
  • Step 3 Menerapkan clean code architecture pada NodeJS.(Yang akan kita lakukan sekarang).
  • Step 4 Review code & menguji GraphQL.

Ok sebelum saya coding, saya akan memberithahukan beberapa referensi yang saya gunakan.

Sebelumnya cerita sedikit, saya lebih familiar coding dengan bahasa golang. Pada code yang saya buat, konsep clean code architecture yang dibuat berdasarkan clean architecture golang dan saya melihat struktur package NodeJS yang saya buat berdasarkan referensi diatas nodejs-clean. Terima kasih mas Iman Tumorang dengan artikel yang telah mas Iman buat saya jadi mengerti konsep clean code.

Ok saya langsung jelaskan konsep clean code. Intinya pada clean code architecture, terdapat 4 layer utama.

  • Layer Model

Pada layer model kita sipan semua file model atau kelas yang kita definisikan.

  • Layer Repository

Pada layer repository kita menangani komunikasi data. Maksud dari komunikasi data adalah kita menangani lalu lintas data. Semua data yang keluar masuk harus berada pada layer repository. Query didefiniskan pada layer ini.

  • Layer Usecase

Pada layer usecase, layer usecase juga bisa dibilang sebagai business layer. Semua operasi bisnis dan algoritma seperti menjumlah total harga yang sudah di query dari layer repository harus ditangani di dalam layer usecase.

  • Layer Delivery

Pada layer delivery, data yang sudah melalui proses bisnis pada layer usecase akan di kirimkan kepada client melalui layer ini. Layer delivery bisa berupa endpoint.

Ok setelah kita membuat project pada bagian 2, struktur folder harusnya seperti ini.

Struktur file

Clean code architecture disini kita representasikan layer sebagai package. maka kita buat masing-masing package yaitu model, repository, usecase dan delivery.

$ mkdir models
$ mkdir repository
$ mkdir usecases
$ mkdir delivery

Setelah kita buat layer-layer struktur file harus berbentuk seperti ini.

Struktur file

ok pada package model, kita tambahkan file todo.js

Kita buat model todo dimana todo punya 2 entitas yaitu id dan context. id nantinya akan dipakai untuk menampung nilai document id dari firestore dan context dipakai untuk menampung nilai dari context atau kegiatan yang berasal dari firestore.

Langsung kita pindah ke package repository. Nah file serviceAccountKey.json ini disimpan pada file repository sebagai config file. bila teman-teman lupa serviceAccountKey.json, teman-teman bisa buka tutorial bagian 1.

pada package repository kita tambahkan file db.js

Untuk admin.initializeApp({}) teman-teman bisa lihat pada project firestore masing-masing. Dapat dilihat pada menu settings di tab menu ‘Service accounts’.

Ok disini saya mau jelaskan code, seperti yang telah saya jelaskan tadi di layer repository kita menangani lalu lintas data. Sehingga pada db.js ini terdapat query untuk meminta data ke firestore.

Terdapat beberapa method ,

  • AddToDatabase(text) : method ini akan menambahkan data text pada firestore project kita.
  • DeleteFromDatabase(id) : method ini akan menghapus id pada firestore sesuai dengan id yang diinput.
  • ReadDatabase(id) : method ini akan mengambil data dari firestore yang bisa kita olah.

Mungkin beberapa pertanyaan, kenapa ada async, await dan bagaimana cara untuk menambahkan data ke firestore. Teman-teman bisa pelajari bagaimana cara nodejs dan firestore bekerja pada link berikut.

Sekarang kita pindah ke package usecase. Buat file baru bernama todo.js

Ok teman-teman karena disini tujuannya untuk mengambil data todo dan kita belum menambahkan proses bisnis, maka usecase berfungsi untuk mengembalikan data yang sudah di ambil dari layer repository. Perlu diingat, bahwa jika misalkan teman-teman mau mengambil data transaksi yang paling banyak. Teman-teman lakukan pada layer ini.

Keluar dari package usecase masuk ke package delivery dan buat file bernama router.js

Ok teman-teman disini layer usecase yang telah kita buat dipakai di layer delivery sebagai data yang akan kita pakai nanti. Penjelasan dari code ini akan ada pada part 4.

Ok lalu pada project root index.js tambahkan code.

Setelah teman-teman tambahkan semua code. Struktur file harusnya seperti ini :

Struktur file setelah ditambah code

Ok terakhir untuk menjalankan server

$ node index.js

Jika berhasil terminal akan output

Express GraphQL Server Now Running On localhost:4000/graphql

Ok teman-teman cukup sekian dari bagian 3. Lanjut bagian 4

--

--

Mochammad Farrell

Backend Developer at Xtremax , Mobile Developer and Machine Learning Enthusiast