Transcript for:
Panduan Pembuatan RESTful API dengan NestJS

Halo teman-teman selamat datang di clelas nesjs nah di mana Di sini kita akan studi kasus ya Nah kita akan membuat restful api menggunakan nestjs Oke Sebelum kita mulai kita kenalan dulu ya jadi Nama saya adalah Eko Kurniawan saat ini kerja sebagai technical arsitek di salah satu e-commerce terbesar di Indonesia nah saya sendiri sudah kerja lebih dari 13 tahun dan biasanya di selah-selah kesibukan saya bekerja ya saya biasa menyempatkan t berbagai konten soal programming di website programmer zamanau atau di youtube channel programmer zamanau Oke kalau teman-teman ingin diskusi dengan saya teman-teman bisa kontak saya lewat telegram atau jangan lupa juga follow sosial medianya programmer zamanau ya ada di Linkin Facebook Instagram YouTube telegram channel ada juga di tiktok atau misalnya kalau dari perusahaan teman-teman butuh konsultasi teman-teman juga bisa email ke email pribadi saya di sini oke sebelum teman-teman mengikuti kelas ini pastikan teman-teman sudah mengikuti empat saya sebelumnya ya kenapa Karena di sini kita tidak belajar lagi dari awal jadi kita akan langsung studi kasus ya jadi teman-teman pastikan sudah belajar kelas javascript kelas notdejs juga gitu ya kelas typescript dan yang terakhir adalah kelas nestjs nah kalau teman-teman sudah mengikuti kelas ini baru teman-teman bisa memulai mengikuti kelas yang respol api ini yuk kita mulai Oke Sebelum kita mulai ya kita akan bahas dulu requirement-nya jadi sebelum membuat aplikasinya kita akan bahas kebutuhannya kita mau buat aplikasi seperti apa Oke pada kelas ini kita akan coba membuat resp api untuk kontak manajemen ya jadi aplikasinya sederhana ya harapannya sih agar teman-teman Mengerti bagaimana cara membuat restful api menggunakan Nes Nah jadi di sini kita akan buat kontak manajemen di mana Nanti ada tiga fitur ya yang akan kita buat yang pertama adalah user managemennya jadi nanti eh usernya bisa registrasi login gitu gitu ya Nah nanti setelah itu ada yang namanya kakct managementen jadi setelah user itu login atau bikin registrasi gitu ya Nah nanti dia bisa bikin kontak untuk user itu jadi contohnya saya registrasi nanti saya bisa bikin kontak untuk saya ya jadi saya bisa bikin kontak kontak saya jadi kontak saya teman saya dan lain-lain Nah setelah itu di setiap kontaknya itu bisa kita tambahkan address managemennya jadi nanti kita bisa tambahkan kontak plus data addressnya apa aja Jadi mungkin Res full api-nya tidak terlalu kompleks ya kita buat sederhana tapi di sini nanti ada relasi satu ke banyak gitu ya satu ke banyak jadi harapannya adalah teman-teman bisa tahu ya bagaimana cara membuat restful api yang baik ya menggunakan Nes ini yuk kita lanjutkan sekarang kita bahas user management requirement-nya Oke data user yang akan kita buat itu tidak terlalu kompleks yang pertama ada username-nya Lalu ada password-nya Lalu ada name-nya atau namanya nah kalau teman-teman mau tambahkan Lebih Detail Ya teman-teman silakan tambahkan saja ya jadi itu tinggal teman-teman explore secara mandiri ya otodidak Jadi intinya di sini kita butuh tiga data aja yang wajib yaitu adalah user password dan juga name-nya jadi ini untuk user datanya Nah next-nya kita akan buat juga Api Api ya yang digunakan untuk manajemen data user-nya dari yang pertama nanti kita akan buat register api ya jadi ee ini untuk registrasi user-nya Lalu ada ada login user juga ya nanti nanti e untuk login data usernya Lalu ada update user ya ini untuk melakukan update data usernya Lalu ada get user ya untuk dapatin user yang saat ini sedang login Lalu ada logout user kalau misalnya usernya mau log out J nanti ini adalah 5 api yang akan kita buat untuk user managemennya selanjutnya kita bahas contakct management requirement-nya Oke untuk data kontak Nah di sini juga kita tidak akan buat terlalu kompleks ya jadi yang penting ada first name-nya ya nama depannya last name-nya nama belakang Lalu ada email dari kontaknya dan font telepon dari kontaknya kalau teman-teman misalnya mau tambahkan lebih kompleks misalnya gitu ya Ada website sosial media dan lain-lain teman-teman silakan tambahkan ya Secara otodidak jadi di sini ini adalah data minimal untuk kontak datanya Nah nanti kira-kira apa api yang akan kita buat nah ini adalah api yang akan kita buat yang pertama adalah create kontakct jadi untuk membuat kontaknya Lalu ada update kontak ya untuk mengupdate kontak yang sudah pernah kita buat Lalu ada get contakct untuk dapetin data kontak ya yang sudah kita buat Lalu ada search kontakct untuk mencari data kontaknya misalnya nanti mencari berdasarkan nama email nomor telepon dan lain-lain nah Lalu ada remove kontakct kalau kita mau menghapus data kontaknya Nah jadi ini adalah api api yang akan kita buat ya untuk kontak api sekarang kita bahas address management requirement-nya Oke untuk data address kira-kira ini kan nanti data address itu milih kontak ya jadi kontak address itu datanya kurang lebih seperti ini jadi ada street-nya jalannya di mana gitu ya city-nya kota provinsinya lalu e negara atau country lalu yang terakhir adalah Postal cod-nya jadi ini adalah data untuk addressnya kalau teman-teman mau Tambahkan lagi ya silakan ditambahkan aja oke next-nya api yang akan kita buat ya untuk ee address manajemennya itu ini ya ada sekitar lima juga ya di sini ada create address untuk membuat data address-nya Lalu ada update address ya untuk update data address-nya Lalu ada get address ya untuk dapatin data address yang sudah kita buat ya Lalu ada list address untuk dapatin semua data address berdasarkan kontak nanti ya yang kita pilih Lalu ada remove address untuk menghapus data address yang sudah kita buat jadi ini adalah adalah kira-kira lima e api ya untuk address yang akan kita buat Oke sekarang kita akan langsung aja ya membuat projectnya menggunakan Nes jadi seperti biasa kita akan buat projectnya terlebih dahulu ya Nah di sini cara buat projectnya di sini kita bisa lihat gunakan Nes new lalu di sini nama projectnya contohnya di sini belajar nestgs restful api Oke kita akan coba buat jadi di sini kita gunakan printah Nest ya new belajar Oke Sori eh saya mau pindah dulu ke folder biasa saya menyimpan ya development eh Nes ya Nah di sini Nes new belajar [Tepuk tangan] nesgs respol api lalu di sini package managernya silakan teman-teman pilih Ya saya akan pilih yang e NPM ya enter nah selesai ini tunggu sampai ee selesai ya dependensinya di eh download Oke selanjutnya Ya sambil kita Nunggu nah ada banyak library yang akan kita gunakan ya dari yang pertama kita akan e gunakan zod ya Jadi ini untuk validation-nya J nanti validation-nya kita akan menggunakan zod Oke download project-nya sepertinya sudah selesai ya kita akan masuk ke belajar nestgs resp api Oke jadi kita instal dulu eh zot nah selesai Nah selanjutnya setelah zot kita akan instal Prisma ya untuk database-nya nah di mana di sini e di dependensi e Dev eh NPM install save Dep Prisma Oke selanjutnya setelah Prisma kita akan instal Nest winstone untuk loggernya selanjutnya kita akan instal backrip ya untuk nanti melakukan hing password-nya eh selain backrip kita juga akan install development Dependency untuk types-nya NPM install backrip ya lalu NPM install minus minus save Dep add types backrip Oke selanjutnya kita akan instal UU ID ya nanti untuk buat tokennya kita akan gunakan new ID ya token untuk eh ininya ya session management-nya jadi kita akan install uuid dan juga development Dependency untuk types-nya oke yang terakhir kita akan instal config modu ya Nah ini untuk config eh service-nya ya agar kita bisa gunakan yang bawaan dari eh n nya jadi kita gunakan NPM install nestjs config Oke selesai ya jadi semua dependeny sudah kita instal Ya next-nya teman-teman silakan buka menggunakan text editor atau ide yang biasa teman-teman gunakan ya Misalnya Visual Studio code atau Webstore Oke Sebelum kita mulai praktik ya kita akan buat api spec terlebih dahulu ya agar dari bwa kita tahu kira-kira mau bikin api-nya Seperti apa Nah dimulai dari user api-nya jadi semua user management api kita akan buat api spc-nya terlebih dahulu Oke kita akan buat di sini ya dalam dokumentasi kita akan bikin directory dulu namanya adalah doc l kita akan bikin dalam bentuk markdown ya jadi user.md atau markdown Oke kita akan buat di sini berarti adalah user api jadi nanti ada l I yang akan kita buat yang pertama register user ya setelah itu adalah login user get user lalu update user dan yang terakhir adalah log out user ya Jadi ada 5 api yang akan kita buat Oke pertama kita bahas endpointnya kira-kira apa nah misalnya di sini untuk register kita pakainya api eh sori ini http metodenya post misalnya ya lalu api users ya lalu eh kita perlu Tentukan juga kalau dia ada request body gitu ya Nah kira-kira apa Lalu ada respon body ya Nah kira-kira apa juga oke untuk request body-nya simpel ya Jadi tadi kan kita butuhnya adalah username yang pertama Ya jadi di sini username-nya misalnya Kedi gitu ya lalu di sini ee password-nya misalnya ya rahasia misalnya lalu di sini ada dan name-nya jadi kan cuma tiga data ya yang EE wajib di awal kita bahas untuk responsnya Nah kita akan bikin standarisasi ya jadi semua respon itu kita penginnya nanti dia disimpan di dalam atribut data misalnya seperti itu ya nanti di sini responsnya entah itu nanti user atau nanti di api kontak ataupun di api address misalnya Nah di sini contohnya khusus untuk api user ya Nah di sini kita mau nanti kalau sukses kita balikan data suksesnya ya username-nya apa misalnya lalu eh name-nya password-nya enggak mungkin kita kembalikan ya Nah jadi di sini contohnya Echo kanedi nah Selain itu biasanya kalau respon itu kan diberiahu ya kalau ada respon error ya ini kita bilang respon success ya Nah kita bilang kalau ada respon error nah ini kita copy pasaste nah ini error atau fail ya Nah contohnya kalau fail Nah kita mau mau bikin standarisasi juga nah kita mau nanti dia bentuknya ada atribut errors misalnya ya seperti ini nah detailnya apa Nah ini detailnya bebas misalnya ya jadi di sini eh contohnya teman-teman kalau mau pakai string silakan misalnya ya Eh username misalnya Eh ini misalnya eh username already registered misalnya ya jadi dia udah terdaftar misalnya seperti itu ataupun yang lainnya teman-teman kalau mau lebih detail juga silakan ya tinggal nanti di e ekspor secara autodedak Oke ini udah ya saya akan copy ya biar lebih cepat ini untuk registrasi berarti sudah selesai Nah next-nya kita untuk login nah ini kita paste untuk login kurang lebih Nanti api-nya kita mau di slash login misalnya ya Nah nanti kalau untuk login kita cuma butuh username dan juga password responsnya apa Nah ini yang respons-nya ya Nah setelah dia berhasil login Nah kita akan berikan session id-nya nah Adinya misalnya kita bikin dalam bentuk token ya Jadi ada username ada name lalu kita bilang ini adalah token nah seperti ini ini adalah session ID generated-nya ya nanti e random Nah nanti ya kalau misalnya gagal ya bebas ya Misalnya di sini username or password is wrong Oke artinya nanti setelah dia berhasil login nanti session ID ini harus digunakan kan Ya di mana pun Oke selanjutnya eh get user misalnya ya Nah kita akan coba ini akan copy lagi untuk get user-nya misalnya nah kita mau pakai yang api-nya adalah get ya lalu di sini kita pakainya misalnya current tidak butuh request body ya kalau untuk get e paling responsnya aja Nah kita ee bebas sih ya mau dikasih token atau tidak nah nah misalnya saya tidak kasih token aja nah respon bodynya misalnya kalau yang gagal misal saja dia Oh ya saya lupa di sini kalau get itu kan berarti kan kita harus tahu ya request Ini dari siapa gitu ya Nah kita perlu dapetin tokennya jadi yang session ID ini yang Token itu nanti Saat request get-nya itu harus dikirim jadi di sini endpointnya ini dia juga harus ngirim yang namanya head ya headers headersnya itu misalnya x e atau pakai yang auutorization aja deh ya autorization ini adalah tokennya jadi wajib e mengirim token e di header authorization misalnya ya Nah selanjutnya kalau misalnya dia tidak mengirim ya teman-teman Misalnya contohnya UN autoriz misalnya seperti ini Oke Nah selanjutnya untuk yang update berarti kalau yang update dat eh saya akan copy yang create Harusnya sama ya atau yang registrasi Nah selanjutnya kita akan copy ke bagian yang update Nah selanjutnya untuk yang update berarti endpoint-nya misalnya kita pakainya nah ini misal saja kita bisa parsial ya dia bisa update namanya atau bahkan bisa update password-nya jadi saya akan pakai page Jadi kalau page itu dia bisa parsial nah endpointnya saya akan samakan dengan yang e get ya jadi current jadi dia update ke dirinya sendiri Nah untuk binnya yang bisa di-update password atau juga Name tapi dua-duanya Misalnya ini opsional ya Jadi ini opsional ya E If want to change password nah ini juga opsional If want to change name jadi kalau mau ubah nama baru diisi Kalau tidak ada berarti tidak akan di ubah respons body-nya sama kan Nah kalau misalnya gagal dan lain-lain ya harusnya sih sama ya Oh ya kita lupa di sini ini ada headers-nya yang dikirim authorization nah ini ini authorization ya Misalnya token ini sudah bawaan dari http ya auutorization itu ya oke yang terakhir adalah log out ya Nah ini saya akan Cop yang update untuk yang log out misalnya kita akan pakai http-nya delete ya Nah dia ke current Juga misalnya pakai token nah dia enggak butuh request body nah responsnya ini sederhana ya Misalnya true aja gitu ya Nah bebas sih mau respon apapun ya Nah intinya dia sudah berhasil log out nah jangan lupa ya ketika logout berarti di sini tokennya harus di e hilangkan ya dari sistem Oke Sepertinya kita sudah selesai ya membuat di sini seluruh api specification untuk user management Oke kita lanjut ke api spec selanjutnya yaitu untuk kontak manajemen Oke kita akan buat di sini ya dokumen baru contakct markdown Oke jadi ini adalah contontact api spec oke Ada beberapa api yang akan kita buat yang pertama create contakct ya Nah yang kedua itu adalah ee e get contakct misalnya lalu update kakct remove contakct yang terakhir adalah search kak ya atau pencarian kontak oke kita mulai dari create endpointnya e post ya api Contacts ya Nah lalu e dia juga butuh headers ya headersnya itu tadi ya authorization Ini adalah tokennya lalu request body-nya oke dirqu body-nya nah Ini kan kontak ya ngikutin data yang e dikontak data ya Jadi yang pertama ada first name-nya Ini contohnya eeko Kurniawan misalnya Lalu ada last name-nya Lalu ada email ya Misalnya echo@example.com Lalu ada font Nah selanjutnya teman-teman kalau mau tambahkan yang lain silakan Oke untuk selanjutnya itu adalah Res spon body-nya Oke untuk respon body sama kita pakai struktur yang sama ya Jadi ada atribut data lalu kita kembalikan yang ini ya Nah ini kita balikan nah lalu selanjutnya kita beri tahu juga id-nya contohnya di sini id-nya kita nanti pakai ee number deh ya Misalnya Auto incremen misalnya dari 1 2 dan seterusnya Oke selesai ya untuk create contact kalau teman-teman mau kasih contoh respon body yang fail-nya silakan tapi intinya formatnya sama seperti yang user ya Ada atribut errors-nya oke lalu kita get contact ini saya akan copy Oke untuk get contact ya api-nya adalah get lalu di sini kita tambahkan ya di sini adalah kontak id-nya Nah jadi ini adalah kontak id-nya Nah lalu dia enggak punya request body nah responsnya juga sama harusnya ya Nah selanjutnya kita akan lanjut ke update ya Nah untuk update mungkin hampir sama ya tapi kita Ini pakainya Put ya jadi update-nya lebih ke Timpa nah ini jadi Kada kontak id-nya request body-nya sama ya bisa di-update semuanya nah yang penting di sini kontak id-nya yang dipilih yang mau di-update yang mana responsnya pun Harusnya sama Oke selanjutnya adalah yang remove ya Nah untuk remove di sini api-nya adalah sama ke kontak Id ini delete Ya nah tapi dia tidak punya request body dan respons-nya pun sederhana ya kita pakai e true misalnya seperti ini oke nah yang terakhir ini yang lebih kompleks itu adalah yang searchnya Oke saya paste di sini untuk search kita pakainya ke get ya nah Nah jadi di sini ada ee search-nya kira-kira detailnya mau seperti apa Jadi ada headers ya Nah lalu enggak ada request body ya tapi adanya respon Oke tapi ya untuk search itu kan kita biasanya nyari mungkin berdasarkan nama email nomor handphone gitu ya nah jadi kita itu akan kirim dalam query parameter jadi di sini ada query params ya Nah query parms-nya apa aja misalnya yang pertama ada name Ini tipenya adalah string gitu ya ya ini bisa nyari ke kakct first name ya or contact last name dan ini adalah opsional boleh ada boleh tidak Nah selanjutnya e font ya Ini juga string ini adalah font ya font ya Nah ini ini maksudnya kontak font nah ini juga opsional jadi boleh ada boleh tidak lalu email string email Dan ini juga opsional boleh ada boleh tidak nah lalu Nah kan kontak itu bisa banyak ya bisa mungkin bahkan nyampai ratusan gitu ya Nah biar e enggak harus semuanya kita tampilkan kita bisa tambahin pagination ya jadi misalnya ini ada page ya jadi page-nya yang mau dilihat berapa contohnya dari nomor 1 2 dan seterusnya jadi ini number kalau tidak diisi ya Kita kasih defaultnya sat nah Lalu ada size ya per halaman itu mau mengembalikan kan Berapa banyak Data ini juga number kita kasih default kalau enggak dikirim kita kasih 10 tapi kalau mau diubah silakan nah oke respons ya sekarang Nah jadi bukan lagi objek ya melainkan Aray nah seperti ini jadi kalau nanti ada dua atau tiga ya tinggal seperti ini ya Nah ini contohnya data yang kedua misal seperti ini nah tapi kadang-kadang kalau kita bikin eh pagation Ya itu kan kita butuh informasi tambahannya kayak total datanya berapa total page-nya berapa dan sebagainya Nah kita akan tambahkan di sini selain data ada atribut yang namanya paging ya Nah di paging ini kita kasih informasi kira-kira contohnya current page-nya page saat ini berapa yang lagi dibuka contohnya page-nya sat gitu ya Lalu ada total page-nya Total page-nya ada berapa sih ya dari database misalnya nah misalnya ada 10 lalu size-nya per eh ini ya per page-nya ada berapa size-nya contohnya 10 seperti itu Jadi kita kembalikan eh informasi ininya ya nah jadi seperti ini kayaknya udah cukup ya nah jadi kita sudah selesai membuat api Spec untuk kontak manajemennya Oke api spec yang terakhir yang akan kita buat adalah address ya api spec Oke kita akan buat di sini address oke Ada beberapa api spek yang akan kita buat ya Jadi sama juga ya dari yang pertama itu adalah create address lalu get address update [Tepuk tangan] address remove address ya lalu list addresses Oke kita mulai dari yang get endpoint-nya misalnya nanti ke e Sorry create ya ini Post e api Contacts ya nanti kakct ID berapa Nah lalu di sini ada addressesnya Jadi kita mau bikin address ke kontak yang kita pilih sama ini ada headers-nya autorization Misalnya ini tokennya nah Lalu ada request body Oke jadi ini e sesuaikan dengan data address ya Jadi ada Street di sini misalnya Jalan contoh Lalu ada City Lalu ada Province Lalu ada country ya Lalu ada Postal code Oke misal saja eh yang wajib misal aja nanti kita buatnya country sama Postal code misalnya gitu ya Ya nanti teman-teman kasih eh ini aja informasi di sini misalnya opsional gitu ya Ini juga opsional ini opsional nah seperti ini Oke respons-nya kita buat respons body sama ya kita bikin dalam struktur data di sini lalu kita akan copy hasilnya yang ini Nah selanjutnya Jangan lupa kita balikkan id-nya Juga misalnya kita pakai auto increment nanti Oke selesai ya untuk create address-nya saya akan copy sekarang yang get address-nya Nah untuk get address-nya kita point-nya pakai get dan ini kita tambahkan di belakangnya adalah address id-nya dan ini enggak butuh lagi request-nya ya Jadi tinggal langsung respons-nya oke dan selanjutnya yang update ini hampir sama ya bedanya di belakang sini ada address ID yang mau kita update dan juga Ini pakainya Put ya jadi sistemnya ditimpa semuanya nah selesai respon dan request-nya juga sama oke yang terakhir Oh sorry e yang selanjutnya remove ya Nah ini kita paste Ini pakainya delete Ya lalu dia ada address ID nah ini dia enggak pakai request body dan Ini responsnya sederhana tinggal pakai true saja seperti ini oke yang terakhir nah baru yang list address Nah kita enggak akan pakai pencarian lagi jadi pokoknya langsung aja gu ya jadi semua address untuk kontak ini karena kan kita sudah pilih kontak ini ya jadi Ini pakainya get langsung addresses ya Nah kita balikkan semuanya enggak perlu ada request body langsung respon body Jadi kalau dia punya du t dan seterusnya kita langsung balikan aja seluruh datanya seperti ini ini satu Misalnya ini nomor duanya Nah jadi sekarang kita sudah selesai ya membuat api spec ya untuk address manajemennya jadi kita selesai sudah ya membuat semua api spek-nya Nah baru kita bisa mulai mengerjakan projectnya Oke sekarang kita akan set up database terlebih dahulu oke sekarang saya akan menggunakan database my SQL ya Nah di sini kita akan buat nama database-nya adalah belajar nesgs restful api Jadi silakan teman-teman buat database terlebih dahulu Oke saya akan masuk ke my SQL ya lalu saya akan bikin Create database belajar nesgs respol api selesai saya akan copy use dan kita belum punya tabel apapun Oke selanjutnya setelah kita buat databas-nya Nah kita akan set up prismanya dulu ya Jadi kita gunakan pintta npx Prisma Init Oke kita akan coba Set up ya menggunakan Terminal npx Prisma Init Oke selesai Nah kita lihat di sini ada folder Prisma ada skemanya lalu di sini data source-nya kita ganti jadi myql nah lalu di sini database e url-nya kita buka di environment file dyv nah ini kita ganti jadi MySQL ini pas password yang saya [Musik] gunakan 3306 port-nya database-nya belajar nestjs respol Api oke selesai Sekarang kita sudah sukses ya melakukan set up Nah next-nya kita akan coba mulai bikin semua skema untuk data kontak manajemen ini Oke kita akan buat user model ya di prismanya Oke di skema prismanya kita akan buat di sini adalah user modelnya jadi kita buat model e user nah yang pertama dia punya username nah ini tipenya misalnya string ya Nah lalu di sini e dia adalah Primary Key jadi ID lalu di database-nya saya akan gunakan farchar dan maksimal panjangnya 100 nah lalu password ini string juga nah ini di database-nya farchar 100 juga nah lalu dia punya name ya string juga di database-nya dia pakai varcher Juga misalnya 100 Oke Apakah ada yang kurang Nah tadi kan kita buat ya E api-nya itu setelah dia login nah dia dapetin tokennya nah misal saja tokennya akan kita simpan di database ya Jadi kita simpan tokennya di database jadi di sini kita buat token ya dia string Tapi dia bisa nol Ya kalau dia belum login kan dia enggak punya token nah lalu di DB eh kita set parchar maksimal token misalnya 100 karena kita nanti akan buat tokennya dalam bentuk UU ID nah lalu Nama tabelnya misalnya users Oke selesai Nah kita akan buat sekarang eh migration-nya e npx Prisma myrate Dev ya nama-nama gisnya Misalnya create tabel users Oke selesai ya Nah kita akan coba cek Sekarang show tables Nah sudah ada ya select Bintang from users nah belum ada udah tapi tabelnya sudah ada berarti sekarang kita sudah selesai membuat skema untuk usernya sekarang kita buat untuk kontak modelnya Oke untuk kontak model ya kita buat Bu Langsung model kontak ya Nah lalu di sini dia ada ID kita mau id-nya integer aja dan dia adalah ID dan e dia itu defaultnya auto increment ya Jadi kita mau dia auto increment lalu eh sor first name string nah ini di database-nya kita pakai varchar misalnya 100 ya lalu dia ada last name kita coba di sini Selain itu ada email nah misal Aja emailnya dia boleh kosong ya Oh ya tadi last name juga boleh kosong DB varchar 100 juga eh lalu dia ada font dia juga string dan bisa kosong di database-nya farchar misal saja 20 ya tidak terlalu panjang Nah selanjutnya di sini kontak itu kan milik ee user ya jadi ini saya perkecil dulu nah dia itu jadi harusnya milik user jadi kita bikin relasi satu user punya banyak kontak jadi di sini ya dia akan punya relasi ke user ya lalu ini tipenya adalah user lalu add relation Nah di sini eh fields-nya Ya untuk relasinya itu dia pakai fields-nya nanti username ya user Oh ya di sini kita belum bikin username ya Jadi ini username ini string Jadi ini nanti sebagai forign key ke usernya ini berarti sama DB farchar 100 jadi ini username lalu referencenya ke tabel modelnya model user maksudnya itu pakai yang username juga seperti ini ya Nah berarti di sini kita buat k ya dan I adalah kontak Nah seperti ini Oke ini kita buat eh map nama tabelnya adalah konaks selesai jadi sekarang kita sudah menambahkan untuk kontaknya ya kita akan coba generate kita generate migration-nya create tabel contact selesai Nah kita akan coba cek show table Nah sudah ada kontak ya kita Describe kaks Nah sudah selesai Berarti kita sudah selesai ya membuat model untuk kontaknya oke yang terakhir yang akan kita buat ya untuk modelnya adalah address Oke kita akan langsung buat di sini jadi kita buat model address sama ya dia punya ID tipenya adalah integer default-nya juga dia auto increment nah lalu dia punya Street ya Nah ini string bisa N0 DB farchar 100 misalnya Oh ya kalau streetnya misalnya bisa lebih panjang ya Misalnya 255 nah lalu dia punya City ini 100 lalu punya Province ya ini 100 Juga misalnya nah lalu dia punya coun nah tapi misalnya dia tidak boleh N0 lalu dia punya Postal code ya ini misalnya 10 aja ini juga tidak boleh N0 Nah selanjutnya addes ini kan milik kontak ya jadi di sini kita tambahkan kontak ID tipenya adalah integer ya ini e nanti dia sebagai e forign key ya ke si kontak ini jadi di sini sekarang kita akan buat di sini saya akan buat dulu addresses misalnya address ya Nah lalu di sini kita buat kontak kontak Nah ini adalah relation e fields-nya di kontak ID ya lalu reference-nya dia ke ID seperti ini Oke selesai Nah sekarang kita tambahkan nama tabelnya adalah addresses oke selesai kita akan generate migration-nya create tabel address selesai Nah kita coba cek ya di database-nya sudah ada Describe addresses Nah sudah selesai ya semua tabelnya jadi sekarang kita sudah selesai membuat semua model ya di prismanya Nah selanjutnya teman-teman bisa generate ya code e Prisma client-nya ya E npx misalnya generate Oh sorry npx Prisma Maksudnya ya npx Prisma generate selesai Nah sekarang Prisma knya sudah ready Nah kita bisa mulai masuk e melanjutkan si projectnya Oke kita akan set up Project lebih dahulu ya Jadi kita akan lakukan seremoni untuk integrasi semua e modul yang sudah kita tambahkan oke yang pertama kita akan hapus app controller test app controller dan juga app service ya karena kita tidak akan gunakan semuanya ini jadi di projeknya yang bagian app ini semua kita akan hapus ya yang e testing controller dan juga service ya kita Sisakan yang modul saja ini kita hapus Berarti di modulnya ini perlu kita perbaiki ini tidak ada berarti ini tidak ada dan kita hapus semua importnya Oke kita akan buat ya semuanya untuk melakukan seremoni kayak integrasi dengan prisma windnstone gitu ya dan lain-lain kita akan buat dalam satu buah modul karena itu semuanya konfigurasi dari e library yang kita gunakan kita akan buat modul namanya adalah common modu ya modul ini nanti akan digunakan untuk menyimpan modul seperti Prisma loging dan lain-lain Nah kita akan gunakan n generate modul common Oke kita akan coba langsung buat Oke kita buka Terminal Nest generate modu common ya Nah seperti ini Oke selesai nah ini kita punya common modu nah isinya masih kosong ya dan di app modul-nya sudah ada import common modul-nya Oke jadi kita akan semua tambahkan di sini ya di bagian comon ini Oke yang pertama kita akan set up untuk winstone-nya ya jadi di sini kita akan tambahkan eh winstone ya Nah lalu di sini for root nah ini juga sama ya Eh formatnya dan lain-lain Nah kita akan coba setup nah command modu ini kita juga akan jadikan sebagai Global biar nanti di semua modul seperti di modul user modul kontak modul address itu tidak perlu kita eh gunakan lagi ya tidak perlu kita import lagi jadi kita set sebagai Global Oke kita akan coba Oke jadi ini kita set sebagai Global ya Nah lalu kita tambahkan di sini eh import ya jadi modul pertama yang akan kita import yaitu adalah winstone modu ya lalu kita buat forot Nah di sini option-nya e formatnya misalnya saya mau winstone sorry winstone oke belum kita import ya di atas import from eh sorry s Winston from winstone nah ini winstone titik eh format.tik json Nah lalu di sini transport-nya nah kita mau transport-nya itu dia pakai new eh windnstone transport kita mau yang konsol ya oke selesai Nah kita sudah set up untuk windnstone-nya Nah next-nya kita akan tambahkan winstone sebagai Global logger-nya jadi di app-nya kita akan tambahkan ya Eh winstone modul Nest provider ya sebagai Global loggernya Oke kita akan tambahkan jadi di main TS Nah di sini kita akan coba eh ambil Logger sama dengan eh app tiget ya lalu di sini kita masukkan sebagai Sorry eh winstone modu Nest provider ya Nah lalu app use logernya yang loger ini selesai Oke next-nya kita akan set up eh config modu ya Nah di sini kita tambahkan config module for root Nah di sini juga kita set dia sebagai Global modu juga ya biar nanti di mana-mana bisa digunakan Oke kita masuk ke common modu nah ini kita tambahkan saya tambahkan misalnya ee di bawahnya aja config module for root gitu ya Nah is globalnya true Oke selesai ya Nah selanjutnya kita akan set up yang prismananya Tapi sebelumnya kita akan buat dulu servis untuk Prisma service-nya jadi nanti eh modul-modul seperti user ya Eh kontak address itu pakainya adalah Prisma service-nya Nah di sini Saya tidak akan gunakan yang eh generate Ya saya akan buat manual aja karena simpel kita cukup di sini bikin eh Prisma titik servis.ts oke isinya seperti apa isinya kurang lebih seperti ini jadi kita buat ya di sini Prisma service dia extend Prisma client lalu di sini kita tambahkan Prisma client option ya lalu di sini eh string nah ini dari mana ini bawaan dari prisma clientnya ya Jadi kita tambahkan seperti ini lalu kita akan implement juga on module Init ya Jadi nanti ketika inisialisasi kita mau set up log-nya juga sekalian Nah di sini kita akan inject juga sih Eh winstone loggernya Oke kita akan coba oke di sini kita buat eh export clelas Prisma service ya lalu extend Prisma client nah ini lalu Prisma client option ini string Oke selesai nah ini e importnya kita belum ya jadi import Prisma Sorry Prisma client Prom Prisma client nah lalu Prisma juga ya Nah seperti ini Oke Nah selanjutnya Ee Kita kita bikin Constructor lalu kita bikin private di sini read only misalnya loger ya ini adalah Logger dan ini diambil oke bukan dari ini tapi diambil dari winstone nah lalu di sini kita inject ya inject menggunakan winstone modu provider nah seperti ini Oke saat kita manggil supernya Nah kita setup langsung ee e log-nya ya jadi di sini kita bisa tambahkan e objek ini objek log log-nya mau apa aja Nah di sini kita mau log semuanya gitu ya emit Misalnya dari eh emit-nya ke event ya Sorry e lalu level yang mau di log yang dikirim misalnya info gitu ya Jadi kita mau info selain info juga War selain warn juga error selain error juga ada query-nya ya query-nya nah jadi semua level di sini kita mau log Nah nanti log-nya dikirim ke mana kita akan kirim ke loger punya si winstone ini Oh ya ini kita lupa tambahkan injectable Oke selesai Nah sekarang kita akan set up yang inisialisasi si Prisma service-nya jadi on modu Init Nah kita akan registrasikan semua yang query yang info yang warn yang error itu ke dalam SI winstone loggernya Oke kita akan coba ya di sini kita akan tambahkan implement ya on modu Init kita akan implement on modu init-nya nah di bawah sini ya kita akan coba E implementasi semua event-nya ya jadi on e Dis on Nah eventnya apa event-nya yang pertama misalnya kalau dia eventnya info gitu ya Nah kalau info eventnya kita mau ke manain Nah di sini misalnya E ke loger info juga ya jadi info ke sini nah lalu kita akan copy paste kalau yang W ini juga ke W kalau yang yang error kita mau ke error juga nah yang terakhir kalau yang query Nah kita mau ke mana nih contohnya Saya mau ke info ya Ya udah nah selesai kita sudah set up berarti yang Prisma service-nya Nah next-nya kita akan buat validation service Nah jadi ini nanti untuk validation-nya ya Eh diintegrasikan dengan zot jadi kita akan bikin validation service ya Nah di sini kita bikin validate dan ini inject table juga oke kita langsung buat aja jadi di sini saya akan buat validation.sice.ts export class validation service nah ini sama injectable ya Nah lalu kita akan buat validate ini adalah generic lalu dia zot type ini zot type ini juga generic lalu datanya apa yang mau kita validasi dan returnnya adalah data yang selesai divalidasi jadi ini kita tinggal return e zottype.ps data selesai jadi ini lumayan simpel Oke selanjutnya berarti kita tinggal registrasikan semua service yang sudah kita buat itu ke command modulnya jadi simpel banget ya tinggal di command modu kita tambahkan providersnya yaitu Prisma service dan juga validation service Nah karena Prisma service ini nanti akan dipakai di semua modul termasuk validation service ya Nah kita akan expsort si Prisma service dan juga validation service-nya Oke kita akan tambahkan Oke di command module kita tambahkan di sini provider ya jadi provider-nya adalah Prisma service dan juga validation service nah termasuk yang eksortnya ini juga sama nah selesai jadi kita sekarang Sudah set up ya untuk projectnya semuanya udah siap Nah nextnya kita akan coba buat langsung ke api-nya ya dimulai dari user Api oke api pertama yang akan kita buat adalah registrasi user api Oke kita langsung aja ya Jadi pertama yang akan kita buat adalah kita akan buat modulnya terlebih dahulu ya untuk modul usernya saya akan bikin folder namanya user Nah kita akan simpan semua ee untuk user Manager di user ini Nah pertama yang kita buat berarti adalah user timodul. tabescript ya Nah kita buat di sini modulnya terlebih dahulu Nah nanti setelah modul kita bikin service dan juga controllernya di modul Ini jadi yang pertama kita bikin dulu ya export e class user modu ya Nah selanjutnya di sini seperti biasa kita tambahkan modul Oke selesai Nah next-nya berarti kita akan buat service-nya dulu ya Jadi untuk semua logic aplikasi kita akan simpan di user service jadi kita buat user service TS export class user service nah ini injectable ya nah selesai Nah kita akan registrasikan di sini di dalam Modul ya di sini provider-nya berarti user service Oke Setelah itu kita akan buat controllernya ya nah user controller TS export class user controller nah ini adalah controller Nah nanti controller ini dia depannya adalah api/ users selesai kita tambahkan di user module di sini Oke selanjutnya jangan lupa user mod ini kita akan import ke application modu jadi di sini kita akan import user module Oke selesai ya Nah next-nya kita akan coba ya berarti dimulai dari yang pertama kita akan fokus di user service Nah jadi kita akan buat di sini eh logic untuk register ya jadi register Nah berarti di sini ada request-nya apa dan respons-nya apa nah berarti yang perlu kita lakukan sekarang adalah bikin modelnya Nah karena model ini dia itu bisa Cross modu ya Jadi bisa dipakai di mana-mana gitu ya jadi kita tidak akan simpan modelnya di user gitu ya jadi kita akan bikin satu eh directory baru namanya adalah model misalnya Nah di sini kita akan buat di sini eh user.model.ts ya oke yang pertama berarti modelnya itu kita akan buat model untuk user ya jadi contohnya Ini kan registrasi ya registrasi itu berarti kita bikin export kass eh register user ya user request-nya apa gitu ya lalu kan nanti ada export class register eh user respon Ya respons-nya apa Nah cuma kalau kita perhatikan dari api-nya itu hampir semua rata-rata sama ya jadi responsnya itu sama seperti ini user ada name ini juga user ada name tapi plus ada tokennya artinya tokennya bisa ada bisa tidak ini juga sama user dan name gitu ya jadi dibanding kita bikin tiap api nanti bikin beda-beda gitu ya Eh tipenya kita samakan aja karena hampir semuanya sama jadi kita buat di user model ini namanya adalah user respon nah nah seperti ini Oke jadi untuk registrasi tadi kan butuhnya username ya Ini tipenya string Lalu ada eh name password juga ya password string nah lalu dia ada name tipenya string juga seperti ini sori ini tidak butuh Oke selanjutnya untuk user respon nah ini butuhnya yang pertama username ini string nah lalu name ya lalu string nah lalu dia kan tadi di beberapa tempat dia ada yang butuh token Ya nah tapi ingat ini tokennya itu tidak wajib gitu ya eah jadi tokennya kita kasih tanda tanya seperti ini jadi tidak wajib ya karena di beberapa respons itu memang tidak butuh token Oke selesai kita sudah bikin ya untuk register user dan juga user respons-nya jadi kita sekarang masuk ke user service jadi registrasi di sini nah ini kita buat semuanya dalam asing aja ya ya jadi biar ee semuanya ee dalam bentuk asing oke di sini registrasi berarti dia ada request-nya tadi ya request-nya itu adalah eh register user request Lalu ada respons-nya itu adalah promise ya ini adalah user respon ini kita return ke N0 dulu oke selesai Nah sekarang kita akan coba implementasi logicnya tapi setiap kali itu data kita masuk ya data masuk ke bisnis logic bagian usernya yang paling penting adalah kita harus lakukan yang namanya validasi terlebih dahulu jadi jangan sampai tidak divalidasi jadi di sini kita akan butuh Constructor eh private validation service ya validation service Ini validation service dari e e kelassas yang kita buat lalu kita akan tambahkan juga Logger ya jadi private Logger ini dari winstone ini kita inject menggunakan winstone modul provider nah lalu eh udah misalnya kita Oh sori Prisma ya kita butuh Prisma private Prisma service Prisma service Oke Nah di sini misalnya tiap ada request kita akan eh log ya log info misalnya eh register new user ya lalu di sini kita tambahkan Oh ya ini harusnya back tick ya kita tambahkan json stringify request-nya Apa jadi setiap ada request masuk kita log dulu ya biar kelihatan nanti Oke selanjutnya berarti yang pertama kita harus validasi dulu ya Jadi kita akan eh bikin Val tion service tik validate Nah kita perlu skemanya dulu di sini ya skema untuk validasinya baru di sini request-nya skemanya apa Nah kita akan buat di dalam sebuah class namanya user validation TS Oke jadi kita di sini export CL user validation Oke kita akan bikin skema untuk validation-nya ya Nah ini kita bikin dalam statik aja jadi statik e read only yang pertama reg ini skemanya ini adalah zot type ya Nah skemanya adalah z. object dia itu ada username eah ini Z ini string ya Eh minimalnya satu ya Eh maksimalnya 100 samakan dengan skemanya nah lalu di sini ada password Z string minimalnya juga 1 maksimalnya 100 Lalu ada name Z string juga ada minimalnya 1 dan maksimalnya 100 Oke selesai jadi ini kita bikin user validation-nya jadi di sini kita pakai user validation titik register ya skemanya Oke ini kita simpan di eh register request sama dengan ini errornya kenapa Oh enggak enggak error ya Oke selanjutnya Nah ini kan belum dipakai ya Nah sekarang kita akan coba gunakan Oke jadi yang pertama yang kita lakukan adalah kita cek dulu ke database ya apakah data di database-nya sudah ada atau belum untuk username itu Nah kalau misalnya sudah ada ya kita bilang kalau ini sudah ada Jadi kita bilang cons misalnya E total user with same username sama pr S service user count ya jumlah eh where username-nya dari register request username ini ini harusnya register user request ya oke Nah kalau misalnya totalnya itu tidak sama dengan 0 artinya sudah ada ya yang e melakukan registrasi dengan username yang sama Nah kita akan throw new http Exception ya bawaan dari Nes Oh di sini errornya misalnya username already exist atau already registered silakan lalu kita balikkan satus cod-nya 400 oke nah kalau misalnya sudah tidak ada artinya sudah valid ya Nah baru kita akan coba registrasikan tapi yang pertama kita harus konversi dulu sih password-nya ya jadi register user request password-nya kita ganti ya E menjadi backrip nah ini kita import dulu import bintang s backrip from backrip nah lalu kita eh wait backrip Hash Nah di sini register user request password dan kompleksitasnya 10 Oke setelah itu baru ya kita akan buat di sini user sama dengan Wat eh backrip eh sorry kok backp sih Eh Prisma service titik user Ti create ya Nah di sini kita akan create data si register requestnya selesai Nah sekarang kita tinggal konversi ya dari menuju user respon jadi di sini username-nya kita ambil dari user username lalu name-nya kita ambil dari user name lalu tokennya enggak butuh ya kita enggak butuh token di sini oke selesai ya Nah selanjutnya kita lanjut berarti ke controllernya oke di sini kita akan e tambahkan kstruor DII ini misalnya constructornya kita butuh adalah private user service berarti ya ini user service Oke berarti di sini kita butuh adalah register ya ini saya set asing juga nah ini respons-nya nah jadi di sini eh kita kan butuh ini ya butuh yang tadi itu kita punya spesifikasi ya jadi semuanya itu selalu ada data di ini ya Jadi kita akan bikin di sini misalnya E web model TS ya Nah di sini jadi di sini export class misalnya web response ya ini adalah generic nah ini data t seperti ini Nah nanti dia bisa errors juga ya jadi di sini ada errors ini adalah string Nah nanti ada pagination juga ya tapi untuk pagination nanti kita bahas pas meang butuh aja Oke kita Cukup sekian aja Nah berarti di sini berarti dia balikannya adalah eh sori promise maksudnya ini e web response dan ini user response nah oke lalu di sini dia pakainya post ya Nah lalu kita akan e lakukan jadi Oh ya sor kita tambah bahkan di sini adalah request-nya ini adalah register user request ini dari body ya oke Nah selanjutnya berarti di sini kita akan Panggil e result sama service titik e register ya ini untuk request-nya tambahkan wait nah Lalu setelah sukses ya tinggal returnkan Nah di sini ada data dan eh result-nya Oh ya Sorry di sini harusnya yang ini errors itu opsional Ya kita tambahkan data juga opsional ya Bisa aja kan datanya tidak ada kalau errors ya nah selesai seperti ini sekarang kita akan buat unit test-nya ya Nah cuma di sini kita akan Fokusnya ke integration test Ya nah tapi teman-teman perlu modifikasi contohnya default-nya kan dia menggunakan config ini ya Jess toend Nah kita tidak akan pakai ini jadi saya ini akan hapus ya lalu di sini Ee Kita akan ganti ya jadi dari end to end jadi spek biasa jadi kita akan eh rename ini nah Nama file-nya saya akan seperti ini ya jadi app e spec.ts nah lalu kita perlu edit di dalam eh package gestion-nya jadi di sini default-nya kalau kita running test dia kan eh keluarnya Jess aja Nah jadi ini yang end to end test kita akan hapus ya jadi di default-nya yang test itu kita jadikan dia end to end test Nah tapi kita perlu E modifikasi di bagian bawah itu ada Jess jadi default-nya itu dia e hanya akan baca directory-nya dari source ya Nah kita ganti ya jadi dia directtorynya dari tes karena kan semuanya kita pindahkan ke tes jadi unit testnya kita akan pindahkan semuanya ke tes oke kita akan coba dulu ya apakah ini jalan atau tidak coba saya jalankan Oke Sor Ops Sorry Oh ini enggak mau jalan ya kita coba running pakai Terminal NPM e Run test Nah ini ada yang error Oh di package jnya sepertinya ada yang error saya Coba perbaiki dulu Line 20 Oh ini ada error Ya sepertinya Oh ya ini ada koma satu saya hapus nah selesai kita coba lagi Oke sepertinya sudah benar ya Nah ini error karena memang tidak ada Hello world Oke kita coba E running di sini nah sudah benar Oke kita akan e fokus berarti ya ini tidak butuh Memang karena tidak ada Hello world lagi di sini jadi teman-teman bisa Hapus yang ini ya Nah kita akan kan eh rename aja ini jadi kita akan rename Jadi yang pertama adalah eh user spec test ya Nah di sini berarti kita hapus Nah kita akan fokus di sini berarti bikin eh unit test untuk kontak e sorryi user maksud saya user controller oke yang pertama berarti kita bikin lagi Describe itu yang ke post ya ke api users Oke jadi sekarang kita akan buat it Nah kita akan bikin yang contoh yang error dulu ya yaitu validation error jadi di sini kita akan bikin should ya should eh should be rejected ya Eh if request is invalid contohnya ya Jadi kita akan bikin eh respon sama dengan di sini wait request dari app.g http server lalu dia ke post ya api users lalu kita send data yang tidak validnya jadi username-nya contohnya kosong lalu password-nya juga kosong lalu name-nya juga kosong ya Nah lalu selanjutnya berarti di sini expect Kalau responsnya status itu to be harus 400 ya b request lalu expect respon nanti dia ada body ada errors ya itu to be define harus ada oke selesai kita coba running nah ketika di Running ya dia errornya itu sepertinya tidak sesuai dengan ekspektasi kita ya Nah kita cek nah dapatnya 500 Kenapa 500 gitu ya karena di sini problemnya adalah kita belum bikin Exception filter jadi defaultnya kalau terjadi error seperti zod error dan lain-lain itu memang ee balikannya otomatis dia akan jadi ini ya jadi ee apa e jadi 500 ya Nah kita pengin ganti nih semuanya nih jadi kita pengin kalau misalnya error jangan zod error gitu ya eh sori jangan 500 kita pengin sesuai gitu ya contohnya kalau zod error ya kita penginnya yang eh balikannya yang error eh 400 misalnya jadi kita perlu bikin dulu ee Exception filternya Ya saya akan bikin di common ya jadi di sini saya akan bikin sebuah file baru namanya e adalah error filter ya lalu di sini eh TS Oke kita akan bikin di sini berarti export eh class ini adalah error filter ya Nah lalu di sini kita akan implement Exception filter ya bawaan dari eh nestjs common Nah di sini nah ini seperti biasa kita tambahkan ee catch Ya error apa yang mau ditangkap Nah di sini eh zot error yang akan saya tangkap plus Saya mau tangkap juga yang http Exception biar nanti format errornya itu sesuai ya nah oke ini kita akan implement dulu nah ini Exception Oke selesai Nah sekarang kita akan coba ya eh ambil dulu respons-nya kita ambil dari host di sini switch to http get respon Oke jadi kita cek dulu kalau exceptionnya itu Instance of dari http Exception misalnya ya Nah kita mau ngapain else if misalnya exception-nya Instance of zod Error itu kita juga mau ngapain ya Nah kalau misalnya dia http Exception kita akan bikin respons-nya statusnya itu dari e Exception get status ya Nah lalu kita send Jason nah ini errors ya kita ambil dari Exception e get response seperti ini Nah kalau misalnya dia zot error ya Nah ini mau apa nih Nah ini kita ganti eh statusnya kita ganti jadi 400 kalau zot error dan errorsnya apa nah misalnya ini kita ganti jadi get eh sorry message aja atau ya balikin validation error dan sebagainya Misalnya ini validation error ya Nah kalau bukan ya Nah kita mau ngapain ya ini misalnya kita Balikinnya langsung 500 aja dan ini adalah e kita ambil dari errornya aja ya jadi Exception message oke selesai jadi kita sudah bikin yang error filternya Nah sekarang kita akan registrasikan Ya error filternya ini ke dalam SI ee Global eh Exception filter kita akan tambahkan di command module di sini jadi di sini kita akan bikin satu buah provider baru ya Nah di sini provider barunya dia provide app filter ya Nah lalu dia use class-nya adalah error filter selesai sudah ya berarti sudah masuk yang global filternya kita coba lagi jalankan Apakah sekarang sudah ee sukses atau gagal Nah Lihat sudah sukses ya Jadi sekarang responsnya sudah Ee seperti ini message-nya register eh ininya Itu gagal eh sori kebetulan kita enggak log ya nanti kita coba log di sini deh oke kita log aja deh Eh led led Logger ini adalah Logger bawaan dari winstone lalu kita ambil Logger sama F titik e get winstone modu provider kita akan coba log ya eh info dari si respon bodynya kita pengin lihat respons-nya Seperti apa kita coba running nah ini ya Eh errornya errornya eh errors validation error berarti sudah benar ya Jadi kalau zod error kita keluarnya validation error Oke sudah oke nah sekarang kita akan lanjut unit tes selanjutnya ya jadi Unites selanjutnya misalnya eh kita coba yang sukses ya kalau sukses itu berarti tinggal copy paste aja should be able to register nah seperti ini ya jadi username-nya kita harus valid contohnya tes password-nya juga tes misalnya name-nya test juga berarti ini harus 200 ya Nah lalu dia harus punya eh username eh sori data titik username itu tob harus test lalu name-nya juga harus tes ya Oke kita coba running nah ini balikannya malah 201 ya oh karena responnya ya ini sudah benar datanya ya cuma di controllernya kita tidak ganti ya ternyata jadi user controller-nya ini eh http cod-nya saya akan ganti Misalnya menjadi 200 seperti ini Oke kita coba running lagi Nah kalau di Running Ternyata kita dapat 400 ya username already exist Oke karena di database-nya belum kita hapus ya Jadi sekarang saya akan coba Hapus ya E data database-nya Jadi kita akan bikin di sini eh helper misalnya ya jadi e tes.hper.ts e export Oh ya biar lebih enak saya akan bikin di sini dalam bent untuk modul nah ini enaknya ya kalau kita pakai nes kita bisa bikin di sini tes titik modul titik TS jadi ini kita bikin export CL test modul ya ini adalah modul Nah kita akan buat di sini test service TS ya Nah export di sini CL test service nah ini kita butuh Prisma service injectable Oke kita akan tambahkan di test modu ini providers yaitu adalah test service oke nah di test service saya akan coba E bikin sebuah metode ya E asing delete user jadi nanti setelah registrasi kita coba delete user-nya Ya jadi Prisma service misalnya di sini await eh user eh delete manyi misalnya where username-nya adalah test jadi nanti setelah registrasi sukses dan sebagainya atau di awal kita coba diliat user-nya dulu jadi di user eh test di sini ya jadi di Describe di sini kita akan buat before each-nya asing nah ini kita coba eh berarti di sini kita tambahkan LED test service Ini adalah test service nah ini kita ambil test service sama dengan app tig test service Oke jangan lupa di sini ya E ini kan importnya cuma app modul kita importnya selain app modul berarti tes modul juga nah seperti ini biar tes servis-nya dia punya e datanya Nah lalu di sini berarti before is-nya itu test service-nya kita akan delete si usernya Oke sekarang kita coba running lagi nah sukses ya Jadi sekarang e di awal kita akan selalu delete si usernya nah tapi kan kita perlu simulasi juga kalau reg sudah ada jadi di sini kita akan coba registrasi lagi ya Oke ini saya akan copy should be rejected ya rejected if user name already exis gitu ya contohnya di sini kita berarti di awal harus create dulu e usernya gitu ya lalu kita akan Panggil dengan username yang sama ini harusnya berarti 400 ya karena dia harus ke errors to be define Oke berarti kita bikin juga di test service kita akan coba Bikin asing Eh create user ya await Prisma service user create data di sini ini username-nya adalah test lalu name-nya adalah test Nah password-nya ini kita perlu pakai backrip ya Jadi kita di sini import bintang s backcrip from backrip nah ini kita buat ight backp has test dan kompleksitasnya 10 Oke jadi di sini di awal kita akan Coba bikin dulu test service create user Nah pas itu dia registrasi dengan username yang sama itu harusnya kena B request ya usernya already exis kita coba running nah sukses kita cek di sini errorsnya Nah benar ya username already exist kita coba running semuanya sekarang sukses Nah sekarang kita sudah selesai ya membuat semua unit testnya untuk register api Nah di video pertama ini ya implementasinya memang sedikit panjang Karena kita perlu lakukan set up semua hal ya Tapi next-nya harusnya akan lebih e cepat ya karena semuanya sudah kita siapkan Sekarang kita akan buat login user Api oke seperti biasa kita akan fokus ke model terlebih dahulu ya Jadi kita akan ee buat modelnya untuk login jadi kita akan buat di sini export CL login user request Oke untuk login kita butuhnya cuma username ya dan juga password selesai jadi enggak butuh yang aneh-aneh Oke selanjutnya kita akan e fokus ke validation-nya ya Jadi kita akan buat yang user validation di sini kita buat Static read only e untuk login ini zot type sama Z objectek Harusnya sama sih ya untuk validasinya username dan password-nya jadi kita cukup bikin seperti ini aja oke lalu sekarang kita fokus ke bagian logic untuk loginnya kita buka user service ya di sini kita di bawah akan bikin satu meode baru asing login nah ini adalah request berarti eh login user request ya lalu respons-nya itu adalah promise di sini ini adalah user response Oke selesai kita tambahkan eh Logger misalnya info di sini eh login tadi formatnya kita samakan ya login login user atau eh biar enak formatnya kita depannya Nama service-nya misalnya user service titik login gitu ya Nah di sini kita tambahkan json stringify si request-nya biar nanti kelihatan Oke lalu di sini berarti kita pertama seperti biasa kita akan bikin E login request ini adalah login user request itu kita ambil dari validation service titik validate nah ini adalah user validation Ti login koma ini dari request Oke Nah setelah kita validasi Nah nextnya kita akan cek dulu ke database ya Apakah usernya ada atau tidak J kita ambil user-nya itu dari prisma service user Oke t ditambahkan Ait dulu lalu di sini find misalnya gitu ya Nah kita akan gunakan find e unique misalnya Nah di sini kita akan coba We username-nya itu dari login request. username nah pertanyaannya ada atau tidak nih kalau tidak ada gitu ya kalau tidak ada data usernya kita mau ngapain nah misalnya di sini kalau dia ternyata tidak ada data usernya kita akan throw new http Exception misalnya ya Nah kita balikin misalnya username or password is invalid atau wrong jadi jangan dikasih tahu apakah username-nya ada atau tidak Gitu ya jadi bagusnya pokoknya bilang aja username atau password-nya itu tidak valid nah ini misalnya 401 ya jadi dia unauthorize Nah kalau misalnya dia valid Berarti usernya ada kita cek password-nya Jadi kita akan cek misalnya nya is password valid ya caranya kita gunakan eh backrip ya compare Nah jadi compare yang pertama adalah datanya ya data password-nya jadi di sini adalah login request password lalu data yang eh hasil hing-nya dari user. password seperti ini oke lalu setelah kita dapat ya kita cek kalau ternyata dia ee e tidak valid Nah kita mau ngapain nah kita akan throw yang sama seperti ini jadi kalau tidak valid ya kita bilang aja userername atau password-nya yang tidak valid jadi kita tidak kasih tahu apakah usernya atau e passwordnya Nah kalau ternyata sudah valid Nah baru sekarang kita perlu melakukan yang namanya update jadi kita akan eh gunakan Ait misalnya this Prisma service ya user update sor update nah ini update where username-nya itu dari e login request username lalu data yang akan kita update itu cukup data tokennya ya Jadi tokennya kita mau update Nah tokennya apa tokennya kita akan generate menggunakan uuid Oke kita akan import dulu berarti di sini import ya Nah ini versi 4 suuid from UU ID nah seperti ini Oke kita akan coba ganti ini UU ID nah nah ini kita akan simpan hasilnya ke user ya sama dengan nah cuma berarti di atasnya kita ganti yang user apakah sudah ada Oh udah ada ini ya ini jadi LED bukan lagi cons Oke selesai setelah usernya berhasil di-update Nah kita akan e balikkan ya jadi Return eh berarti username itu user titik username lalu eh name-nya kita kembalikan juga user. nameame lalu kita kembalikan tokennya sekarang ya jadi tokennya adalah user. token selesai nah jadi kita sudah selesai ya untuk logic loginnya Nah sekarang kita masuk ke controllernya kita akan buat saya akan copy yang ini paste ini adalah login request-nya adalah login user request respons-nya sama nah ini bedanya dia manggil login Oh ya untuk posstnya ini ke slash login nah selesai jadi cukup simpel ya Nah sekarang kita akan eh bikin berarti controllernya eh sorry bukan ktrol ya tapi lebih ke Unit test-nya Nah kita akan eh lakukan hal yang sama berarti ya ini saya akan [Musik] eh copy ya saya paste di sini nah ini kita akan edit berarti yang pertama ke ganti di sini adalah ke login Nah kalau untuk login berarti before each-nya Itu bukan lagi delete user ya tapi before each-nya itu setelah Delete semua user test-nya eh kita akan coba Bikin juga usernya test service create user jadi setelah Diel semuanya kita create user baru ya nah jadi kalau login kan pasti usernya harus ada ya Nah pertama adalah should be rejected kalau request-nya tidak valid Jadi kalau ke login dia contohnya pakai username atau password-nya kosong ya berarti harusnya memang diject ya jadi balikannya harus 400 lalu should be able to login Kalau memang loginnya benar ya contohnya di sini e login tadi kan benar ya us dan password-nya kebetulan kita bikinnya test berarti ini harus ada data username name dan juga harus ada token tokennya karena dia UU ID jadi saya akan gunakan to be defined aja jadi yang penting balikannya ada data tokennya Jadi kalau eh username password-nya Benar ya yang penting ada dia harus ada data tokennya Nah kalau yang ini enggak perlu lagi Ya Nah kita cukup yang tadi aja jadi enggak valid sama yang loginnya sukses Oke kita akan tes ya Apakah sukses atau gagal kita coba running unit testnya oke benar semua sepertinya ya jadi sudah Oke Berarti sekarang kita sudah selesai ya implementasi untuk api loginnya Jadi cukup cepat ya dibandingkan yang tadi register karena kita sudah set up semuanya Sekarang kita akan buat api untuk get user Oke untuk get user sebelum kita fokus ke api-nya seperti yang pernah kita praktikkan di kelas nestjs dasar ya nah kita kan perlu yang namanya menangkap eh informasi eh authentication-nya ya jadi ketika user itu kan kita penginnya nanti dia akan mengirimkan token ya nanti tokennya kita validasi Nah kita akan buat berarti middleware untuk melakukan validasi authentickation-nya contohnya di sini kita akan bikin out middleware nah nanti kita akan dapatin tokennya lalu kita cek ke database kalau misalnya ada kita simpan ke request-nya Kalau tidak ada ya berarti kita tidak akan simpankan informasi usernya Nah nanti kita akan bikin juga dekorator ya untuk dapetin data usernya Oke kita akan buat dulu Berarti yang pertama adalah middleware-nya jadi kita akan buat di sini misalnya out. middleware.ts ya di dalam folder common-nya Oke kita akan buat berarti di sini eh middleware ya Nama middleware-nya misalnya kita akan buat di sini eh export CL namanya out middleware l di sini eh dia implement Nest middleware Oke kita akan implementasikan nah selesai Nah di sini ya berarti kita akan coba eh implementasi logicnya ya tapi di sini kita tambahkan injectable seperti biasa lalu saya akan e butuh Prisma ya jadi di sini kita bikin Prisma service nah selesai Oke berarti yang sekarang yang akan saya lakukan kita cek dulu dia Ada token atau tidak di request-nya jadi request sama dengan request titik headers ya lalu kita tadi auutthorization ya nama headernya nah ini S string misalnya nah kita cek dulu kalau ternyata dia ada tokennya gitu ya Nah kita mau ngapain nah kalau tidak ada Ya udah biarin aja kita Panggil next-nya seperti ini Oke kalau misalnya ada kita akan coba ambil ke eh ini ya ke Prisma wait Oke sor ini kita bisa tambahkan asing wait misalnya eh Prisma service user find first kita cek ya Apakah ada token yang sesuai dengan di e authorization atau tidak Nah kalau misalnya ada ya Jadi ada data usernya Nah kita akan simpan request titik user sama dengan usernya Nah kalau tidak ada Ya udah biarin aja jadi kita tidak akan throw auto eh sorry throw unutores ya Throw http Exception tidak akan kita lakukan di middleware-nya kita akan lakukannya ini nanti di eh ininya di e dekoratornya Oke kita akan eh registrasikan dulu out middleware-nya ke dalam Command module jadi di dalam common modu ya berarti kita akan tambahkan di sini implement NES modul ya Oke kita akan coba implemen di sini yang consume ya Nah di sini consumer titik apply nah ini adalah out middleware ya lalu for rots misalnya saya mau di semua api seperti ini selesai jadi kita sudah bikin eh out middleware ya untuk semua api jadi nanti di semua api akan dicek kalau ada token ya kita cek Kalau tidak ada ya E enggak usah Oke selanjutnya kita akan bikin dekoratornya untuk authentication ya jadi di sini kita akan coba E bikin out tik decorator.ts Oke jadi di sini kita akan bikin export e cons nama dekoratornya out misalnya ya lalu kita buat create param dekorator Oke jadi di sini Ee Kita kita butuh saya enggak butuh data misalnya jadi kita ganti jadi unnon lalu kita kteex di sini ini adalah execution kex ya Nah logiknya ngapain logiknya simpel kita cuma ngambil tadi ya user dari user request kalau ada kita ambil Kalau tidak ada ya tinggal throw http Exception jadi di sini kita ambil request-nya dulu ya Eh contex switch to http get request lalu kita ambil e usernya ya dari W Ti user berarti ya Nah kita cek kalau user-nya ada nah kita akan returnkan user-nya Kalau tidak ada ya kita tinggal throw new http Exception ya Nah di sini eh misalnya unutorized nah ini balikannya 401 selesai kita sudah selesai bikin dekorator out-nya jadi next-nya di krollernya kita tinggal tambahkan eh dekorator si out-nya ya untuk parameter user nya Oke Berarti sekarang kita fokus ke service ya untuk ee dapetin data user di sini nah kita akan buat berarti di sini adalah asing misalnya E get Nah parameternya kan user ya user yang sudah login ini user dari prismanya ini respons-nya adalah Promise dan user respon nah ini simpel tidak ada logik apapun Ya karena karena kan data loginnya sudah kita dapat dari middleware ya tinggal return aja langsung gitu ya Eh username-nya siapa user username dan name-nya siapa user.k nameame selesai gitu doang Ya jadi enggak ada yang aneh untuk yang get ini kita akan buat di controllernya ini saya akan copy Berarti kita eh ke current ya dan Ini pakainya yang get lalu ini berarti e get oke tidak ada body ya Jadi ini tidak ada body yang ada adalah yang tadi ya Jadi kita pakainya adalah add out nah ini out lalu di sini eh user user Nah jadi kita tinggal panggil yang get user selesai jadi cuma seperti ini aja Oke berarti Sekarang kita akan bikin unit testnya nya jadi unit test-nya saya akan ee copy saya akan perkecil ini saya akan copy semuanya ya pase di sini berarti kita get ke current ya jadi seperti biasa kita akan create user kebetulan di create user di sini kalau kita cek itu dia sudah ada Oh kita belum ada token Ya saya akan masukkan token deh Sekalian tokennya adalah tes misalnya ya nah selesai jadi di sini ada e tokennya ya Jadi kita akan e bikin testing yang pertama should be rejected if token is invalid ya jadi di sini eh kita pakai get ke current lalu di sini kita akan set auutorization authorization Itu salah ya atau wrong jadi tokennya salah jadi responsnya harus 401 nah seperti ini nah lalu should be able to get user nah ini ke curent ini get nah ini kita akan copy dan ini kalau dia pakai tokennya yang benar ya yaitu tes Jadi dia harus dapetin yang sama ini kita enggak kirimkan tokennya Oke kayaknya sih udah ya kita akan Coba sekarang running testingnya Oke sukses semua ya berarti sudah benar Jadi kita sudah selesai ya membuat e api ya untuk get user dan kita sudah tambahkan untuk authentication middleware dan juga dekoratornya jadi next-nya kalau kita butuh informasi user di controllernya kita cukup tambahkan dekorator out ya dan user ini Oke sekarang kita akan buat update user Api oke seperti biasa ya kita akan buat model terlebih dahulu update user request ya Oke untuk update itu kan yang perlu kita update atau yang bisa kita Update itu yang pertama adalah name dan ini adalah opsional ya Jadi tidak wajib lalu juga ada password ya ini juga sama opsional dan tidak wajib juga oke selesai nanti respons-nya sama ya kita akan gunakan user respon Oke selanjutnya kita akan tambahkan e user validation di sini saya akan tambahkan di sini adalah update zot type nah ini adalah z. e object yang ada adalah sama kayak username eh sori bukan username ya name Sori sorryi tadi yang user model ini bukan username ya Oh ya udah benar ya name nah ini saya akan copy nah ini kita ganti jadi name Ya nah tapi dua-duanya itu opsional ya Jadi tidak wajib Oke selesai Nah sekarang kita akan masuk ke service-nya oke di sini kita buat asing Eh update ya Oke kalau update kan ini berarti usernya sudah login terlebih dahulu ya Jadi kita akan tambahkan user di sini Nah setelah itu baru request-nya ini adalah update user request respons-nya sama promise ini adalah user respon Oke selesai kita akan coba implementasikan oke yang pertama kita akan E saya akan tambahkan log dulu ya e loger titik info misalnya user service update Nah di sini kita akan e masukkan data username-nya siapa lalu di sini json stringify request-nya tapi sebenarnya kalau kita lck nanti password-nya kelihatan ya Ini juga nanti password-nya kelihatan ya sebenarnya jadi kita kalau mau levelnya ganti deh debug jadi Kemang pas butuh baru kita e munculin ya oke eh selanjutnya berarti kita akan validasi dulu ya di sini adalah update request sama dengan validation service Ti validate ini adalah user validation titik update dan ini datanya adalah request ini dia update user request Oke selanjutnya setelah kita validasi n jadi kita cek dulu ya kalau memang usernya ada sor name-nya ada baru kita update jadi kita cek kalau update request name-nya ada nah user titik name-nya kita update jadi update e request name Nah kita cek kalau ya Eh update request password-nya ada nah kita akan update password-nya user password sama dengan await eh backrip has updated request Ti password kompleksitasnya 10 Oke selesai Nah sekarang kita akan coba update ke database ya sama dengan wait dis.prism service. user.update where username-nya user tik username data yang diupdate adalah user Oke selesai Nah sekarang kita akan return kan berarti di sini yang kita mau return adalah name-nya user tik name ya lalu e token enggak perlu misalnya username-nya user Ti username selesai Oh sorry ini result ya yang kita balikkan ini result selesai kita sudah sudah bikin untuk implementasi update-nya nah next kita akan update yang controllernya Oke saya akan copy yang ini ya Nah selanjutnya kita ubah ini jadi update ini jadi eh page ya lalu ini ada user lalu juga ada body ya untuk bodyin-nya ini request update user request nah ini kita pakai yang update selesai kita udah selesai Berarti implementasi untuk update-nya Oke sekarang kita akan fokus ke e testingnya ya Nah kita akan coba update user spect nah ini oke ini kita akan copy ya E saya akan copy yang post ini nah Berarti kita tinggal ubah ini jadi page ya E di sini users ke current ya Nah seperti biasa kita delete Ya setelah delete jangan lupa create user ya karena kan butuh data user yang di-update Oke selanjutnya yang pertama e harus direreject kalau request nya tidak valid jadi ini ke page current ya Nah ini enggak ada username nah ini adanya password sama name ini dua-duanya tidak valid ya berarti ini benar harusnya nah lalu harus bisa update misalnya kita update nama dulu ya update name jadi kita ke current ini e page kita upd name-nya jadi test updated jadi ini username-nya tetap tes dan name-nya harus test updated ini kita hapus oh ya saya lupa ya nambahin di sini kita perlu token ya jadi set authorization ini tes ini juga tes oke selanjutnya nya ini update nama Nah kita coba update password ya Nah di sini update password berarti ini password updated nah ini namanya Tetap eh tes ya Nah cuma kita e harus pastikan ya apakah benar eh passwordnya berubah atau enggak caranya gimana caranya kita bisa ee panggil ke data database misalnya ya E apakah benar password-nya sudah berubah atau tidak atau teman-teman bisa panggil api untuk login Sebenarnya ya jadi setelah ini misalnya kita coba login ya Nah jadi di sini ini kita ganti jadi LED Nah kita coba untuk login pakai yang baru ya Jadi password-nya updated username-nya pakai test seperti ini ini enggak perlu pakai e auorization header dan kita pastikan ini dapat 200 ya dan dia punya data titik e sor body titik data titik token nah selesai jadi di sini kita coba update password ya setelah update password kita coba login pakai password yang baru yang updated ini Oke kita akan coba sekarang running semuanya Nah ada yang gagal kita cek update password-nya sepertinya gagal di sini kita cek 404 Oh iya ini harusnya post ya Nah Oke kita coba running lagi sukses berarti sudah sukses semuanya ya kita sudah selesai ya E untuk membuat api untuk update data usernya Oke sekarang kita akan buat log out user api Oke untuk logout kita tidak butuh model sama sekali ya Jadi kita akan langsung ke service saja jadi di sini kita akan buat asing logout ini adalah user parameternya nah balikannya adalah eh promise misalnya user respon Oke untuk logout tidak ada validasi ya jadi langsung Strike forward langsung e simpel aja kita akan coba Hapus token dari si Prisma service-nya jadi di sini result sama dengan prisma service titik update Sorry user titik update nah where di sini user nameame-nya sama dengan user username lalu data yang mau kita update adalah tokennya kita set jadi N0 nah seperti ini oke lalu kita returnkan usernameennya user eh username lalu eh name-nya user.k nameame selesai Oh sorry ini result ya balikannya kita kembalikan di sini Resort Oke selesai Nah kita sekarang masuk ke controllernya Oke saya akan copy yang ini Nah kita pakai yang delete ya tetap ke endpoint yang sama current Oh di sini eh log out misalnya nah ini kita enggak butuh body kita cuma butuh user lu di sini kita akan coba E log out berarti ya Nah cuma data di sini Sebenarnya kita enggak butuh resultnya jadi ini e adalah e Bulian ya nah jadi ini cuma true aja seperti ini karena dari appeknya cuma seperti itu ya untuk logout kalau kita cek nah ini balikan datanya cuma true seperti ini Oke selesai kita akan buat unit testnya saya akan coba copy ya dari yang get misalnya Ini paste di sini nah ini berarti dia delete seperti biasa ini B4 is-nya sudah benar ini harus di-reject kalau dia tidak valid ya Eh tokennya jadi ini ke eh delete ini sudah benar seperti ini lalu ini should be able to log out misalnya ya berarti ini delete ke current user authorization-nya test dan ini harus datanya harus true ya oke selesai kita coba running nah sukses ya Jadi kita sudah selesai ya bikin api ya untuk melakukan logout tapi kalau teman-teman mau cek lagi dengan benar Apakah benar tokennya gitu ya kan bisa aja tokennya kita e lupa hapus misalnya nah teman-teman bisa tambahkan di test service misalnya di sini kita akan get user gitu ya ini saya akan copy paste ini get user eh promise user ini find eh unique misalnya di mana username-nya adalah test ini return misalnya seperti ini Nah kita akan coba cek ya apakah benar tokennya sudah hilang atau enggak cons user sama dengan test service titik get user ya wait Nah kita expect kalau user titik token eh to be null ya Nah seperti ini Oke kita coba running lagi nah sudah benar ya berarti tokennya memang sudah N0 berarti kita sudah selesai ya implementasi untuk logout api Sekarang kita akan buat kontak api ya dimulai dari yang pertama adalah create kontaknya nah seperti biasa kita akan buat dalam Modul terpisah jadi kita akan bikin di sini sebuah folder baru namanya adalah kontak Nah kita akan buat ya beberapa hal berarti Eh kontak.modul.ts nah lalu kita buat file lagi kontak titik eh service.kts lalu kita buat file lagi untuk kontak titik e controller tik TS lalu kita buat yang validation ya kontak validation.ts oke kita buat dari yang e misalnya dari service dulu export CL kakct service lalu kita tambahkan injectable di sini Selesai lalu kita controller kita buat juga export k Kak er ini controller dekoratornya lalu yang validation export CL contact validation ini inject e juga Oh sorry ini engak perlu sih ya sebenarnya Kak validation karena nanti kita pakainya yang statick semuanya ya Jadi ini e gak perlu Nah jadi di sini kita langsung ke kontak modulnya export class kakct modul Nah ini dia adalah modul lalu eh providersnya adalah contakct service e controllernya dia adalah kontak controllers ya nah selesai lalu kita akan import si kontak modu ini ke application module jadi di sini kita tambahkan kontak modu selesai Oke kita sudah selesai ya untuk setupnya jadi sekarang kita mulai implementasi untuk modelnya dulu ya Pertama jadi kita buat di sini kontak titik model.ts kita buat export class yang pertama untuk respons-nya ya yaitu contakct respon Oke untuk kontak respons kita akan cek ya eh di kontak itu kebanyakan butuhnya seperti ini ID first name last name email dan font hampir di semuanya itu sama gitu ya jadi kita akan buat yang sama seperti itu jadi respons-nya seperti itu Jadi kita butuh eh ID ya Id ini adalah number lalu eh first name ini adalah string lalu last name ini juga string tapi untuk last name dia bisa N0 ya Nah Lalu ada email ini juga bisa N0 lalu font sorry ini juga bisa e n opsional ya oke selesai Nah sekarang kita buat yang e create contaknya export class create contact request untuk create contact Nah kita butuhnya yang first name last name email dan juga font nah seperti ini Oke selesai ya Nah sekarang kita akan eh buat yang validation-nya Oke untuk validation-nya seperti biasa kita akan bikin sebuah ee ini ya Static Static read only contohnya create ini adalah zot type nah sama dengan z. objectjek Nah di sini eh sama ya semuanya yang tadi first name ini z. string misalnya titik minimal harus ada satu karakter maksimalnya 100 ya Nah lalu kita buat yang EE last name tapi kalau last name itu opsional ya lalu di sini email nah email juga opsional tapi ini harus email ya Nah seperti ini Lalu ada font Nah kalau font misalnya maksimalnya 20 karakter ya nah selesai jadi kita sudah bikin yang eh create-nya Oke kita akan masuk sekarang ke service untuk service sama ya kita akan buat juga untuk create-nya tapi yang pertama kita akan inject hal yang kita butuhkan kstructor di sini misalnya nya Eh kita akan bikin yang pertama inject dulu winstone eh modu provider untuk Logger private misalnya di sini dijadikan variabel nah lalu kita akan buat eh private Prisma service eh private lalu e udah ya cukup ini aja ya harusnya ya Prisma service ya udahudah cukup sih sebenarnya segini oke kita akan buat sekarang ya yang asing create nah seperti biasa kan ini harus ada data usernya ya jadi usernya harus sudah login Lalu ada request create contact request balikannya adalah promise ini adalah kakct respon Oke selesai Nah sekarang kita akan implementasikan yang pertama seperti biasa kita akan bikin validasi dulu ya create request ini adalah create contact request kita ambil dari Oh ya saya lupa di sini kita tambahkan private eh validation service validation service tik validate lalu di sini kita ambil yang eh contact validation eh create lalu ini adalah data request-nya Oke selanjutnya setelah validasi selesai Nah kita akan ee simpan datanya ke Prisma ya Jadi kita akan coba cons eh eh kontak sama dengan prism service titik kontak.inert Sori eh create nah ini datanya kita ambil datanya dari create request nah cuma kalau teman-teman Perhatikan ya di sini ada error errornya itu dia enggak kompatibel karena kenapa Enggak compatib karena dia butuh username sedangkan di create contact request itu tidak ada username-nya nah kalau di typespt Sayangnya kita enggak bisa create request Ti username sama user Ti username itu enggak bisa seperti ini ya Nah caranya gimana caranya kita bisa e bikin objek baru di sini datanya gitu ya kita bisa bikin objek baru di di mana gabungan ya antara create request koma l kita bikin juga eh objek bar baru yang ada username-nya itu user. username nah seperti ini jadi kita bisa lakukan seperti ini Jadi digabung ya istilahnya tuh dari yang create request digabung sama objek baru eh yang ada field username-nya aja oke Setelah itu kita akan coba returnkan ya Jadi return-nya kita butuh first name dari kontak titik first name lalu kita butuh last name kontak titik last name lalu butuh email kontak titik email lalu butuh font kontak.tik font ya lalu butuh ID kontak titik id nah selesai Sekarang kita akan e buat yang controllernya Oke untuk controller di sini kita pakainya berarti api contact ya Oke sekarang kita akan buat yang bagian ee handlernya nya jadi yang pertama adalah create jadi di sini saya akan buat Oh kita butuh konstructor misalnya kalau teman-teman butuh di sini kita akan butuh yang ini ya Eh private contact service kalau teman-teman mau nambahin Logger silakan Oh ya Tadi kita juga lupa ya di sini tidak melakukan log apapun jadi kita kalau mau teman-teman tambahkan log silakan contohnya loger titik eh debug Eh kontak service titik create misalnya ya json stringy request ya biar tahu gitu ya oh ya di sini eh kita masukkan juga json stringifa user nah Biar tahu ya E ini request dari siapa gitu ya dan data request-nya apa lalu kita masuk ke kontak controllernya di sini eh asing create jadi yang butuh adalah out ya dia butuh user lalu body create contact request respons-nya adalah promise web respon di sini adalah eh kakct respon Oke ini kelebihan kayaknya nah nah seperti ini Oke selanjutnya kita akan tambahkan e dekorator dulu di sini dia pakainya pos ya Nah lalu eh http cod-nya misalnya 200 Oke selanjutnya di sini kita akan eh buat result sama dengan a wait this tik service create user request nah selesai tinggal returnkan data result Oke sudahah selesai ya untuk controllernya Sekarang kita akan implementasikan unit test-nya berarti Nah untuk unit test-nya saya akan copy ya untuk user spec ini saya akan copy saya akan pindahkan ke sini ya E namanya adalah kontak SPC ya Oke tapi kita akan hapus semuanya dulu ya semua unit tes sebelumnya ini nah ini saya akan hapus semuanya nah Sisakan yang satu ini selesai Nah berarti di sini post ke api contak Nah tapi ya di sini setelah kita eh setelah selesai selain delete user Kita juga harus delete kontak yang sudah kita guna e buat ya jadi di dalam test service saya akan bikin juga ini kan delete user saya akan copy paste ini delete kontak jadi ini kontak delete manyi di mana yang e kontak yang punya username-nya adal adalah tes seperti ini Oke jadi di sini kita akan tambahkan Delete kontakct oh sorry dilihat kontak dulu harusnya ya jadi dilihat kontak baru dilihat user ya karena kalau dilihat user dulu nanti dia kena error relasi ya oke so seharusnya Oke selanjutnya eh should be rejected if request is invalid Jadi kalau dia post ke Contacts ya tapi datanya tidak valid contohnya first name-nya Kosong gitu ya last name-nya kosong emailnya formatnya salah lalu fontnya juga Kosong gitu ya Nah seperti ini ini harusnya dia direject ya 400 oke lalu dia harus bisa to able to create kontak kalau misalnya kontaknya benar saya akan copy Ini paste di sini tes Misalnya ini juga tes Ini test @example.com lalu ini nomor teleponnya misalnya ya Nah seperti ini Oke e coba 9999 Oke coba berarti ini data responsnya harus 200 lalu dia ada data ID ya to be define lalu dia ada data e first name lalu dia ada last name setelah itu dia ada email lalu dia ada font ya Oke selesai nah ini kita hapus kelebihan kayaknya hapusnya Oke Oh ya jangan lupa tokennya ya kita butuh token di sini jadi set auutorization auorization nah ini adalah test tokennya Nah ini juga juga sama tes oke oh ini salah pos Eh kontak oke selesai Ya sepertinya kita coba eh running oke Ada yang salah sepertinya resepnya 401 ya unauthorized oh ya karena kita belum bikin user-nya ya jadi setelah eh dilihat kontak dilihat user harusnya di sini a test eh service.cate user nah seperti ini Oke kita coba running nah sukses berarti kita sudah selesai ya implementasi untuk create contact api Oke sekarang kita akan implementasi untuk get contact Api oke seperti biasa ya Eh untuk get contakct kebetulan kan cuma butuh ID ya di dalam ee ininya eh api spc-nya kalau kita perhatikan kan Sorry di sini nah get Kak itu tidak ada request body ya cuma ada kontak ID jadi kita tidak butuh ee membuat ini ya membuat model jadi kita langsung ke service-nya Oke di service di sini kita akan buat asing get misalnya nah ini berarti ada user-nya siapa yang mau lihat kontaknya Lalu ada kontak id-nya Nah ini adalah number responsnya adalah Promise dan di sini contakct respon Oke saya akan perbesar dulu nah selesai Nah kita akan coba ya E implementasikan sekarang jadi e simpel banget sih ya Jadi kita cukup e query kontak ke ke prismanya ya jadi Prisma service titik kontak titik find first ya Nah di sini kita akan coba ambil Nah di sini querynya jangan cuma ke ya kenapa Karena kan kita bisa aja nanti malah ngambil id eh kontak punya user orang ya Jadi selain harus ada usernya Sori username-nya maksudnya username-nya itu user Ti username lalu kontak Sori ID itu kontak ID seperti ini jadi harus pakai dua-duanya di sini nah lalu kita cek kalau misalnya kontaknya tidak ada ya Nah kita mau ngapain Saya akan throw new http Exception nah ini misalnya contact is not phone Nah kita balikan 404 responsnya kalau ada ya tinggal return kan Nah ini sebenarnya hal yang sama nih ini kita ulang-ulang terus ya kayak gini Sorry ini kita copy dulu nah cuma karena ini berulang-ulang terus ee coba saya buatkan e sebuah metod baru ya sor eh to contact respon ini adalah kontak Prisma balikannya kontak respon Nah ini tinggal return seperti ini Jadi ini kita ganti return to contact respon nah selesai ini juga sama return to contact respon si kontaknya Oke jadi kita pakai yang ini ya to contact respon ini Oke selesai ya Sekarang kita akan eh implementasikan di controllernya Oke ini saya akan copy kita ganti jadi get lalu ini get Nah untuk get-nya kita butuh di sini dia eh kakct ID ya nah lalu dia butuh user plus di sini adalah param paramnya adalah Kak ID nah ini kontak ID dan ini adalah number dan dia harus eh number ya jadi di sini kita tambahkan e pipe pars integer pipe nah seperti ini lalu ini berarti get contact ID selesai Berarti udah selesai ya cepat kalau untuk yang get contact Nah sekarang kita akan implementasikan unit testnya Oke untuk unit testnya ini saya akan copy Ya saya akan copy yang ini paste di sini nah ini berarti get Kak ID nah Oke jadi sebelum kita eh implementasi ini berarti kan kita harus bikin kontak terlebih dahulu ya jadi di sini saya akan create kontak Nah cuma karena belum ada ya kita akan e bikin create contact di sini saya akan coba create contact await this Prisma service contact create ya Nah di sini datanya misalnya first name-nya test last name-nya juga test emailnya test@example.com font-nya lalu username-nya itu adalah eh tes selesai jadi kita nanti kontaknya ini nah cuma nanti kan kita enggak tahu ya id-nya berapa Nah jadi saya akan coba E bikin juga get kakct ya untuk dapetin ini id-nya berapa jadi kita ambil kontak sor ini promise Return Prisma service contact find first e where username-nya Itu adalah Tes jadi kita ambil e kontak yang memang username-nya adalah tes oke selesai kita balik lagi ke sini jadi di sini setelah dilihat semuanya kita create user habis itu create contact Nah di sini should be rejected if misalnya contact is not F jadi ID kontaknya salah jadi kita harus tahu dulu ID kontak yang benar ya jadi test service titik e get conttact e sorry ini await nah Berarti kita harus tahu ini ke get dan ini harus tahu ya Eh kontak ID yang salah Oke ini saya ganti pakai back tick kontak ID nah ini kan ID yang benar saya akan tambahkan satu ya biar jadi salah ini kita hapus enggak butuh body jadi dia dia harus dapatnya 404 ya kalau kontaknya itu tidak ketemu nah lalu di sini dia harus bisa eh ngambil kontak jadi ini get kontak id enggak perlu pakai body dan harus kontaknya harus ini ya udah benar Oke kayaknya udah Oke kita coba running kita lihat hasilnya nah sukses ya berarti sudah benar semuanya unites-nya berarti kita sekarang udah selesai ya implementasi untuk get contact api Sekarang kita akan buat untuk update kontak Api oke seperti biasa kita kita akan buat dulu e kontak modelnya ya untuk eh export class update contact request Oke untuk update sama seperti e create ya Nah Cuma bedanya untuk update kan kita harus tahu id-nya ya Jadi kita butuh ID nah seperti ini Oke selesai Nah sekarang kita akan buat yang validation-nya jadi contact validation kita buat ini saya akan copy ya Nah ini update update ya Nah tambahannya cuma ID ya kalau dia harus punya ID z titik eh number ya lalu di sini Nah teman-teman kira-kira apagi ya kalau selain number dia cukup number aja sih ya harusnya ya Jadi kalau misalnya udah ee pakai number dia Oh ya mungkin Ee Kita mau pengin dia positif ya Jadi enggak boleh ngasih nomornya negatif misalnya udah selesai semuanya hampir sama Oke kita akan masuk sekarang ke kontak service-nya Oke kita akan buat di sini ya asing update nah user lalu di sini request ya untuk update contakct request lalu ini adalah promise eh sori e contak respon Oke saya perbesar dulu Nah selanjutnya berarti yang pertama yang harus kita lakukan adalah kita akan ini dulu Berarti ya kita akan e cek dulu ya kontaknya ada atau tidak ya Nah sebenarnya logiknya hampir mirip dengan ini ya Jadi ini kita copy tapi Alangkah bagusnya dibanding kita copy paste kayak gini gitu ya Nah jatuhnya nanti kan jadi banyak kode duplikat ya Nah lebih baik kita istilahnya itu adalah ekstrak si metodya jadi di sini kita buat buat asing Eh cek misalnya Kontak Mas exis ya nah jadi nanti kita pakai user-nya siapa eh ininya ada deh username-nya lalu kontak id-nya return-nya adalah promise kontakct ya ini return kontak Oke jadi ini pakai username ya Nah mana tadi Nah ini ya Jadi pakai username kontak ID nah selesai jadi yang ini berarti tinggal kita hapus ya ini cek kontak mas Ais user username dan kontak ID nah seperti ini oh ini sor pakai ya nah selesai Oke berarti sekarang yang update juga Sama ini saya akan copy nah ini diambil dari request tiid ya Nah Oh tapi sebelumnya kita validasi dulu ya cons update eh request sama dengan validation service validate eh contact validation titik update dan ini adalah request-nya berarti ini kita ganti jadi update request.id Oke selesai Nah kita sekarang sudah dapat ya Ini kontaknya kalau memang ada nah sekarang kita akan coba E lakukan update berarti ya Nah untuk update-nya simpel sih ya harusnya jadi kita akan buat misalnya di sini Oh ini jangan pakai e Ini pakainya LED misalnya ya jadi kontak sama Awa Prisma update sorryi kakct update ya lalu di sini where user eh sorryi id-nya itu sama dengan kontak ID ya lalu username-nya misalnya Eh kontak titik username eh data yang mau di-update adalah si kontak sorryi bukan kontak update request nah seperti ini Oke Nah selanjutnya Ya udah sih Ya tinggal kita konversi ya dari kontak ini eh return Dis tit to contakct respon si kontaknya selesai jadi sekarang kita sudah buat untuk yang update kita masuk ke controllernya nah saya akan copy yang post ya karena hampir mirip nah ini kita pakainya berarti Put ya ini kontak ID nah ini adalah update dia ada user request plus ada param ya kontak ID dan ini Oh ya jangan lupa pars integer pipe lalu ini adalah contact ID number oke nah sebelum kita kirim ke sini Oh ya ini sor ini update conta request ini kan update ya Nah sebelum kita kirim ya Jadi request-nya kita akan e set dulu id-nya adalah kontak ID nah seperti ini Oke selesai ya Nah sekarang kita akan e implementasikan unit testingnya Oke untuk unit testing-nya saya akan copy dari yang create contact kayaknya ya karena hampir mirip J ini create contact saya akan pase di sini oke ini kita ganti berarti Put ini ada kontak id-nya Eh berarti ini kita tambahin create contact ya before each-nya lalu di sini should be rejected it request is invalid nah tapi kita harus e ambil dulu kontak yang ada wait test service get contact berarti ini pakainya Put Nah ini pakai backtick kontak ID nah ini yang salah ya harus balikannya 400 udah benar ya Nah kita Tambahkan lagi yang salah misalnya kontaknya tidak ketemu ya J ini kita copy paste if contact is not F jadi kalau dia kontaknya enggak ketemu misalnya di sini Kita plus 1 berarti ini e 404 ya harusnya ya oke baru yang ini adal bisa update kontak kontak sama dengan await test service get contact ini kontak ID Ini pakainya Put ya Nah ini Misalnya updated updated ini juga updated ini 8888 Oke berarti ini harus berubah menjadi updated updated ya updated ini juga harus berubah jadi 8888 Oke kita cek lagi untuk memastikan sepertinya sih udah oke semua Oke kita akan coba running testing-nya oke Ada yang error Sepertinya di sini kalau kontaknya not font ya oh karena kita melakukan validasi dulu di awalnya gitu ya jadi dia kenanya validasi error dulu baru Setelah itu kita cek kontak id-nya ya Nah karena di service-nya itu kita cek di sini ini kita validasi dulu kalau dia Ee tidak valid baru eh sori kalau valid baru dia cek e ID kontaknya berarti ini harusnya kita kirim yang valid ya Tes tes test example com Oke kita coba lagi sekarang Nah sukses ya Berarti sekarang kita sudah selesai ya untuk eh bikin update kontak api-nya Oke sekarang kita akan buat remove contact api untuk remove karena dia cukup menggunakan ID jadi kita tidak akan buat modelnya ya Jadi kita akan langsung ke kontak service-nya di sini jadi di sini kita akan buat asing remove ya user Lalu ada kontak ID yang akan diemove Nah kita balikkan misalnya E promise contact respon Oke selanjutnya yang kita lakukan sama ya kita cek dulu ya kontaknya harus ada ya nah jadi simpel kita cek kontaknya harus ada di mana ini user username dan contakct ID ya ini Wat Oke setelah itu yang kita lakukan adalah kita e hapus dari database ya kalau memang sudah ada caranya kita akan e simpan di kontak misalnya eh await Prisma service kontak delete lalu di sini where id-nya adalah kontak Eh kontak Id username-nya adalah user.username Kalau sudah tinggal kita return to contact respon si kontaknya Oke selesai ya Nah sekarang kita akan e tambahkan di controllernya saya akan copy yang get karena hampir mirip berarti ini eh remove ya Ini pakainya delete lalu tinggal ini Panggil remove dan ini tidak butuh result result-nya adalah true seperti ini oh ya ini balikannya berarti web respon-nya adalah Bulian Oke selesai Nah sekarang kita akan buat unit testnya Oke saya akan copy yang unit test yang sebelumnya itu yang get ya Nah karena hampir mirip nah yang ini yang get saya akan copy P di sini Oke berarti ini adalah delete jadi sama pertamanya create contact dan seterusnya lalu ini should be rejected if contact is not font ya kita coba ini berarti delete ya ke kontak ID yang tidak ada Harusnya sama ya 404 lalu eh bisa remove contakct jadi di sini Harusnya kalau kita delete ya Nah ini harusnya balikannya datanya itu to be true Oke kita akan coba running kita lihat hasilnya nah sukses ya berarti kita sudah e selesai untuk bikin E remove contact api sekarang kita akan buat search contact api Nah ini adalah salah satu e api yang lumayan Kompleks ya karena banyak kombinasi query-nya Oke kita akan buat modelnya terlebih dahulu ya untuk kontaknya kita buat export class search contact request Oke untuk search sesuai dengan api spec yang sebelumnya kita buat jadi dia bisa nyari berdasarkan nama ya Tapi dia bisa ee enggak ada juga ya lalu Selain itu ee bisa nyari berdasarkan email dan juga font nah Selain itu ya Nah itu kan kita butuh yang namanya Eh ini ya page ya Halaman berapa Nah ini number lalu size ya Ada jumlah berapa per halamannya ini juga number nah bedanya kalau page sama Sas itu misalnya required ya jadi wajib diisi tapi nanti kita bisa kasih default value nah ini adalah name email dan juga font Oke sekarang kita akan masuk ke validation-nya oke untuk validation-nya ya di sini E saya akan coba E copy ini adalah search berarti kita butuh yang name name misalnya ya Nah ini last name enggak butuh email nah email sebenarnya sih karena ini validasinya bisa parsial ya nyarinya ya jadi email pun enggak harus format email asli gitu ya Nah sor ini juga opsional ya nah lu ee e nomor telepon pun mungkin tidak perlu wajib ee asli ya Ee Sori maksudnya enggak perlu wajib ee 20 gitu ya jadi pokoknya maksimalnya bebas terserah karena kan bisa ee panjang gitu ya tapi ee minimalnya satu misalnya ya tapi dia opsional jadi ya Boleh aja kalau enggak ada oke lalu Ada page ya kalau ini adalah number sudah pasti ini minimalnya numbernya adalah satu ya dan dia harus positif lalu size itu juga number minimalnya juga satu data dan dia harus positif juga kalau teman-teman mau nambahin Max misalnya Oke maksimalnya cuma boleh 100 Nah itu juga boleh Oke selesai ya Nah sekarang kita akan implementasikan di bagian service-nya Oke kita akan buat di sini Oh ya karena kalau kita perhatikan di sini ya di eh kontak itu untuk search itu nya kan ada informasi pagingnya ya nah ini Jadi mungkin ee lebih enak kita juga bikin ya Ee model ya E untuk paging-nya agar apa agar Nanti kalau kita mau pakai tinggal pakai aja jadi enggak enggak ribet gitu ya jadi kita akan buat untuk model pagingnya juga jadi di model kita akan Oh langsung aja ditambahkan di web ya karena ini bagian dari web jadi di web di sini berarti kita tambahkan di sini adalah eh paging ya nah cuma kita berarti perlu bikin paging di sini jadi export CL paging nah seperti ini nah dia butuh size ya kita akan cek di sini dia butuh size total page dan juga current page jadi size number total page lalu eh current page ya curent page nah number seperti ini oke j nanti responsnya Oh ya ini paging opsional juga ya Bisa enggak ada kan Nah lalu Nah selanjutnya kalau untuk e return value-nya ya e maksud saya Return dari si e servis-nya berarti kita bisa langsung dalam bentuk web respon Ya kalau mau ya jadi di kontakct service di sini kita bisa bikin asing misalnya di sini e search ini nanti user lalu request search contact request nah ini balikannya promise ya langsung web response nah ininya adalah eh user Sori Eh kontak respon tapi dia Aray nah seperti ini Oke saya perbesar dulu Sekarang kita akan eh baru lakukan implementasinya Jadi yang pertama yang perlu di lakukan adalah Eh kita validasi dulu seperti biasa search request ini adalah search contact request sama dengan validation service ti validate eh contact validation search ini request ya Nah lalu kita akan eh bikin filternya filters ya nah jadi kan filtersnya itu kan bisa dinamis ya Karena kan dia bisa aja mau filter berdasarkan nama berdasarkan email atau berdasarkan telepon jadi nanti ini harus dinamis jadi kita harus ngikutin gayanya Prisma untuk bikin filters-nya Jadi pertama nanti kita akan cek kalau eh search request Ti name itu ada ya Nanti berarti di sini eh kita add name filter ya lalu kita cek kalau search request tik email itu ada ya berarti kita ada nanti add email filter nah dan seterusnya ya kalau nanti search request titik font itu ada berarti kita add font filter oke nah baru kalau udah selesai semua Nanti baru kita akan eh tambahkan atau querykan ke si prismanya jadi ini konakct yang kita dapat ya sama dengan Prisma service eh sorry k user contakct find many ya Nah di sini baru where Nah kita tambahkan username-nya itu dari user titik username lalu n ya Nah ini kita masukkan si filtersnya di sini gitu ya Nah lalu kita tambahkan pagination e t kita mau ambil berapa data itu sesuai dengan search request eh titik eh size-nya ya Nah lalu kita perlu skip nah skip-nya berapa Nah kita harus hitung dulu ya cara hitung skip-nya simpel sih ya Nah contohnya di sini kita bikin variabel ee skip sama dengan itu simpelnya adalah eh search request page yang dipilih ne-1 gitu ya lalu dikalikan search request eh per size-nya Nah jadi kita dapat skipnya jadi nanti kalau halaman pertama gitu ya berarti skipnya adalah 0 kalau halaman kedua berarti skipnya sejumlah size-nya halaman ketiga berarti dua kali sejumlah size-nya kayak gitu ya J ini skip nah seperti ini Oke jadi sekarang kita tinggal e implementasi untuk filters di sini ya Jadi kalau misalnya E request name ya berarti kita harus filter push Nah kita akan bahkan berarti dia itu adalah or ya kalau misalnya ee karena kita mau nyari ke first name atau juga last name jadi or Nah di sini eh first name ya [Musik] contents search name seperti ini lalu saya akan copy paste Jadi bisa ke first name dan juga bisa ke last name nah seperti ini ini adalah ee filter bawaan dari prisma ya Jadi teman-teman bisa gunakan seperti ini Oke gimana kalau misalnya yang ini yang email kalau email harusnya lebih sederhana jadi di sini tinggal filter push ya email contens nah search email ini saya akan copy Kalau font juga Sama ya Jadi tinggal push font contens font Oke kalau contens itu nanti jadinya adalah likequery ya nah selesai kita udah dapat nih eh kontaknya Nah sekarang kita tinggal ya simpel sih ya kita tinggal returnkan gitu ya Eh data datanya ambil dari koncts Ya nah tapi kan kontaks ini kan Prisma kontaks ya nah jadi kita perlu Map ya untuk ubah ya dari data ee kontak itu jadi to contakct respon si kontaknya nah seperti ini nah lalu selanjutnya adalah paging-nya paging-nya current page-nya itu simpel tinggal search eh page ya lalu eh size-nya juga simpel ambil dari search size nah Cuma sekarang Total page-nya total page-nya itu kita harus eh hitung ya Eh Biasanya sih menggunakan Mat sale ya lalu kita eh totalnya total yang saat ini di data gitu ya itu dibagi search request titik size nah cuma kan kita belum tahu ya total datanya berapa jadi kita harus hitung total data dulu e cons total sama dengan total data itu sebenarnya query-nya sama seperti ini ya Nah Cuma bedanya kita enggak perlu pakai tag dan juga skip ya jadi di sini e Ait Prisma service kontak count where username user Ti username lalu and filters Nah jadi sama seperti ini ya cuma bedanya kita enggak pakai ini karena kita mau pengin tahu aja con-nya ya jadi total seluruh datanya dari hasil query ini ada berapa Oke selesai sepertinya ya untuk search lumayan panjang juga karena banyak kombinasi Oke kita akan e buka sekarang user controller Oke untuk user controller saya akan copy yang oh bukan sor harusnya kontak controller saya akan copy yang get ya Nah ini Oke jadi e simpel banget ini kita enggak perlu e patnya karena get-nya ke url yang sama seperti di controller ini adalah search nah lalu Nah ini nih ada banyak ya yang harus kita tambahkan ya kita semua bentuknya adalah query Jadi yang pertama adalah name ya ini [Musik] name string nah lalu selain name ada email email lalu di sini ada font font ya Nah lalu di sini baru ada yang eh page ya page nah ini juga kita e jadikan opsional nanti kita ubah ya E di dalam handlernya kalau misalnya dia kosong kita set jadi page 1 seperti ini nah cuma karena page ini adalah number Nah kita akan tambahkan e pars in pipe nah cuma pars in pipe itu defaultnya dia required ya jadi wajib Nah kita bisa ganti jadi opsional menggunakan new par in sini e kita tambahkan parameter opsionalnya menjadi true seperti ini nah kurang lebih seperti ini Nah kita duplikat yang ini yang terakhir adalah size Oke selesai Nah sekarang kita akan implementasikan di sini ya Jadi kita akan buat request ini adalah search contact request ya kita ambil name-nya dari name lalu email-nya dari email font-nya dari font ya lalu eh page-nya Nah ini dari page atau ya kalau tidak ada datanya kita ambil satu page-nya lalu misalnya size Nah itu kita ambil dari size atau kalau tidak ada kita Set 10 ya size-nya oke selesai Nah kita tinggal return ee a eh enggak perlu await sih ya langsung aja service search user request Oh ya ini return-nya kontak responnya Aray ya nah selesai Nah sekarang kita akan coba implementasikan unit testnya Oke untuk unit tesnya saya akan coba copy yang get ya Oke berarti ini get-nya ke sini aja nah oke mungkin sekarang akan banyak sekali skenario ya dari yang pertama kita akan eh nyari Misalnya ee tanpa parameter sama sekali ya should be able berarti ini berarti kita hapus saja should be able to search Contacts ya Jadi ini get ini kita hapus Nah jadi cukup seperti ini berarti datanya dia kan balikannya arah ya nah jadi karena dia Aray kita cek leng-nya itu harus to be kebetulan cuma satu data ya kontak yang kita bikin jadi Minimal dia harus ada satu data kita coba running dulu oke sukses berarti sudahudah benar Nah selanjutnya Nah kita mau eh search contact By name ya Nah jadi di sini kita tambahkan query name Nah tadi kan datanya itu tes ya nah kita kan pengen bisa nyari dia parsial ya jadi eh es gitu ya itu harusnya bisa dapat juga Oke kita coba running nah sukses ya Nah berarti sudah Oke coba Kak kalau kita mau nyari yang not font gitu ya to contact By name not font jadi ininya misalnya name-nya wrong jadi ini lengnya harusnya nol Ya ini untuk memastikan bahwa benar ya Nah benar ya berarti e enggak dapat ya kalau nyarinya wrong Oke berarti selanjutnya ke email ya nah saya akan copy ini dua ini Nah jadi yang pertama by email ini kita ganti email ini tetap harus dapat ini juga email kalau email-nya wrong ini juga tidak dapat ya Nah selanjutnya yang font ya kalau ke font kebetulan font-nya kan 99 99 ya jadi 99 di sini ini harus dapat kalau ke font yang not font misalnya yang fontnya itu 88 misalnya seperti ini Oke kita coba running dulu semuanya oke udah oke semua berarti ya Nah nextnya kita akan coba yang e ini ya yang page-nya eh kita akan nyari yang paling pertama tanpa parameter misalnya itu kan dapat data sat ya nah gimana kalau kita misalnya naikin page nya jadi search contact with page gitu ya nah misalnya di sini kita tambahkan query eh page-nya kita Sori size-nya misalnya kan tadi default-nya 10 ya kita ganti default-nya jadi 1 berarti kan tetap ya totalnya ada satu page nah tapi saya mau page-nya yang page 2 artinya Apa artinya harusnya dia tidak dapat data apapun jadi di sini data leng-nya tetap nol Ya nah tapi data eh paging titik current page-nya itu adalah satu ya current page-nya satu lalu di sini dia ada total page-nya juga satu nah tapi ya eh size-nya sorry current page-nya dua ya total page-nya ada satu ya dan size-nya itu satu ya sesuai dengan yang di sini Oke kita coba running sekarang Nah ada yang error Sepertinya di sini kita cek errornya di bagian apa current page tidak ada e kita coba running lagi ya Apakah di respons-nya hilang atau gimana current page 2 paging data paging data Oh ya sori bukan di data ya enggak enggak ada data langsung ke paging Sorry body paging nah seperti ini Oke kita coba running ulang oke selesai Berarti kita udah selesai ya bikin implementasi untuk search eh api-nya termasuk testingnya Nah teman-teman nanti kalau bingung dengan testingnya tenang aja nanti di bagian akhir kita akan Coba lakukan manual tes ya jadi Jadi kalau teman-teman masih terbiasa pakai manual test nanti kita akan e buat juga manual testnya Sekarang kita akan buat create address api Nah seperti biasa ya karena kita sudah masuk ke address manajemen jadi kita akan buat di sini modul baru ya Nah di sini modulnya adalah address Oke kita akan buat beberapa file address ya lalu modul TS lalu kita akan buat lagi address service TS lalu kita akan buat lagi Eh controller dan yang terakhir kita buat yang validation Oke kita akan buat yang validation dulu export class address validation lalu yang controller ya Eh export class address controller ini kita tambahkan dekorator controllernya dan ini adalah api eh kcts ya lalu eh kontak ID ya lalu di sini baru addresses-nya Oke selanjutnya kita buat yang eh address service Ini adalah injectable dan yang terakhir kita buat modulnya Oke ini kita buat modul providers-nya kita tambahkan tadi address service lalu controllernya kita buat address controller Oke selesai ya Nah sekarang kita akan e mulai implementasikan yang pertama adalah create address-nya Oke dimulai kita akan buat modelnya terlebih dahulu ya jadi di model kita buat address model TS Oke seperti biasa kita akan buat respon modelnya dulu export class address respon oke di sini berarti kalau respons itu kan sama ya k kayak di database-nya ya Jadi ada number di sini Lalu ada Street ini juga opsional lalu eh City ini juga opsional Province ini juga opsional lalu country Nah ini baru eh mandatory ya lalu Postal code Oke Nah selanjutnya yang create create itu butuh ini ya saya akan copy export class create address response Oke selesai Nah sekarang kita akan ee implementasikan untuk validation-nya Oke kita buat Static read only nah ini eh namanya e samain aja ya kayak nama metodya yaitu create ini adalah zot type sama Z Ti e objectjek Oke jadi di sini dia kan Oh ya untuk create-nya itu selain di dia butuh e informasi address dia juga akan butuh ini ya nanti informasi e kontak ID mana yang mau ditambahkan jadi di sini saya akan tambahkan kontak ID misalnya seperti ini ya lalu z titik number ini kan harus number ya lalu ini harus positif ya E minimalnya sat Oke Lalu setelah itu baru informasi yang lainnya misalnya ya Z string minimalnya maksimalnya ee 255 ya Kalau tidak salah ya kita lihat Prisma skema ya 255 ya street-nya Nah ini baru opsional ya tidak wajib Lalu setelah itu juga E City ini juga opsional tapi ini 100 lalu Province juga sama opsional lalu count Nah ini baru tidak opsional Postal code ini 10 ya nah selesai Sekarang kita baru implementasi di bagian service-nya Oke seperti biasa kita akan tambahkan di sini Constructor kalau teman-teman butuh Logger silakan ya Eh inject loggernya misalnya di sini winstone modu provider nah ini kita tambahkan private Logger nah lalu kita akan tambahkan private Prisma service private validation service Oke selesai Nah sekarang kita akan implementasikan yang asing create berarti ini ada user Lalu ada request create address eh Oh ya ini kenapa create address respon Ya ini harusnya create address request address request nah ini balikannya adalah promise address response Oke jadi logik yang pertama itu sebenarnya sama aja Ya seperti logik-logik yang lainnya jadi kita validasi dulu habis itu kita cek Apakah kontak id-nya ada gitu ya kalau misalnya ada ee kita lanjutkan Kalau tidak ada kita throw 404 seperti biasa jadi di sini kita cek dulu eh cons create request ini adalah create address request itu sama dengan validation service tik validate ini adalah address validation tik create ya lalu ini request-nya Nah selanjutnya kalau dia valid Nah baru kita cek nah cuma untuk mengeceknya berarti kan kita harus cek kontak ya Nah sebenarnya nya cek kontak ini sudah pernah kita lakukan di kontak service jadi dibanding kita misalnya ee Ini lagi gitu Ya bikin kode yang sama seperti di kact service nah gimana kalau kita gunakan aja si kakct service jadi di sini kita bisa gunakan private contact service ya Nah ini adalah contact service nah seperti ini nah tapi untuk menggunakan kontakct service berarti di bagian eh address modulnya ya itu kita harus import ya di sini import untuk kontak modul nah seperti ini nah Selain itu di kontak modulnya nah ini juga kita harus ekspor si kontak service-nya jadi biar bisa digunakan nah selesai Oh ya tadi kita lupa ya menambahkan di application modu di sini eh import address modu Oke selesai Jadi sekarang kita bisa gunakan Si Kak service-nya jadi di sini kita bisa eh e cek ya ke database Apakah ada atau tidak jadi e cons misalnya kontak sama dengan kontak service ya titik cek kakct Mas exis user titik username lalu ini adalah request sor create requ cont ID oh create request-nya enggak ada ya kontak id-nya ini harusnya ada kontak id-nya ya karena kita sudah tambahkan di validation ini kita lupa tambah ini kontak ID Oke selesai kontaknya sudah kita validasi dan dipastikan ada Nah setelah itu baru kita akan ee Insert datanya Nah untuk Insert datanya simpel jadi eh cons address sama dengan eh Prisma service titik Lalu di sini kita gunakan eh yang address ya lalu create datanya Ini dari create request selesai lalu kita [Musik] returnkan id-nya adalah address titik id Sorry Oh ya ini e wt-nya belum ada address ID lalu City address City lalu Province address Province lalu Oh streetnya lupa ya di sini Street address Street lalu country-nya address country Postal cod-nya add code selesai Oh sepertinya ini kita tidak gunakan ya Jadi ini kita cukup Panggil e Ait seperti ini aja oke selesai Sekarang kita pindah ke controllernya address controller Oke sori salah address controller nah Oke berarti di sini yang kita butuhkan adalah private address serv ya nah selesai lalu kita buat berarti di sini asing create promise web respon dan ini adalah address respon Oke ini berarti Po ya pakainya lalu ini http cod-nya adalah 200 Nah ini dia butuh user lalu butuh request create address request Oh ya kita lupa juga dia butuh kontak ID ya number oke yang e user kita tambahkan out yang ini juga tambahkan param ya Nah kita pakai yang kontak ID ya ini sesuai dengan yang di sini lalu ini baru body oke nah sekarang kita baru eh result sama service tik create user request tapi sebelum kita kirim request titik contak id kita set si kontak ID yang dari param Nah setelah itu baru return data result-nya Oke ini ada yang error sepertinya Oh ya ini kita lupa wait Oke selesai ya Nah udah oke nih sekarang kita akan implementasikan unit testnya berarti ya yang terakhir Oke kita akan copy yang dari kontak ya kita akan copy paste di sini ini adalah address spek TS Oke tapi kita akan Hapus dulu ya yang tidak kita butuhkan jadi ini kita hapus semuanya nah Sisakan yang ini berarti ini adalah e pos ke sini ya kontak ID lalu addresses Oke berarti ini harus create user create kontakct dulu ya Nah untuk dapetin kontaknya nah lalu di sini cons kontakct sama dengan W test service get contakct ya untuk dapetin kontaknya nah lalu kita di sini kan Po ke ini harus pakai backtick ya kontak id/ addresses oke lalu kita send yang tidak valid ya dari mulai street-nya kosong misalnya lalu E ini sor enggak perlu pakai ini ini eh setelah Street Itu City ya city-nya juga kosong province-nya juga kosong country kos Postal code juga kosong Oke selanjutnya dia tetap harus dapat 400 ya bat request karena ini datanya tidak valid Oke selanjutnya kalau sudah ya Berarti sekarang misalnya harus bisa create address nah ini saya akan copy kita butuh kontak dulu soalnya ini juga saya akan copy url-nya nah ini datanya perlu yang valid ya ini saya hapus nah ini misalnya E jalan tes kota tes provinsi tes negara tes ini sat S1 Oke berarti ini data id-nya harus ada lalu di sini street-nya harus jalan tes ya lalu Kota tes nanti kita perbaiki ee Prov tes negara tes dan yang terakhir harus satu sat sat satu oke Ini adalah Postal code ini adalah country ini adaalah Province ya ini adalah City Oke selesai nah seperti biasa ya kalau kita sudah lakukan create mau enggak mau kan kita harus hapus datanya ya jadi di sini ee di awal setelah delete kontak Eh sorryi sebelum delete kontak kita akan delete dulu si di sini delete address seperti ini Nah kita akan coba create method-nya ya di eh sini di test service jadi ini await Prisma address delete many ya eh weare kontaknya yang dia punya username-nya adalah tes seperti ini nah jadi kita hapus dulu semuanya ya sebelum e dilakukan Oke selesai jadi kita hapus dulu address hapus kontak hapus user baru create user dan create kontaknya Oke kita akan coba jalankan kita lihat hasilnya Oh ya kita lupa ubah yang atas ini adalah kontak controller nih dapat 400 ya kena validation error sepertinya yang ini Street City [Musik] Province Oh ya ini bukan kontak sor address nah ini kita debug dulu ya Kenapa dia kena validation error di address servnya kita tambahin loger misalnya ya E loger titik info Sorry loger Ti debug ini adalah address service titik create json stringify user koma json stringif request ya Oke kita cob coba running lagi yang ini kenapa kena playdation error Oh ini levelnya cuma level info ya Coba kita ubah dulu di e common modul-nya yang common modu di sini winstone-nya di sini levelnya level sori di sini levelnya kita ganti jadi debug Oke kita coba running lagi address service create username-nya test password-nya lalu street-nya jalan ya ada benar city-nya ada province-nya ada country-nya ada Postal code-nya ada ini kontak id-nya ada ya Oh di sini kontak id-nya dapatnya string Harusnya kan kontak id-nya itu adalah number Oke karena kayaknya kita di address controlnya lupa ya nambahin nah param ini harusnya dia pars integer pipe nah hanya gara-gara tipenya aja yang salah Oke kita coba lagi nah sukses ya Sekarang berarti sudah benar kita coba running lagi semuanya sukses berarti J kita sudah selesai ya implementasi untuk create address api Sekarang kita akan buat untuk get address Api oke mungkin di sini kita berpikir tidak butuh e bikin model ya untuk request E getate address-nya tapi kalau kita perhatikan di dalam api spec-nya untuk get address itu kita butuh dua data sebenarnya data kontak ID dan juga address ID jadi ada dua parameter sebenarnya nah alangkah baiknya sebenarnya kalau nanti itu parameternya sudah makin banyak kita bungkus dalam satu objek aja contohnya di sini kita bikin E get address request misalnya ya Nah jadi di dalam e address modelnya di sini kita akan bikin juga e export class get address request seperti ini jadi yang dibutuhin adalah kontak id-nya number ya lalu eh address -ya number seperti ini ya nah jadi nanti kita kalau misalnya ee butuh detailnya tinggal query pakai yang ini Oke selesai Nah sekarang kita masuk ke validation ya Nah validation-nya sebenarnya sederhana ya jadi karena dia ada dua tadi jadi yang penting dua-duanya adalah number ya jadi Static read only e get misalnya Z type = Z object nah Kak Id ini kita copy yang dari atas Harusnya sama sih ya Eh address ID juga oke selesai Nah selanjutnya kita akan masuk ke service-nya berarti Oke kita akan buat di sini get eh user lalu request get address request ini promise address respon Oke jadi yang pertama yang kita lakukan ya sama sih ya kita cek dulu e dia Itu kontaknya ada atau tidak jadi kita bisa ee lakukan hal yang sama seperti ini untuk cek kontaknya ada atau tidak e atau Sorry validation dulu ya cons e get request sama validation service Tik validate di sini eh address validation.kg request Oke selanjutnya Nah kita cek ya di sini get request Nah jadi dia punya Eh kontak atau enggak Nah setelah itu baru kita lakukan pengecekan ya ke database cons di sini address misalnya sama dengan awat Prisma service address find one misalnya eh sorry find first where Nah di sini E id-nya itu sama dengan get request ID ya Oh ya ini sorry kita belum tambahkan get address request ini adalah address ID lalu eh kontak id-nya get request contakct ID Oke seperti biasa kita cek Kalau address-nya tidak ada kita akan throw new http Exception address is not Fone 404 Nah setelah itu nah kita tinggal eh return kan Ya nah objeknya sama seperti ini ya biar lebih reusable kodenya kita akan buat di sini eh to address respon ini adalah address address respon return nah seperti ini ya Jadi ini kita ganti return to address respon seperti ini dan di sini juga kita return to address respon Oke selesai nah Sekarang kita akan buat di controllernya saya akan copy yang ini kita butuhnya get lalu di sini kita butuhnya adalah address ID ya Nah ini kita pakai get Jadi selain kontak ID saya akan duplikat kita butuh address ID juga ini address ID dan kita tidak butuh request body Oke jadi kita akan buat request ini adalah get address request sama dengan address id-nya kita ambil dari address ID kontak id-nya ambil dari kontak ID lalu ini berarti ngambil yang get oke selesai ya Nah sekarang kita akan buat unit test-nya Oke kita akan copy ya Yang sebelumnya Yang Po ini nah cuma di sini berarti kita butuh bikin address dulu ya jadi wait test service create address ya untuk tesnya jadi saya akan buat create method di sini eh wait Prisma service address create Nah di sini Oh ya tapi kita harus ambil dulu kontak ya sama dengan get contact nah lalu data nah kontak id-nya kita ambil dari kontak ID nah lalu yang lainnya street-nya misalnya E jalan tes city-nya kota tes provins-nya provinsi tes Lalu e countya nya negara tes Lalu di sini Postal cod-nya ya Misalnya 1111 Oke selesai kita balik lagi nah jadi sudah dibuat ya E usernya kontaknya J juga addressnya berarti kita coba should be rejected if misalnya eh contact ID is contact is not F jadi ini kita pakai yang kontaknya tidak ketemu Plus 1 addresses ini juga e asal dulu ya E Sori di sini berarti cons address sama test service get Oh ya get address belum ada kita akan buat juga untuk dapatin address Eh sekarang ya yang tesnya jadi di sini return Prisma service Ini adalah promise address address find First where di sini Kak username-nya sama dengan test Oke sudah baik lagi di sini berarti di sini kita [Musik] tambahkan address ID ya Nah ini kita salahkan ya kontak id-nya ini nah ini kita ganti jadi get jangan lupa lalu kita tidak butuh body Oke ini sorry typo ini harus 404 ya Nah lalu kita akan copy lagi paste ini kalau addressnya yang tidak ketemu ya Jadi ini kita perbaiki lagi dan ini kita salahkan si address id-nya Oke dan ini yang terakhir harus bisa get address berarti eh kita copy dulu ini nah ini addressesnya kita perbaiki jalan tes kota tes provinsi tes negara tes ya ini sama ya oke harusnya sudah Oke kita coba [Musik] running Nah lihat hasilnya sukses ya eah Oh bentar kita cek ininya belum diganti ya ini harusnya get Oke kita coba running ulang lagi dari awal Oke sudah sukses ya berarti semuanya e untuk get get address api itu sudah selesai Oke sekarang kita akan implementasi untuk update address api Oke kita akan buat modelnya dulu ya untuk modelnya sama seperti create ya Nah kita akan past di sini ini cuma di sini kita perlu tambah ID juga ya Jadi kita tahu ID address yang mau di-update jadi ini adalah update Oke selesai kita akan buat validation-nya Nah untuk validation-nya sama seperti create saya akan copy ini adalah update dan kita butuh di sini ID ya nah selesai seperti ini Oke kita akan masuk ke service-nya sekarang Nah untuk servis-nya misalnya di sini ini kita akan ee buat juga asing update user lalu request update address request balikannya adalah promise address respon oke nah Ini sama ya Jadi pertama kita akan validasi dulu habis itu kita cek kontaknya ada atau enggak ya habis itu cek ee addressnya ada atau enggak Nah karena Kara kodenya akan sama dengan ini jadi saya akan ekstrak ya Yang ini J ini kita ekstrak kita bikin di sini asing cek address Mas exis misalnya ya lalu di sini eh kita butuh kontak ID sama ini ya sama ini adalah kontak ID number lalu address ID number seperti ini oke lalu kita returnkan si address-nya ini adalah promise address Oke ini kita ganti jadi address Id ini kita ganti jadi kontak ID Oke selesai ya yang seperti ini untuk pengecekan address-nya jadi yang di sini kita bisa ganti nih semuanya nih ini kita ganti cek address SM exis eh get Kak ID ya get request address ID Oke sorry kita tambahkan wait nah selesai Oke sekarang kita fokus lagi ke yang update-nya jadi yang update-nya eh sama kita akan lakukan validasi dulu cons di sini update request ini adalah update address request sama dengan validation eh service titik validate ini adalah eh address validation titik update lalu di sini request-nya oke lalu kita akan Eh ini copy yang ini Jadi yang pertama kita cek dulu ya kontaknya harus ada ini adalah update request lalu cek lagi addressnya harus ada update request update request dan ini adalah id-nya Oke kalau misalnya addressnya sudah ada nah baru kita update ya nah jadi kita akan coba update nah kita update-nya langsung ke database ya jadi langsung ke prismanya ini misalnya kita jadikan LED ya n jadi di sini nanti kita ambil yang terbarunya address sama dengan waight prisma service titik e address.k update weare-nya di sini adalah id-nya address titik id lalu eh kontak id-nya adalah address titik Kak ID misalnya ya lalu data yang mau diupdate adalah update request Oke selesai lalu kita Return kan eh to address respon si addressnya Oke selesai jadi kita sudah selesai membuat untuk update-nya jadi sekarang kita akan eh fokus ke address controller Oke saya akan copy yang ini yang post ya karena hampir sama Nah kita tambahkan di sini jadinya Put ya lalu di sini Butuh ID address Id ini adalah update dan param-nya kita tambahkan di sini address ID dan ini adalah address ID nah ini bodyinnya adalah update request update address request oke yang ini berarti yang update dan ini kita set kontak id-nya berapa request titik id-nya itu ambil dari address ID nah selesai kita sudah Ee implementasi untuk address controllernya Oke sekarang kita kita akan bikin unit test-nya berarti ya address spek test saya buka ini akan saya copy yang post ya karena hampir mirip seperti ini saya akan pasaste di sini nah ini berarti kita pakainya Put ya Dan ini ada address id-nya Oke berarti yang di sini sebelum jalan kita harus create address juga Nah di sini should be rejected if request is invalid Ya nah tapi kita harus e ambil dulu address-nya sama dengan W test service get address dan Ini pakainya Put dan ini kita tambahkan address ID Oke kalau misalnya tidak valid sama ya harus Balikinnya 400 dan dia ada errorsnya lalu dia harus bisa update misalnya di sini ya update address nah ini saya akan copy sampai [Musik] sini nah seperti ini harusnya Sudah sama nah paling kita Tambahkan lagi yang tidak valid ya yang note font ya J ini saya copy paste saya akan pindahkan ke yang paling bawah Jadi kalau is not font nah tapi yang bodyinnya harus valid dulu ya ini saya copy nah misalnya kontak id-nya tidak ketemu ya plus 1 seperti ini nah ini saya copy lagi nah ini kalau addressnya tidak ketemu jadi ini kita perbaiki dan addressnya kita tambahkan sat nah seperti ini Oke kita coba running semuanya nya oke Ada yang error kita cek errornya apa Oh iya benar ya ini harusnya 404 ya kalau tidak ketemu ini juga harusnya 404 Oke kita coba running lagi semuanya nah sukses ya Berarti untuk update address sudah selesai Sekarang kita akan implementasikan untuk remove address api Oke kita akan buat modelnya dulu ya untuk remove itu sebenarnya sama seperti get address ya Jadi ini saya akan copy paste ini adalah remove karena yang dibutuhkan adalah Kak ID dan juga address ID yang akan diemove-nya Oke Setelah itu kita buat validation-nya ini juga sama ya saya akan copy yang ini oke kita akan buat di service-nya berarti di sini saya akan buat asing remove user request remove address request eh promise address response Oke Berarti sekarang kita validasi dulu ya Eh cons remove request remove address request ama validation service Ti validate eh address validation remove request-nya lalu kita akan coba di sini e cek ya await eh sorry contak service cek Contact Mas exis user username lalu di sini Kak id-nya Ya jadi remove request contact ID Oke selanjutnya juga eh cek address Mas exis ya Nah ini pakainya adalah remove request titik Kak ID dan remove request titik address ID nah oke setelah kita cek dan semuanya ada nah baru kita remove ya Jadi kita di sini akan buat address sama dengan eh Ait Prisma service titik delete eh sorryi eh addressnya dulu address Delete weare nah di sini kita tambahkan id-nya itu sama dengan remove e request titik contak id ya dan kontak id-nya remove request titik sorry ini kontak Id ini address ID Oke kita returnkan to address respon address oke selesai kita akan eh buat yang address controllernya Oke saya akan copy yang get karena hampir mirip Oke jadi di sini kita pakainya delete Ya lalu ini remove misalnya nah kita buat di sini remove address request dan kita Panggil yang remove Oke selesai ya Nah kita akan buat unit test-nya berarti Oke untuk unit test-nya saya akan copy yang get ya karena hampir mirip jadi yang get ini saya akan copy paste di sini kita cek ini berarti eh delete Ya jadi e should be reject if contact is not F ya jadi di sini pakainya yang delete Jadi kalau eh enggak ada emang harus not font kalau addressnya not font juga Sama ini kita pakai delete lalu ini harus bisa delete address ya ini kita pakai Delete nah oh ya responsnya itu ini cukup true ya Jadi ini enggak butuh nih Nah jadi cukup seperti ini ini kita ganti jadi Bulian Oke jadi di sini ya responsnya itu datanya itu to be true Jadi cukup simpel seperti itu aja nah tapi untuk memastikan apakah benar sudah dihapus ya Nah kita bisa eh pakai ini eh get address lagi ya di sini dan expect kalau address result-nya itu to be null ya jadi memang sudah tidak ada lagi di database Oke kita coba running semuanya sukses ya berarti sudah selesai kita untuk implementasi eh remove address Oke api terakhir yang akan kita buat adalah list address untuk list address ya Nah ini lumayan simpel ya karena tidak butuh model karena cukup menggunakan kontak ID saja Oke kita akan langsung ke service-nya berarti ya Jadi kita akan buat di sini asing list ya ini user lalu ee kakct ID nah di sini return-nya kita enggak perlu e returnkan paging ya jadi kita langsung returnkan aja di sini eh address respon tapi dia Aray jadi kita langsung e Tampilkan semua e address aja misalnya ya ya oke seperti biasa kita akan gunakan kontak service untuk cek ya kontaknya harus ada user username dan Kak ID Oke kalau misalnya sudah ada berarti kita ambil addresses-nya ya Nah kita ambil Ait this Prisma service. address. find many ya ini where kontak id-nya itu adalah tak ID nah selesai Nah tinggal kita eh eh returnkan ya si address-nya ini lalu kita transform ya address Nah kita akan convert to address response Oke ini langsung aja seperti ini Oke selesai Nah kita sudah selesai ya untuk list address-nya kita akan eh buat di controllernya Oke saya akan copy yang get karena hampir mirip Oke kita enggak perlu eh tambahkan id di sini ini misalnya list ini juga kita enggak perlu address ya cukup kontak ID saja Oke ini kita hapus Ini berarti kita pakainya yang list ya Nah ini pakainya adalah Kak ID Oke ini kita jadikan Aray Oke selesai Nah sekarang kita sudah selesai ya membuat controllernya Nah sekarang kita akan ee implementasi testing-nya Oke untuk testingnya saya akan copy yang get ya Yang ini oke di sini kita cukup sampai address aja berarti Nah berarti kan kita cuma simpan satu nah ini kalau kontaknya not font ini addressnya kita hapus dulu ini sampai ke sini ya jadi harus keluarnya 404 sudah benar Nah ini enggak perlu ada address ya ini kita hapus Nah ini list address ini juga enggak perlu pakai address kita cukup sampai sini nah ini juga kita bisa ambil misalnya datanya kan dia bentuknya arah ya jadi data ke nol misalnya seperti ini nah seperti ini nah ini kita tambahkan e untuk yang lengnya ya Jadi kita cuma punya satu address Nah kita akan coba running selesai jadi semuanya sudah selesai jadi sekarang kita sudah menyelesaikan semua api-nya Nah kita akan coba ya nanti eh buat kira-kira Bagaimana cara membuat distribution file-nya ya Nah ini kan baru kode typescript-nya tapi nanti saat kita jalankan itu enggak mungkin dalam bentuk typescript kita akan compile jadi javascript nanti kita akan running dalam kode javascript kita bahas di materi selanjutnya Oke kita akan buat distribution file-nya untuk membuat distribution file kita bisa dilihat ya di bagian package gestion di sini ada banyak script yang bisa kita gunakan nah sebelum kita build misalnya teman-teman ada baiknya diformat dulu ya Ee dia menggunakan ee fright Tire ya jadi eh e untuk mempercantik atau memperbaik sebenarnya atau memperbagus ya Eh kodenya ya agar rapi gitu ya l ada Lin juga untuk memperbaiki kalau misalnya ada yang tidak konsisten contohnya teman-teman pakai petik du petik 1 gitu ya gabung-gabung ini nanti diperbaiki ya sesuai dengan aturan eh as link-nya Nah di sini as Lin di sini ya sesuai aturan ini Nah kita akan coba jalankan misalnya jadi kita gunakan NPM Run e eslin misalnya Oh sori bukan esin tapi Lin ya tadi ininya Lin ya Nah Lin ini Oke selesai n lalu kita format juga ya NPM Run format Nah nanti dikasih tahu ya Mana yang diformat mana yang tidak nah ini Kebetulan sudah rapi semua Oke Setelah itu kita akan coba jalankan lagi unitestnya ya untuk memastikan semua unitest setelah kita tambahkan fitur itu tidak bermasalah kita akan coba mulai dari yang user di sini ya kita akan coba running di sini oke ya E sepertinya sukses kita akan coba jalankan yang kontak oke Sukses juga kita akan coba jalankan yang address okees juga ya nah gimana kalau kita jalankan semuanya sekaligus kadang-kadang ada beberapa Unites gitu ya yang ketika ee datanya itu kita ubah dan sebagainya ternyata berdampak ke Unites yang lain Jadi kalau kita jalankan satu-satu kelihatannya benar semua Ya nah tapi apa yang terjadi kalau kita jalankan langsung sekaligus jadi kita bisa gunakan NPM misalnya eh Run test Nah lihat banyak yang error ya Jadi ada 28 yang fail nah biasanya salah satunya adalah kalau misalnya karena dia runningnya secara paralel ya jadi karena dia running paralel otomatis Eh ada masalah nah anggap aja kita pengin jalannya satu-satu ya sekuensial jadi kita bisa modifikasi yang package ini Eh jazz-nya itu kita tambahkan kalau yang e test debug ini ya di sini ada yang belakangnya itu ada run in band nah ini tu e running secara sekuensial kita akan tambahkan di sini misalnya tambahkan sini juga tambahkan di sini Oke kita akan coba running apakah masih bermasalah atau tidak Oke ternyata masih bermasalah ya tapi di sini teman-teman perhatikan Eh problemnya kayaknya e mulai tidak konsisten ya Nah pertanyaannya Kenapa gitu ya Oke kita akan coba running lagi satu persatu dari user spec kita coba running Nah sekarang mulai error nih errornya apa kita akan cek di sini foren key constraint Oke jadi ternyata ketika kita hapus Eh data kontak ya Nah di sini data user di sini user diilihat ternyata dia ada constraint ke tabel lain Ini kemungkinan bekas data di address pack ya itu tidak bersih sehingga ketika kita hapus di user spec itu datanya tidak bisa dihapus karena dia ada constraint ke kontak dan juga address jadi harusnya ya tiap before each seperti ini kita harus Hapus semuanya jadi di sini Misalnya ini kan pakainya ee delate user aja ya nah ini harusnya mungkin kita bikin lagi ya Ee sebuah meod di sini asing Delete all seperti ini ya nah jadi kita await pertama kan delete address dulu lalu await delete contakct lalu await delete eh user ya nah jadi urutannya harus seperti ini harus addressnya dulu dihapus kontak baru yang usernya Oke kita akan balik lagi ke sini berarti yang di sini Kita bisa pakai Delete all nah seperti ini Oke selesai nah ini juga ya yang delete kita ganti jadi Delete all seperti ini yang ini delete kita ganti yang ini delete kita ganti yang ini delete Ya kita ganti juga nah selesai Nah sekarang kita coba running lagi kita lihat hasilnya Nah sudah benar sekarang ya Oke berarti kita perbaiki lagi yang kontak juga yang kontak biar lebih e bagus ya ini delete-nya jangan seperti ini kita akan ganti jadi Delete all ya lalu yang ini kita ganti jadi Delete all juga lalu yang ini kita ganti jadi delete all yang ini juga sama Oke selesai kita coba running lagi sukses semuanya Nah kita balik ke address kalau address sebenarnya sudah benar ya karena dia delete semuanya nah tapi kita akan perbaiki biar e konsisten semuanya Oke kita coba running Oke semuanya sukses kita akan coba ulangi ya jadi NPM Run test kita akan lihat Oke semuanya sekarang sukses berarti unit tes-nya sudah tidak ada masalah oke Jadi kalau misalnya kita sudah pastikan unit testnya tidak ada masalah sekarang kita akan coba build si e projectnya ya atau compile kita bisa gunakan ini script build jadi kita bisa gunakan perintah NPM Run build nah selesai Nah kalau teman-an perhatikan sekarang ada sebuah folder yang namanya D ya atau distribution ya Nah isinya adalah kode-kode javascript kita ya Nah ini kode-kode javascript-nya yang hasil di compile-nya ya nah jadi semuanya ada di sini kode javascript-nya berarti sudah selesai ya sudah berhasil kita compile Nah selanjutnya Gimana cara menjalankannya untuk menjalankannya kita bisa gunakan perintah ini start Nah jadi start ya Nah ini otomatis dia akan ngrunning yang di distribution ini Oh sorryi kalau misalnya yang eh levelnya startnya di production ya Ini pakainya yang ini ya start.k2 prod ya Nah karena dia akan ngrunning yang di distribution yang file-nya main Oke kita akan coba ya Jadi kita gunakan perintah NPM ya Eh Run start prod selesai nah aplikasi Nes kita sekarang sudah berjalan dengan baik ya dengan mode production dan dia akan merunning yang di distribution file ini Oke Nah selanjutnya kita akan Coba lakukan tes secara manual ya Jadi kita akan coba misalnya bikin menggunakan http client nanti kita akan coba ee manggil si api yang sudah kita buat ini Oke sekarang kita akan Coba lakukan manual tes ya oke Ini sudah saya jalankan ya yang tadi Eh dalam mode production Nah sekarang kita akan coba Bikin satu buah file untuk http clientnya nah sebenarnya teman-teman bisa menggunakan Postman misalnya kalau mau gitu ya atau insomnia misalnya apps-nya untuk melakukan pengetesan http client ya bebas atau misalnya Visual Studio code http client itu juga boleh Nah di sini saya akan gunakan ee nama file-nya manual http Oke jadi yang pertama Ya itu berarti kita harus ee registrasi dulu ya Oke kita akan bikin post http local host eh port-nya itu ee tadi itu portnya 3.000 ya oke portnya nya 3.000 Oke api users ya Nah ini content type-nya Jason accept-nya Jason nah ini eh username ya contohnya kanedi name-nya Echo canedy misalnya password-nya rahasia misalnya ya Oke kita aja kita akan coba running nah sukses ya ya Nah ini Lihat hasilnya Oke selanjutnya Ee Kita akan coba login saya akan coba copy ini untuk login kita ke slash login kita cukup pakai username dan password kita coba running nah hasilnya sukses kita dapat token sekarang ya Nah ini tokennya ini Oke ini kita akan e duplicate sekarang Eh get user berarti kita ke current ya Ini pakainya get Ini accept aja dan pakai auutorization ya headernya ya Dan value-nya ini Oke kita coba running nah dapat ya Gimana kalau ini salah nah lihat di dia unutoriz ya dapat errors-nya nah termasuk kalau yang registrasi misalnya kita e kosongkan yang ini kita coba running Nah Lihat error ya validation error Oke Nah selanjutnya kita akan coba eh log out dulu ya log out user ini kita copy Ini pakainya delete kita coba log out Oke true ya Nah sekarang kita get lagi pakai token yang sama nah dia unauorized karena tokennya ini sudah tidak berlaku lagi Oke kita akan coba login ulang pakai token baru ini kita ganti get lagi nah sekarang dapat ya datanya Oke selanjutnya kita akan coba update ya Jadi ini saya [Musik] akan copy paste ke sini ini adalah update user Oke untuk update user kita ke current pakainya page ya lalu Oh ini content type-nya juga json lalu datanya contohnya Saya mau update name-nya Eko Kurniawan kanedi misalnya nah sekarang data name-nya sudah berubah ya Eko Kurniawan kanedi nah gimana kalau kita mau ubah password-nya password-nya ubah menjadi misalnya eh rahasia sat 2 3 4 5 kita akan coba running sepertinya sukses tapi untuk memastikan kita harus eh login lagi ya pakai password yang rahasia Misalnya ini harusnya gagal Nah Lihat userername or password is invalid Nah kita coba 1 2 3 4 5 Nah sudah sukses ya Berarti benar password-nya sudah sukses berarti kita perlu ganti tokennya lagi kita coba running nah sukses Oke jadi ini kita perlu ganti semua tokennya Oke selanjutnya berarti kita mulai ke kontak ya jadi create contact eh post ke http ini api konttas ya lalu content type-nya Jason accept-nya Jason Nah sekarang isinya nih first name misalnya eh Budi last name Nugraha ya emailnya misalnya di sini salah dulu fontnya misalnya kita akan coba running kita lihat Oh ya kita lupa autorizationnya tokennya coba running nah validation eror ya karena emailnya salah budi@example.com misalnya coba running nah sukses ya Nah id-nya ini 332 Oke sekarang kita akan coba ee update ya ini update kakct Ini pakainya Put ya Misalnya Budi Moro ya Nah ini harus ada id-nya tadi 332 Oke kita Put nah berubah ya jadi Buni Moro di sini Oke sekarang kita akan coba get data kontaknya enggak ada content type-nya kita coba nah dapat ya Gimana kalau ini yang salah atau kosong nah ini note font sudah benar Oke sekarang kita akan coba Bikin Kontak baru lagi ya pakai data yang sama id-nya 333 kita akan coba sekarang Eh delete ya delete contakct delete ke 333 running Oke true ya berarti sukses kita coba Delete lagi nah contact is not f Berarti sudah oke oke Sekarang kita akan Coba search ya search kontak Nah kita akan buat eh beberapa data misalnya yang pertama tadi Eh Budi ya lalu Echo misalnya nya Kurniawan ini eh Eko kita coba running dulu sukses lalu misalnya Joko Moro misalnya kita running lagi nah sukses ya Oke kita akan search sekarang tanpa parameter apapun kita coba running nah hasilnya lihat current page size-nya totalnya dan ini ada tiga data ya Budi Eko dan juga Joko nah gimana kalau kita ee ubah misalnya size-nya 1 ya and page-nya 2 misalnya nah ini Total page-nya jadi ya karent page-nya dua dan yang keluar Echo ya Jadi yang pertama tadi itu e kalau page pertama datanya Siapa yang tadi oh Budi ya oke sekarang Ee Kita akan coba ee cari ya yang name-nya adalah Eh chcho misalnya ya eh chcho seperti ini coba running nah dapat ya satu yang Eko Kurniawan ini nah atau misalnya emailnya ada example-nya gitu ya kita coba running nah dapat ya tiga data yang ada exampel-nya atau phone numbernya yang salah ya Misalnya 7777 Nah lihat dia tidak dapat data apapun atau kalau 999 nah dia dapat data seperti ini Oke berarti emang sudah oke semua ya nah jadi kalau misalnya ini lihat semua ya sukses Oke kita sekarang pindah ke address ya jadi create address pos http misalnya api Kak misalnya saya mau mau ke yang ini ya 332 misalnya lalu addresses oke content type-nya adalah Jason accept-nya Jason auutorization-nya jangan lupa lalu ini misalnya street-nya Jalan contoh city-nya kota contoh Province lalu e count Oke kita coba ya Nah sukses ya Jadi udah ada nih 171 ya id-nya Oke kita akan coba get get address 171 saya coba running nah sukses ya Nah sekarang kita Tambahkan lagi misalnya addressnya id-nya sekarang 172 Nah sekarang kita hapus yang 172-nya atau jangan dulu deh kita eh list semua dulu ya list address nah dapat ya dua-duanya 171 dan 172 kita coba update dulu nah nah saya akan copy yang atas update address yang 171 Misalnya ini jalan contoh updated dan ini updated oh ini Put ya pakainya kita coba running oke yang 171 di-update ya Eh datanya Oke sekarang kita akan coba Hapus yang 172 berarti ini saya akan coba copy remove address 172 Ini pakainya delete kita coba running sukses kita coba running kedua kalinya e address not Fone kita coba list lagi nah sekarang cuma tinggal satu data address-nya berarti kita sudah ya E melakukan pengetesan semuanya ya api-nya dan sepertinya sudah oke nah jadi seperti ini ya untuk bikin eh respol api ya menggunakan Nes Jadi sebenarnya lebih simpel ya dibanding kita manual menggunakan eh Express atau juga tab script Oke teman-teman selesai sudah ya materi tentang respol api menggunakan nestjs ya nah jadi sekarang harusnya teman-teman sudah mulai ngerti ya Gimana caranya kalau teman-teman mau bikin restpool api jadi lumayan mudah ya kalau kita mau bikin rpol api itu dengan nestjs ya karena semua framework-nya itu sudah diatur cara kerja anyya jadi kita tinggal mengikuti cara kerja si nestjs-nya jadi nanti tiap programmer ya di perusahaan teman-teman misalnya atau di tempat kerja itu bisa pakai e Framework atau standarisasi yang sama jadi tidak Tiap orang itu punya standar masing-masing jadi kita bisa pakai standar yang sama Oke jadi itu aja ya materi tentang R full api-nya ya nanti juga kalau misalnya ada materi-materi baru atau misalnya update-update terbaru fitur di nesjs nanti kita jug akan juga tambahkan ya update materinya di kelas nesjs ini terutama nanti kita akan juga ee bahas tentang integrasi dengan beberapa teknologi pendukung nesjs ya Seperti contohnya redis gitu ya Ee dan lain-lain ya masih banyak sebenarnya teknologi pendukung yang bisa didukung oleh nesjs ini Oke kalau teman-teman ada kritik saran atau pertanyaan teman-teman bisa masukkan di kolom komentar atau kita bisa diskusi di discord-nya progamer zamanau ya Nah kita ketemu lagi di materi selanjutnya salam programmer zaman now Bye bye