Page တစ်ခုချင်းစီထဲ database query တန်းရေးရင် အစမှာမြန်ပေမယ့် query ပြောင်းချိန်၊ permission ထည့်ချိန်နဲ့ test ရေးချိန်မှာ ထပ်နေတဲ့ code တွေဖြစ်လာပါတယ်။ Data layer အတိုလေးတစ်လွှာထားတာက project ကြီးလာချိန် အကျိုးပေးပါတယ်။
နားလည်ထားရမယ့် အချက်
lib/data/notes.ts ထဲမှာ list၊ detail၊ create စတဲ့ use-case function တွေထားပါ။ server-only package import လုပ်ထားရင် Client Component က မှားပြီး import လုပ်ချိန် build error နဲ့စောစောသိနိုင်ပါတယ်။ Page ကို ORM result အကုန်မပို့ဘဲ လိုတဲ့ field ပဲ select လုပ်ပါ။ Connection string ကို environment variable မှယူပြီး global object ပေါ်သိမ်းတာမျိုးကို ORM ရဲ့ official Next.js pattern အတိုင်းလုပ်ပါ။
အတူတူ စမ်းရေးကြည့်မယ်
// lib/data/notes.ts
import "server-only";
import { db } from "@/lib/db";
export async function getPublishedNotes() {
return db.note.findMany({
where: { published: true },
select: { id: true, title: true, updatedAt: true },
orderBy: { updatedAt: "desc" },
});
}
export async function getNoteById(id: string) {
return db.note.findUnique({ where: { id } });
}Code က ဘယ်လိုအလုပ်လုပ်သလဲ
getPublishedNotes က published record ပဲရွေးပြီး UI လိုတဲ့ field သုံးခုသာပြန်ပေးပါတယ်။ Page က database implementation မသိဘဲ ဒီ function ကိုခေါ်နိုင်ပါတယ်။
UI က database detail ကိုမသိဘဲ typed note data ကို data layer မှရယူနိုင်မည်။၅ မိနစ် စမ်းကြည့်
getNotesByUser(userId) function ရေးပြီး userId မရှိရင် query မလုပ်ဘဲ error ပြန်ပါ။
Next.js — Fetching Data — Next.js