Thuta Learning
ရှာဖွေရန်
AdvancedWeb Developmentintermediate

Database Layer ကို သီးခြားခွဲခြင်း

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Data access layer ဖန်တီးရန်
  • Server-only code ကိုကာကွယ်ရန်
  • UI နှင့် database schema ကို အလွန်မချိတ်ရန်

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 အတိုင်းလုပ်ပါ။

အတူတူ စမ်းရေးကြည့်မယ်

typescript
// 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 ကိုခေါ်နိုင်ပါတယ်။

You should see
UI က database detail ကိုမသိဘဲ typed note data ကို data layer မှရယူနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

getNotesByUser(userId) function ရေးပြီး userId မရှိရင် query မလုပ်ဘဲ error ပြန်ပါ။

Next.js — Fetching DataNext.js

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • ORM client နဲ့ database secret ကို Client Component ထဲ import လုပ်ခြင်း
  • လိုအပ်တာထက် field အများကြီး select လုပ်ပြီး sensitive data ပါပို့ခြင်း

လေ့ကျင့်ခန်း

getNotesByUser(userId) function ရေးပြီး userId မရှိရင် query မလုပ်ဘဲ error ပြန်ပါ။

You'll know it worked when: UI က database detail ကိုမသိဘဲ typed note data ကို data layer မှရယူနိုင်မည်။