(Part 2) Membuat CRUD sederhana menggunakan Node Js, Express Js, Prisma, dan PostgreSQL
Tags: node, prisma, postgres, express
Published: 2022-11-13 08:43:44

Setelah kita berhasil mempersiapkan project dan tabel kita, selanjutnya kita akan membuat function CRUD yang nantinya digunakan pada router kita.

## Membuat controller
Pertama yang akan kita lakukan adalah membuat controller yang akan kita letakan pada folder controllers, dan buat file dengan nama userController.js pada folder controllers

### Membuat fungsi getAllData
- Setelah itu masukan kode berikut pada userController.js
```
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient

export const getAllData = async (req, res) => {
    try {
        const user = await prisma.user.findMany()

        res.status(200).json({
            status: 'Success',
            data: user
        })
    } catch (error) {
        res.status(500).json({
            status: 'error',
            message: error
        })
    }
}
```

fungsi getAllData akan melakukan proses mendapatkan semua data dengan menggunakan prisma.user.findMany(), dan mengirimkan response json dengan status 200
- Setelah itu kita buka routes/users.js, lalu ubah menjadi berikut
```
import express from 'express'
import { getAllData } from '../controllers/userController.js'
let router = express.Router()

router.get('/', getAllData)

export default router
```
yang pertama kita lakukan adalah melakukan import fungsi getAllData pada userController.js, lalu kita gunakan pada router.get('/', getAllData) yang berarti ketika kita mengunjungi route localhost:3000/users/ maka system akan menjalankan fungsi getAllData.
- Buka terminal lalu jalankan command berikut untuk menjalankan project
```
npm run dev
```
- Lalu buka postman atau insomnia, disini saya menggunakan insomnia. Dan buat request collection baru

![insomnia](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ce36lbbwt5mjqj5c0mz.png)
- Setelah itu tambahkan HTTP Request

![Insomnia GET](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/awqh7v6x99akeh7cem99.png)
- Lalu atur seperti berikut

![Get insomnia](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jb5mn30wi07iy6qbetb.png)
- Lalu tekan sent

![Fungsi get](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bblzrpjszjrypapvsy6j.png)
Jika tampilan insomnia kalian sama dengan saya, maka fungsi get pertama anda berhasil dibuat, sehingga anda sudah menyelesaikan salah satu fungsi CRUD, yaitu Read.


### Membuat fungsi create
- Kita buka kembali file userController.js, lalu tambahkan fungsi create seperti berikut:
```
export const getAllData = async (req, res) => {
    try {
        const user = await prisma.user.findMany()

        res.status(200).json({
            status: 'Success',
            data: user
        })
    } catch (error) {
        res.status(500).json({
            status: 'error',
            message: error
        })
    }
}

export const create = async (req, res) => {
    try {
        await prisma.user.create({
            data: {
                email: req.body.email,
                name: req.body.name
            }
        })

        res.status(200).json({
            status: 'success',
            message: 'Successfully insert user data'
        })
    } catch (error) {
        res.status(500).json({
            status: 'error',
            message: error
        })
    }
}
```
- Lalu buka file routes/users.js, lalu tambahkan code
```
router.post('/', create)
```
dan pada bagian import userController.js pada file users.js tambahkan create

![create](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbvlbdqseot9ub0kke0z.png)

- Lalu pada insomnia atau postman, tambahkan HTTP Request baru dengan endpoint http://localhost:3000/users dengan method POST dan tambahkan request email dan name, lalu click send
- Jika tampilan postman seperti dibawah, maka fungsi create anda berhasil dan anda sudah menyelesaikan 2 fungsi CRUD yaitu Create dan Read

![Insomnia create](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eur9dn4eh2lpjsrx9ff1.png)
- Untuk memastikan data sudah masuk kedalam database, anda dapat membuka HTTP Request sebelumnya pada endpoint http://localhost:3000/users dengan method GET

![Insomnia check user](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ukxji45nsg4lz9gvmd3.png)

### Membuat fungsi update
- Buka file userController.js, lalu tambahkan fungsi update seperti berikut:
```
export const update = async (req, res) => {
    const checkNumber = !isNaN(req.params.id)

    if (!checkNumber) {
        throw 'Please enter valid number'
    }

    const id = parseInt(req.params.id)

    try {
        await prisma.user.update({
            where: {
                id: id
            },
            data: {
                email: req.body.email,
                name: req.body.name
            }
        })

        res.status(200).json({
            status: 'success',
            message: 'Successfully update user data'
        })
    } catch (error) {
        res.status(500).json({
            status: 'error',
            message: error
        })
    }
}
```
- Setelah itu buka file routes/users.js, dan tambahkan endpoint baru seperti berikut:
```
router.put('/:id', update)
```
dan juga jangan lupa import fungsi update, agar tidak error. Sehingga keseluruhan code pada file users.js adalah seperti berikut:

![update func](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k23aiea8cnrezmk027r8.png)
- Buka aplikasi insomnia atau postman, lalu tambahkan HTTP Request, dan masukan endpoint http://localhost/users/1 dengan method PUT, dan masukan response

- Jika tampilan kalian sama seperti gambar dibawah, maka fungsi update dapat berjalan dengan normal

![update test](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtajyrzljhxba3rqddnt.png)
- Untuk melihat apakah data benar benar berhasil di update, kalian dapat membuka endpoint get sebelumnya, maka data sudah di ubah

![updated user](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lcglp1pulfd2oe2okqso.png)

### Membuat fungsi deleteUser
- Ini merupakan fungsi terakhir kita. Buka file userController.js lalu tambahkan fungsi deleteUser seperti berikut:
```
export const deleteUser = async (req, res) => {
    const checkNumber = !isNaN(req.params.id)

    if (!checkNumber) {
        throw 'Please enter valid number'
    }

    const id = parseInt(req.params.id)

    try {
        await prisma.user.delete({
            where: {
                id: id,
            }
        })

        res.status(200).json({
            status: 'success',
            message: 'Successfully delete user data'
        })
    } catch (error) {
        res.status(500).json({
            status: 'error',
            message: error
        })
    }
}
```
- Setelah itu, buka file routes/users.js dan import deleteUser function dan tambahkan baris baru dibawah endpoint terakhir, seperti berikut:
```
router.delete('/:id', deleteUser)
```
Sehingga total keseluruhan code file users.js adalah seperti berikut

![user full](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rux5e7q1k0bvwk5h7pjx.png)
- Setelah itu, coba jalankan endpoint http://localhost:3000/users/1 dengan method DELETE pada insomnia atau postman
- Jika tampilan insomnia kalian sama dengan gambar dibawah, maka fungsi deleteUser kalian berhasil

![success delete](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vbas43l52eg1cepwllap.png)
- Selanjutnya silahkan cek endpoint GET, apakah data user sudah terhapus atau belum.

![success delete 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnsb52n67lz8okp7k9g8.png)
Jika tampilan sama dengan gambar di atas, maka data user anda sudah berhasil di hapus.

### Penutup
Terimakasih banyak karena sudah membaca dan mengikuti tutorial ini, kalian dapat mengunduh source code part 2 ini [disini](https://github.com/whytrno/dev.to-crud-prisma/tree/part2), atau jika anda ingin mengunduh seluruh source code, kalian dapat mengunduhnya [disini](https://github.com/whytrno/dev.to-crud-prisma)