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');
});