Study
Yesod

Persistent Entity Definition

Penjelasan

Persistent adalah ORM bawaan ekosistem Yesod yang mendukung banyak backend database (SQLite, PostgreSQL, MySQL) dengan API yang sama. Entity didefinisikan bukan lewat kode Haskell biasa, melainkan lewat DSL deklaratif di file config/models (atau models.persistentmodels), yang kemudian oleh Template Haskell diubah menjadi tipe data Haskell, instance PersistEntity, dan tipe kunci (misalnya ProdukId) secara otomatis. Setiap baris field diikuti tipe datanya (Text, Int, Bool, UTCTime, dan seterusnya), dan field opsional ditandai dengan Maybe. Fitur seperti deriving Show Eq bisa ditambahkan agar entity mendukung operasi umum. Karena semuanya digenerasi saat compile, field yang salah nama atau tipe akan langsung terdeteksi kompiler, bukan saat runtime seperti banyak ORM dinamis lain.

Contoh Konsep

-- config/models
Produk
    nama Text
    harga Int
    deskripsi Text Maybe
    createdAt UTCTime default=now()
    deriving Show Eq

User
    email Text
    password Text
    UniqueEmail email
    deriving Show Eq

Praktikum

Tambahkan definisi entity Artikel di config/models dengan field judul (Text), isi (Text), dan publishedAt (UTCTime, opsional).

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Gunakan constraint Unique (mis. UniqueEmail email) langsung di definisi entity untuk menegakkan keunikan di level database, bukan hanya validasi di kode aplikasi.