Contoh pembuatan API menggunakan Express.JS , GraphQL dan Prisma JS


const express = require('express');
const { buildSchema } = require('graphql');
const { createHandler } = require('graphql-http/lib/use/express');

const { PrismaClient } = require('@prisma/myprisma');

const prisma = new PrismaClient();
const app = express();

var schema = buildSchema(`
    type Planning {
      id: ID
      branch: String
      item_line: String
      item_notes: String
      qty_planning: Int
    }

    input PlanningInput {
        branch: String
        item_line: Int
        mtrlcode: String
        item_notes: String
        qty_planning: Int
    }

    type Mutation {
        insert_planning(data: PlanningInput!): String
        update_planning(id: ID!, data: PlanningInput!): String
        delete_planning(id: ID!): String
    }
  
    type Query {
        get_planning(id: ID!): Planning
        get_all_plannings(limit: Int!, page: Int!): [Planning]  # Pagination dengan limit dan page
    }
`);

const root = {
    // Create
    async insert_planning({ data }) {
        try {
            await prisma.planning.create({
                data: data, // Menyimpan data perencanaan baru
            });
            return "Planning inserted successfully";
        } catch (error) {
            console.error(error);
            return "Failed to insert planning";
        }
    },

    // Read (Get by ID)
    async get_planning({ id }) {
        try {
            const planning = await prisma.planning.findUnique({
                where: { id: parseInt(id) },
            });
            if (!planning) {
                return null; // Jika tidak ditemukan, kembalikan null
            }
            return planning;
        } catch (error) {
            console.error(error);
            return null;
        }
    },

    // Read (Get all with pagination)
    async get_all_plannings({ limit, page }) {
        try {
            // Hitung skip berdasarkan page dan limit
            const skip = (page - 1) * limit;

            const plannings = await prisma.planning.findMany({
                skip: skip, // Lewati sejumlah data berdasarkan page
                take: limit, // Ambil sejumlah data berdasarkan limit
            });

            return plannings;
        } catch (error) {
            console.error(error);
            return [];
        }
    },

    // Update
    async update_planning({ id, data }) {
        try {
            await prisma.planning.update({
                where: { id: parseInt(id) },
                data: data,
            });
            return "Planning updated successfully";
        } catch (error) {
            // console.error(error);
            return "Failed to update planning";
        }
    },

    // Delete
    async delete_planning({ id }) {
        try {
            await prisma.planning.delete({
                where: { id: parseInt(id) },
            });
            return "Planning deleted successfully";
        } catch (error) {
            console.error(error);
            return "Failed to delete planning";
        }
    }
};

app.use(express.json());
app.all(
    '/myroute',
    createHandler({
        schema: schema,
        rootValue: root,
    }),
);

app.listen(3001, () => {
    console.log('Server berjalan di http://localhost:3001');
});