dal
Alasan ada: semua query ditulis di satu tempat dekat data, jadi cek akses nanti bisa ditaruh di sana dan tidak ada jalur baca atau tulis yang melewatinya.
Mode: fullstack. Otomatis memasang db.
npm create nextjs-kit@latest my-app -- --mode fullstack --modules dalYang berubah di proyek
Section titled “Yang berubah di proyek”src/server/dal/todos.tsberisigetTodos()danaddTodo().- Fitur
todosmemakainya:queries.tsmemanggilgetTodos,actions.tsmemanggiladdTodo. - Penyimpanan di memori (
demo-store) dihapus dari proyek hasil generate. - CI proyek mendapat service Postgres, langkah
db:migrate, dantest:db.
export async function getTodos(): Promise<TodoRow[]> { return db.select().from(schema.todos).orderBy(desc(schema.todos.createdAt));}Fitur memanggil fungsi DAL, bukan db langsung. Salin pola ini untuk tabel baru: satu berkas DAL
per agregat, dan semua query di dalamnya.
Test integrasi
Section titled “Test integrasi”src/server/dal/todos.integration.test.ts memakai Postgres sungguhan, bukan mock:
npm run db:upnpm run db:migratenpm run test:dbnpm run test (unit test) mengecualikan berkas *.integration.test.ts, sehingga tidak butuh
database. Test integrasi memakai data dengan judul unik dan membersihkan barisnya sendiri.
Bersama auth: todos per pengguna
Section titled “Bersama auth: todos per pengguna”Kalau auth dipasang bersama dal, sebuah integrasi (dal-auth) otomatis aktif:
todosmendapat kolomuser_id(migrasi0002_todos_owner), denganON DELETE CASCADE.getTodos()danaddTodo()memanggilrequireUser()sendiri dan hanya menyentuh baris milik pengguna itu. Cek akses ada di DAL, jadi tidak ada jalur yang melewatinya, siapa pun pemanggilnya./todosditambahkan keprotectedPrefixes, dan E2E todos masuk lebih dulu.- Action memakai
unstable_rethrowsupayaredirect()darirequireUser()tidak tertelantry/catch(pengguna yang belum masuk diarahkan ke login, bukan melihat “Terjadi kesalahan”).
user_id sengaja boleh null: kalau tabel sudah berisi baris sebelum auth dipasang, migrasi
tidak gagal dan tidak menghapus data. Baris lama itu tidak terlihat oleh siapa pun sampai Anda
memberinya pemilik.
Catatan
Section titled “Catatan”Modul ini mengganti baris tertentu di queries.ts dan actions.ts milik template base. Kalau
template berubah sehingga baris itu tidak ditemukan lagi, pembuatan proyek gagal dengan pesan yang
jelas, bukan menghasilkan kode yang salah.