selamat buat teman - teman sudah sampai ke tahap ini, sebelumnya kita sudah menyelesaikan tahap setup project. selanjutnya kita akan membuat api untuk Categories terlebih dahulu, sebelum kita membuat apinya , tentunya kita perlu membuat tabel categories nya terlebih dahulu, tetapi kita membuat nya melalui codingan, bukan melalui GUI MongoDB nya. lalu caranya gimana ??
dalam file model.js yang ada dalam folder server/app/api/categories , teman - teman perlu membuat model / schema dari tabel categories ini, teman - teman bisa menuliskan code berikut dalam model.js :
const mongoose = require("mongoose");
const { model, Schema } = mongoose;
let categorySchema = Schema(
{
name: {
type: String,
minlength: [3, "Panjang nama kategori minimal 3 karakter"],
maxlength: [20, "Panjang nama kategori maksimal 20 karakter"],
required: [true, "nama kategori harus diisi"],
},
},
{ timestamps: true }
);
module.exports = model("Category", categorySchema);
sekarang model / schema dari tabel categories ini sudah berhasil kita buat. gampang bukan membuat model / tabel MongoDB.
langkah selanjutnya adalah membuat logika dari project ini. untuk kasus kali ini, kita tidak membuat logika - logika dalam file controller. terus dimana kita buat logika - logika dari project kita ?
kita akan membuat folder baru dengan nama service/mongoose didalam folder app
server/
app/
api/
db/
**service/
mongoose**
config.js
app.js
package.json
lalu di dalam folder mongoose kita buat file dengan nama **categories.js,**teman-teman bisa menuliskam code berikut di dalam categories.js :
// kita perlu import dulu model dari tabel categories yang telah dibuat
const Category = require("../../api/categories/model");
// Service untuk mendapatkan semua kategori
const getAllCategories = async () => {
try {
const categories = await Category.find({});
return categories;
} catch (error) {
throw new Error("Error retrieving categories: " + error.message);
}
};
// Service untuk mendapatkan kategori berdasarkan ID
const getCategoryById = async (id) => {
try {
const category = await Category.findById(id);
if (!category) {
throw new Error("Category not found");
}
return category;
} catch (error) {
throw new Error("Error retrieving category with id :" + id);
}
};
// Service untuk membuat kategori baru
const createCategory = async (data) => {
try {
const newCategory = new Category(data);
await newCategory.save();
return newCategory;
} catch (error) {
throw new Error("Error creating category: " + error.message);
}
};
// Service untuk update kategori
const updateCategory = async (id, data) => {
try {
const updatedCategory = await Category.findByIdAndUpdate(id, data, {
new: true,
});
if (!updatedCategory) {
throw new Error("Category not found");
}
return updatedCategory;
} catch (error) {
throw new Error("Error updating category: " + error.message);
}
};
// Service untuk menghapus kategori
const deleteCategory = async (id) => {
try {
const deletedCategory = await Category.findByIdAndDelete(id);
if (!deletedCategory) {
throw new Error("Category not found");
}
return deletedCategory;
} catch (error) {
throw new Error("Error deleting category: " + error.message);
}
};
module.exports = {
getAllCategories,
getCategoryById,
createCategory,
updateCategory,
deleteCategory,
};
Berikut penjelasan dari kode yang kamu buat untuk service manajemen kategori menggunakan Mongoose:
Import Model Kategori
const Category = require("../../api/categories/model");
Baris ini mengimpor model Category dari file model yang telah kamu buat sebelumnya di ../../api/categories/model. Model ini digunakan untuk berinteraksi dengan koleksi categories dalam database MongoDB.
Service untuk Mendapatkan Semua Kategori
const getAllCategories = async () => {
try {
const categories = await Category.find({});
return categories;
} catch (error) {
throw new Error("Error retrieving categories: " + error.message);
}
};
Fungsi ini mengambil semua kategori yang ada dalam database menggunakan metode find() dari Mongoose. Jika ada error selama proses ini, error akan dilempar dengan pesan yang sesuai.
Service untuk Mendapatkan Kategori Berdasarkan ID
const getCategoryById = async (id) => {
try {
const category = await Category.findById(id);
if (!category) {
throw new Error("Category not found");
}
return category;
} catch (error) {
throw new Error("Error retrieving category with id :" + id);
}
};
Fungsi ini mencari kategori berdasarkan ID yang diberikan. Jika kategori tidak ditemukan, maka error akan dilempar dengan pesan "Category not found". Jika ada masalah lain, pesan error umum juga akan dilempar.
Service untuk Membuat Kategori Baru
const createCategory = async (data) => {
try {
const newCategory = new Category(data);
await newCategory.save();
return newCategory;
} catch (error) {
throw new Error("Error creating category: " + error.message);
}
};
Fungsi ini membuat kategori baru menggunakan data yang diberikan. Setelah membuat instance baru dari model Category, fungsi ini menyimpannya ke database dengan metode save(). Jika ada error, akan dilempar pesan error yang relevan.
Service untuk Mengupdate Kategori
const updateCategory = async (id, data) => {
try {
const updatedCategory = await Category.findByIdAndUpdate(id, data, {
new: true,
});
if (!updatedCategory) {
throw new Error("Category not found");
}
return updatedCategory;
} catch (error) {
throw new Error("Error updating category: " + error.message);
}
};
Fungsi ini mengupdate kategori berdasarkan ID yang diberikan dengan data baru. Parameter new: true memastikan bahwa hasil yang dikembalikan adalah kategori yang telah diperbarui. Jika kategori tidak ditemukan, akan dilemparkan error "Category not found".
Service untuk Menghapus Kategori
const deleteCategory = async (id) => {
try {
const deletedCategory = await Category.findByIdAndDelete(id);
if (!deletedCategory) {
throw new Error("Category not found");
}
return deletedCategory;
} catch (error) {
throw new Error("Error deleting category: " + error.message);
}
};
Fungsi ini menghapus kategori berdasarkan ID yang diberikan. Jika kategori berhasil dihapus, data kategori yang dihapus akan dikembalikan. Jika tidak ditemukan, akan dilemparkan error "Category not found".
Ekspor Fungsi-fungsi Service
module.exports = {
getAllCategories,
getCategoryById,
createCategory,
updateCategory,
deleteCategory,
};
Bagian ini mengekspor semua fungsi service sehingga bisa digunakan di tempat lain dalam aplikasi. Ini membuat fungsi-fungsi tersebut tersedia untuk diimpor dan digunakan di dalam controller atau bagian lain dari aplikasi.
Secara keseluruhan, kode ini adalah implementasi CRUD (Create, Read, Update, Delete) yang baik untuk mengelola kategori di database MongoDB dengan menggunakan Mongoose.
nah teman - teman sudah membuat logika dari kategorinya, langkah selanjutnya apa ?? ya benar, menggunakan logika bisnis ini di controller categories.silahkan teman - teman ketikan code berikut dalam controller.js dalam folder server/app/api/categories