🗂️ ORM Dasar

Level: Advanced

ORM (Object Relational Mapping) adalah teknik untuk berinteraksi dengan database menggunakan objek, bukan query SQL mentah. ORM mempermudah pengelolaan data dengan sintaks yang lebih intuitif. Bayangkan ORM seperti penerjemah: kita berbicara dengan bahasa JavaScript, ORM menerjemahkannya menjadi SQL/Mongo query.

📖 Konsep Utama ORM

🔹 Sequelize (MySQL/PostgreSQL)

// models/User.js
const { Sequelize, DataTypes } = require("sequelize");
const sequelize = new Sequelize("belajar_db", "root", "", {
  host: "localhost",
  dialect: "mysql"
});

const User = sequelize.define("User", {
  nama: { type: DataTypes.STRING, allowNull: false }
});

module.exports = User;

// app.js
const express = require("express");
const User = require("./models/User");
const app = express();
app.use(express.json());

app.get("/users", async (req, res) => {
  const users = await User.findAll();
  res.json(users);
});

app.post("/users", async (req, res) => {
  const user = await User.create({ nama: req.body.nama });
  res.status(201).json(user);
});

app.listen(3000, () => console.log("Server berjalan di http://localhost:3000"));

🔹 Mongoose (MongoDB)

// models/User.js
const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  nama: { type: String, required: true }
});

module.exports = mongoose.model("User", userSchema);

// app.js
const express = require("express");
const mongoose = require("mongoose");
const User = require("./models/User");
const app = express();
app.use(express.json());

mongoose.connect("mongodb://localhost:27017/belajar_db");

app.get("/users", async (req, res) => {
  const users = await User.find();
  res.json(users);
});

app.post("/users", async (req, res) => {
  const user = new User({ nama: req.body.nama });
  await user.save();
  res.status(201).json(user);
});

app.listen(3000, () => console.log("Server berjalan di http://localhost:3000"));

🛠️ Praktik Kecil

Coba buat model User dengan field nama, lalu gunakan ORM (Sequelize atau Mongoose) untuk menambahkan dan mengambil data user.

🎮 Mini Challenge

Buat API sederhana dengan ORM:

Tugas tambahan: Tambahkan validasi agar harga tidak boleh negatif, dan gunakan relasi sederhana (misalnya Product dimiliki oleh User).