‫Instruktur:
‫Dalam video ini, kita akan membangun fungsi
‫pabrik pengendali untuk menghapus dokumen
‫tinjauan, tetapi juga dokumen dari semua koleksi lainnya,
‫semuanya dengan satu fungsi sederhana.
‫Jadi, seperti yang saya sebutkan di awal bagian ini,
‫menambahkan pengendali yang sangat mirip ke semua pengontrol
‫kita akan membuat banyak kode duplikat, bukan?
‫Karena semua penangan pembaruan ini,
‫atau semua penangan penghapusan
‫ini, atau semua penangan buatan
‫ini, mereka semua pada dasarnya hanya terlihat sama, bukan?
‫Juga, bayangkan kita ingin
‫mengubah seperti beberapa kode status https atau pesan status.
‫Kemudian kita harus masuk ke masing-masing dan setiap pengontrol dan
‫kemudian mengubah semua penangan di sana.
‫Jadi, daripada menulis semua penangan ini secara manual,
‫mengapa tidak membuat fungsi pabrik yang akan
‫mengembalikan penangan ini untuk kita?
‫Jadi, fungsi pabrik persis seperti itu.
‫Ini adalah fungsi yang mengembalikan fungsi lain, dan
‫dalam hal ini fungsi handler kami.
‫Jadi, untuk menghapus, untuk membuat, untuk memperbarui,
‫dan juga untuk sumber bacaan.
‫Oke dan saya tahu bahwa seluruh konsep ini bisa menjadi sedikit rumit
‫untuk dipahami, dan
‫itulah alasan mengapa saya meninggalkan
‫ini untuk bagian selanjutnya dari kursus ini.
‫Tapi sekarang, saya yakin Anda
‫benar-benar siap untuk menerapkan hal-hal semacam ini.
‫Jadi logika seperti ini yang harus
‫dapat diterapkan oleh setiap pengembang JavaScript tingkat lanjut,
‫dan sekali lagi saya percaya bahwa pada titik ini
‫dalam kursus Anda benar-benar siap untuk mulai menggunakan konsep
‫lanjutan seperti ini, oke.
‫Tapi cukup bicara, sekarang saya tunjukkan cara
‫kerjanya dengan menggunakan handler hapus sebagai contoh pertama.
‫Dan sebenarnya kami memiliki satu di pengontrol tur, jadi mari kita
‫lanjutkan dan salin yang itu, jadi
‫hapus tur.
‫Oke, jadi saya menyalinnya pada dasarnya sebagai
‫template untuk kita ikuti.
‫Jadi mari kita buat file baru, dan saya akan
‫melakukannya di controller.
‫Baiklah,
‫jadi penangan...
‫pabrik. js.
‫Dan yang saya lakukan ini adalah folder controllers,
‫karena fungsi yang akan kita tulis di sini
‫pada dasarnya akan mengembalikan controller.
‫Jadi bagi saya sangat masuk akal jika
‫Anda menempatkannya di sini.
‫Jadi mari kita salin bagian
‫ini di sini, hanya untuk menyimpannya sebagai referensi.
‫Jadi sekali lagi tujuannya di sini adalah pada dasarnya membuat fungsi,
‫yang kemudian akan mengembalikan
‫fungsi yang terlihat seperti ini di sini.
‫Tapi tentu saja tidak hanya untuk tur,
‫tetapi untuk setiap model yang kami miliki di aplikasi kami
‫dan yang mungkin kami miliki di masa depan.
‫Jadi fungsi ini perlu
‫disiapkan untuk itu, dan artinya di dalam fungsi
‫pabrik, kita akan melewati modelnya, oke.
‫Jadi sebut saja ini deleteOne.
‫Dan disebut seperti ini, sekali lagi,
‫karena fungsi ini tidak hanya
‫berfungsi untuk menghapus tur, tetapi
‫juga untuk menghapus ulasan dan pengguna dan di masa
‫mendatang beberapa dokumen lain yang mungkin
‫juga kita miliki.
‫Jadi seperti yang saya katakan di
‫awal, kita akan meneruskan model ke dalam fungsi ini.
‫Jadi kami melewati model dan kemudian kami membuat fungsi baru, dan fungsi itu
‫akan segera mengembalikan fungsi async
‫kami, jadi pada dasarnya semua ini atau fungsi
‫handler async.
‫Oke, jadi sekarang yang perlu kita lakukan adalah
‫benar-benar mengubah dari model alat khusus ke model yang lebih umum.
‫Kemudian disini kita juga akan merubahnya dari tour menjadi document karena sekali
‫lagi kita tidak akan tahu jenis dokumen apa ini.
‫Jadi fungsi ini tidak akan benar-benar tahu apakah itu tur,
‫atau apakah itu ulasan, atau pengguna.
‫Jadi kita perlu mengambil tur dari semua ini,
‫dan hanya itu.
‫Jadi ini pada dasarnya generalisasi
‫dari fungsi khusus ini, yang hanya berfungsi untuk tur, dan sekarang
‫yang baru ini berfungsi untuk setiap model.
‫Yang juga perlu kita lakukan di sini adalah mengimpor catchAsync ini dan
‫juga AppError ini.
‫Jadi tangkapAsync...
‫dan saya yakin itu ada di folder utilitas.
‫Dan kemudian, bukan AppError tetapi catchAsync.
‫Kemudian duplikat ini
‫di sini, AppError, dan ini di sini adalah huruf besar.
‫Cobalah, dan kami sekarang siap untuk
‫benar-benar mengujinya.
‫Jadi begini cara kerjanya, pertama-tama
‫kita perlu mengimpor pabrik handler itu.
‫Jadi katakanlah, dan
‫saya hanya akan menyebutnya pabrik di sini.
‫Jadi perlu, dan itu ada di folder yang sama, jadi
‫pawang pabrik.
‫Baiklah dan jadi mari kita komentari yang ini di sini, atau sebenarnya
‫tidak semua ini.
‫Ya atau sebenarnya kita bisa mengomentarinya,
‫jadi ekspor baru. menghapus tur akan...
‫pabrik. deleteOne dan kemudian berikan modelnya,
‫yaitu tour.
‫Dan hanya itu, hanya itu yang perlu kita lakukan.
‫Jadi hanya untuk rekap sangat cepat di
‫sini, jadi kami memanggil fungsi deleteOne ini,
‫lalu di sana kami melewati
‫model, dan apa yang akan terjadi adalah fungsi
‫ini kemudian akan segera mengembalikan fungsi handler yang
‫kami miliki sebelumnya.
‫Cukup model tertentu, yang sebelumnya adalah tur, sekarang akan
‫diganti dengan yang kami masukkan
‫ke dalam fungsi.
‫Dan omong-omong ini bekerja karena penutupan JavaScript, yang hanya
‫merupakan cara mewah untuk mengatakan bahwa
‫fungsi dalam ini di sini akan mendapatkan akses
‫ke variabel dari fungsi
‫luar bahkan setelah bagian luar telah kembali.
‫Jadi memanggil fungsi ini di sini
‫kemudian akan mengembalikan fungsi lain,
‫yang kemudian akan duduk di sini dan menunggu sampai
‫akhirnya dipanggil segera setelah kita mencapai rute yang sesuai.
‫Dan sekarang mari kita coba persis seperti itu.
‫Jadi hapus tur, oke,
‫dan mari kita pilih tur yang
‫tidak terlalu kita butuhkan di sini untuk saat ini.
‫Jadi katakanlah...
‫sekarang katakanlah di sini Petualang
‫Salju karena itu juga tidak memiliki ulasan.
‫Jadi mari kita kirim itu,
‫oh dan sekarang kami tidak memiliki izin untuk melakukan
‫tindakan sebelumnya, dan itu karena kami tidak masuk sebagai admin.
‫Jadi mari kita
‫coba itu, dan ini adalah admin yang harus kita masuki.
‫Oke, jadi sudah selesai.
‫Dan sekarang ini seharusnya berhasil, dan memang berhasil.
‫Dan itulah bukti bahwa fungsi pabrik kami
‫benar-benar melakukan tugasnya.
‫Oke karena jika Anda sekarang kembali ke
‫sini, kami memiliki 10 hasil dan sekarang kami hanya mendapatkan sembilan,
‫sangat sempurna.
‫Dan sekarang tujuannya adalah untuk dapat menggunakan
‫ini di setiap pengontrol.
‫Jadi mari kita salin ini di sini
‫dan pergi ke ulasan.
‫Oh dan tentu
‫saja kita membutuhkannya di sini, pada awalnya,
‫sekarang benar, dan sekarang ekspor. deleteReview sama dengan
‫pabrik. deleteOne
‫dengan model ulasan.
‫Dan hanya itu, hanya itu
‫yang perlu kita lakukan untuk mengimplementasikan penangan penghapusan.
‫Sekarang tentu saja kita juga perlu menentukan penangan rute.
‫Sekarang tentu saja kita perlu menentukan rute itu sendiri, jadi mari
‫kita lakukan itu di sini juga.
‫Jadi router. route karena disini
‫sebenarnya kita membutuhkan parameter ID.
‫Dan sekarang hapus hanyalah reviewController. deleteReview, dan saya tidak mengacaukan izin
‫di sini, juga dengan otentikasi karena untuk saat
‫ini saya hanya ingin
‫membuat ini berfungsi dan khawatir
‫tentang hal itu nanti di bagian ini.
‫Oke, jadi mari kita tutup hal ini di sini.
‫Jadi dapatkan semua ulasan,
‫baiklah,
‫mari kita simpan yang ini dan yang ini juga.
‫Jadi sekarang kita bisa mulai dengan lembar kosong di
‫sini dan mari kita mulai dengan mendapatkan semua
‫ulasan, jadi sekarang kita bisa menghapus satu.
‫Jadi mari kita hapus, nah yang ini saja.
‫Oke, sekarang kita juga membutuhkan
‫ini, dan kemudian metode delete http.
‫Kami tidak memerlukan otorisasi pada saat ini,
‫jadi mari kita kirimkan saja.
‫Dan memang tidak ada konten, jadi 204.
‫Dan jika kita sekarang mendapatkan semua
‫ulasan, maka kita harus kembali memiliki hanya tiga.
‫Ya, itu berhasil dan mari kita beralih ke yang berikutnya.
‫Oke sekian ulasan, ulasan.
‫Mari dapatkan baris kode ini di sini dan sekarang akhirnya
‫tambahkan ke pengontrol pengguna juga.
‫Baiklah, dan tentu saja semua ini, saya mengerti agak
‫membingungkan sekarang mengotak-atik semua file yang berbeda
‫ini, tetapi kita hanya
‫perlu melakukannya sekali dan kemudian kita selesai dengan
‫semua kebingungan itu.
‫Jadi di sini kita sudah memiliki ekspor. deleteUser, sekarang
‫yang perlu kita lakukan adalah memanggil fungsi pabrik kita,
‫jadi deleteOne dan kemudian pengguna.
‫Sekarang hanya administrator yang nantinya dapat benar-benar
‫menghapus pengguna karena ingat bahwa ketika pengguna menghapus
‫dirinya sendiri, maka
‫mereka tidak akan benar-benar terhapus tetapi hanya
‫aktif yang akan disetel ke false.
‫Tetapi administrator di sisi
‫lain benar-benar akan dapat menghapus pengguna secara efektif
‫dari database.
‫Tapi sekali lagi,
‫kita akan khawatir tentang izin itu nanti.
‫Untuk saat ini, mari kita periksa di userRoutes apakah
‫rute tersebut benar-benar diimplementasikan, dan
‫ya itu ada di bawah sini.
‫Dan karena kita sekarang menerapkan
‫ini, mari kita uji di sini lagi juga di Postman.
‫Jadi pertama mari kita simpan yang ini.
‫Jadi...
‫hapus ulasan, dan
‫sekarang mari kita salin ini ke
‫rute lain.
‫Jadi hapus dan kemudian satu pengguna,
‫tetapi saya sebenarnya tidak akan melakukannya sekarang.
‫Yang saya inginkan hanyalah mendapatkan beberapa ID acak.
‫Atau sebenarnya mari kita buat pengguna baru,
‫jadi pada dasarnya daftar, lalu hapus yang itu segera.
‫Jadi halo, seperti ini.
‫Dapatkan semua pengguna, dan kemudian orang ini di sini.
‫Jadi mari kita hapus dia segera, jadi kami
‫mengirim, kami tidak mendapatkan 204 konten.
‫Dan tentu saja, sekarang dia harus pergi.
‫Sekarang jika kita mencoba melihatnya
‫lagi, jadi pada dasarnya mencoba menghapus pengguna
‫yang sudah tidak ada lagi, kita akan mendapatkan kesalahan.
‫Jadi mari kita lihat, dan memang tidak ada dokumen yang
‫ditemukan dengan ID itu.
‫Dan ini berarti bahwa dalam fungsi
‫pabrik kami, jadi di sini, semua AppError dan catchAsync, semuanya
‫masih utuh.
‫Jadi semuanya masih bekerja sama seperti sebelumnya.
‫Nah jadi itu juga penting untuk diuji di sini.
‫Mari kita simpan ini dengan
‫cepat di sini juga, jadi setiap titik akhir yang kita
‫terapkan, saya juga menambahkannya
‫di sini ke Postman karena sebentar lagi kita
‫akan benar-benar dapat membuat beberapa dokumentasi
‫API berdasarkan semua ini yang telah kami simpan di sini di Postman.
‫Jadi, itulah fitur lain yang berguna dari aplikasi ini.
‫Jadi kami telah menghapus pengguna
‫saat ini, dan sekali lagi itu berbeda dari
‫hanya menghapus pengguna karena yang ini di sini
‫untuk administrasi dan yang ini untuk pengguna yang sedang login,
‫jadi sangat berbeda.
‫Oke, jadi ini adalah fungsi pabrik pertama kami hanya
‫untuk menghapus dan hanya agar Anda memahami
‫konsep itu sendiri.
‫Selanjutnya, kita akan menerapkan fungsi
‫pabrik untuk memperbarui dan membuat dokumen.