title: 29 Mutation untuk Mengupdate dan Menghapus Data: Panduan Lengkap dengan Contoh Kode
subtitle: Memahami strategi, implementasi, dan best-practices dalam mutation update & delete di GraphQL
author: Senior Software Engineer
date: 2024-06-15
Pendahuluan
Dalam pengembangan aplikasi modern, terutama ketika menggunakan GraphQL, mutation adalah mekanisme utama untuk mengubah (update) dan menghapus (delete) data di server. Namun, seringkali kita menemui pertanyaan mendasar: “Bagaimana cara mengimplementasikan mutation update dan delete yang efisien, aman, dan scalable?”
Pada artikel kali ini, saya akan membedah 29 mutation yang umum dipakai untuk kebutuhan update dan delete, baik secara parsial, bulk, hingga implementasi rutin di industri (seperti soft delete, cascade delete, dan partial update). Selain itu, saya akan memaparkan contoh kode, tabel perbandingan, hingga diagram alur dengan sintaks mermaid, agar Anda punya referensi best-practices dari engineer berpengalaman.
Dasar: Apa Itu Mutation?
Mutation adalah operasi untuk mengubah state data. Dalam praktik sehari-hari, mutation dipakai untuk:
- Membuat data (create)
- Mengubah data (update)
- Menghapus data (delete)
Di artikel ini, saya akan fokus pada dua mutation yang spesifik: update dan delete.
Tabel: 29 Mutation untuk Update & Delete
Mari kita mulai dengan tabel summary. Banyak kombinasi yang dapat digunakan di organisasi modern, baik untuk proses update maupun delete.
No | Mutation Name | Tipe | Skop | Keterangan |
---|---|---|---|---|
1 | updateUser | Update | Single | Update 1 record |
2 | updateUsers | Update | Bulk | Update banyak record |
3 | patchUser | Partial | Single | Update sebagian field |
4 | patchUsers | Partial | Bulk | Partial update multi records |
5 | upsertUser | Create/Update | Single | Update jika ada, else create |
6 | incrementScore | Custom | Single | Custom: tambah/increment |
7 | decrementStock | Custom | Single | Custom: kurangi stok |
8 | softDeleteUser | Soft Delete | Single | Hanya update ‘deletedAt’ |
9 | softDeleteUsers | Soft Delete | Bulk | Soft delete banyak data |
10 | hardDeleteUser | Hard Delete | Single | Hapus data sepenuhnya |
11 | hardDeleteUsers | Hard Delete | Bulk | Hard delete massal |
12 | archiveUser | Archive | Single | Mark jadi ‘archived’ |
13 | restoreUser | Restore | Single | Un-delete/restore |
14 | restoreUsers | Restore | Bulk | Restore massal |
15 | deactivateUser | Status Update | Single | Ubah status (aktif/deactive) |
16 | activateUser | Status Update | Single | Ubah status |
17 | banUser | Custom | Single | Ban user |
18 | unbanUser | Custom | Single | Unban user |
19 | changePassword | Sensitive | Single | Change password only |
20 | unlinkAccount | Delete Link | Single | Delete relasi antar data |
21 | cascadeDelete | Cascade | Single | Hapus data + relasi terkait |
22 | purgeDeleted | Clean Up | Bulk | Buang data ‘deleted’ |
23 | reassignTask | Reassign | Single | Update pindah owner |
24 | migrateData | Migration | Bulk/Single | Massal/migration operation |
25 | toggleFlag | Toggle | Single | Enable/disable flag |
26 | overwriteProfile | Overwrite | Single | Replace/update seluruh objek |
27 | expireSession | Delete | Single | Non-user object delete |
28 | resetQuota | Reset | Single | Balikkan quota ke awal |
29 | anonymizeUser | Privacy | Single | Update field jadi anonim |
Perlu dicatat, pada real-life implementation, mutation ini akan berbeda sesuai dengan kebutuhan bisnis, skema, dan keamanan aplikasi Anda.
Contoh Kode: Mutation Update
Biasanya, GraphQL mutation untuk update data user bisa sederhana seperti di bawah:
mutation updateUser($id: ID!, $input: UserUpdateInput!) {
updateUser(id: $id, input: $input) {
id
name
email
updatedAt
}
}
Handler di Node.js (Express + Apollo):
// resolver.js
const updateUser = async (_, { id, input }, { db }) => {
const updated = await db.User.findByIdAndUpdate(id, input, { new: true });
if (!updated) throw new Error("User not found");
return updated;
};
Dengan pola di atas, Anda bisa mendefinisikan mutation sesuai dengan kebutuhan field yang ingin diupdate (baik full maupun partial).
Case Study: Bulk Update & Soft Delete
Untuk kinerja tinggi (misalnya update banyak data), pattern seperti bulk update dan soft delete jadi lazim digunakan.
Contoh Bulk Update
mutation updateUsers($ids: [ID!]!, $input: UserUpdateInput!) {
updateUsers(ids: $ids, input: $input) {
count
updatedIds
}
}
Handler-nya:
const updateUsers = async (_, { ids, input }, { db }) => {
const result = await db.User.updateMany(
{ _id: { $in: ids }},
{ $set: input }
);
return {
count: result.nModified,
updatedIds: ids,
};
};
Soft Delete Implementation
Daripada menghapus data dari DB, soft delete cukup update kolom deletedAt
:
mutation softDeleteUser($id: ID!) {
softDeleteUser(id: $id) {
id
deletedAt
}
}
Server-side-nya:
const softDeleteUser = async (_, { id }, { db }) => {
return db.User.findByIdAndUpdate(
id,
{ deletedAt: new Date() },
{ new: true }
);
};
Soft delete memudahkan recover (restoreUser), audit log, dan keamanan data.
Diagram Alur: Soft Delete vs Hard Delete
Mengilustrasikan bedanya dengan Mermaid:
flowchart TD A[User click "Delete"] --> B{Soft Delete?} B -- Yes --> C[Update 'deletedAt' field] C --> D[Data tidak tampil, bisa restore] B -- No --> E[Delete from DB] E --> F[Data hilang permanen]
Simulation: Perbandingan Soft Delete & Hard Delete
Fitur | Soft Delete | Hard Delete |
---|---|---|
Reversible? | Ya | Tidak |
Aman Audit? | Ya | Tidak |
Space Saving? | Tidak | Ya |
Complexity | Lebih Susah | Lebih Mudah |
Performance | Biasanya cepat | Sangat cepat |
Best Practices Mutation Update & Delete
Selalu Validasi Input
Cegah updated field yang tidak valid agar integritas data terjaga.Partial vs Full Update
Gunakan partial untuk efisiensi dan keamanan. Jangan selalu expose seluruh object.Bulk Operations
Batch update/delete bisa mempercepat, tapi perlu penanganan concurrency & rollback.Audit Log
Apapun mutation update/delete yang penting, logging sangat vital untuk forensik.Authorization Check
Jangan sampai mutation update/delete sembarangan! Pastikan user puny aksesnya.Soft Delete
Default soft delete, baru hapus permanen via maintenance rutin (purge).
Kesimpulan
Mengelola mutation untuk update dan delete ternyata jauh lebih dari sekadar menulis kode satu baris. Ada berbagai skema, pattern, dan best-practices yang perlu Anda pahami agar aplikasi tetap modular, aman, dan maintainable.
Dengan 29 variasi mutation ini, Anda sebagai engineer bisa mengantisipasi case-case bisnis di masa depan—tanpa perlu refactor besar-besaran.
Jangan lupa selalu lakukan review dan testing pada setiap mutation!
Jika punya pengalaman atau pattern mutation lain yang unik, silakan diskusi di kolom komentar.
Selamat mencoba, semoga data Anda selalu aman dan terkelola dengan baik! 🚀
Further reading:
51. Menggunakan TLS di gRPC Server
Artikel Terhangat
30 Validasi Input di Mutation graphql-go
07 Jul 2025
51. Menggunakan TLS di gRPC Server
07 Jul 2025
50 Protobuf JSON Marshal dan Unmarshal
07 Jul 2025
27 Menulis Skema Mutation di GraphQL
07 Jul 2025
49 Serialisasi dan Deserialisasi Manual
07 Jul 2025

30 Validasi Input di Mutation graphql-go

51. Menggunakan TLS di gRPC Server

50 Protobuf JSON Marshal dan Unmarshal

27 Menulis Skema Mutation di GraphQL
