Data Model terdapat di tiga lokasi pada library keluaran Pagonila.
Seluruh data model basis data dan enumerasi basis data terdapat pada 'your-blueprint/model'
.
Struktur data disimpan dalam bentuk interface
Typescript. Misal pada DBML terdapat tabel
seperti berikut:
dan relasi seperti berikut:
maka pada 'your-blueprint/model'
akan ada sebuah interface dengan nama ExaminationSession
dengan isi seperti berikut:
Relasi foreign key dari user_id
dan examination_id
otomatis ditambahkan pada kolom instance
sebagai data hasil join dengan tabel primary user: User
dan examination: Examination
.
Relasi primary key yang menunjuk ke tabel ExaminationSession
otomatis dideteksi sebagai
relasi satu ke banyak (1 to N). Data satu ke banyak ini langsung ditambahkan sebagai
larik (list) dari daftar instance tabel yang merujuk ke tabel ExaminationSession
, dengan pseudo-format
penulisan:
list <Nama Tabel N> <Foreign Key pada Tabel N>: <Nama Tabel N>[]
Seluruh model pada
/model
telah ditambah dekorator TypeORM sehingga seluruh model tersebut dapat langsung digunakan untuk mengakses basis data.
Daftar endpoint API yang didefinisikan pada API Specification didaftarkan sebagai interface
Typescript dalam namespace Schema
. Misal pada API Specification terdapat data sbb:
pada namespace Schema
akan tersedia struktur data berikut:
setiap endpoint API akan menghasilkan dua struktur data utama yaitu:
Struktur data request dihasilkan dengan memecah struktur data berdasarkan lokasi data pada request API tersebut. Terdapat empat lokasi data yang didukung saat ini:
body
header
query
path
Setiap lokasi data diatas akan didefinisikan masing-masing sebagai satu buah interface. Misal seperti pada contoh di bawah:
key data
akan masuk ke dalam kelompok lokasi body
menghasilkan satu class:
Penamaan class diberikan dengan pseudo-format berikut:
<Metode Endpoint> Request <Lokasi Data> <Path Endpoint>
Jika terdapat parameter lain dengan lokasi yang sama (body) maka akan ditambahkan ke class body, sedangkan jika lokasinya berbeda maka akan menambah interface baru sesuai lokasinya.
Seluruh data pada parameters
dengan lokasi yang mungkin berbeda-beda akan dikumpulkan pada
sebuah interface request sesuai endpoint API. Misal pada contoh di bawah:
menghasilkan interface request untuk endpoint POST /masuk
:
Penamaan interface diberikan dengan pseudo-format berikut:
<Metode Endpoint> Request <Path Endpoint>
Data nilai kembalian API return
menghasilkan sebuah interface/type response sesuai endpoint API.
Misal pada contoh di bawah dimana response diisi dengan bentuk objek children
:
data children akan diubah terlebih dahulu menjadi class response dengan endpoint POST /masuk
dan menghasilkan:
Penamaan class diberikan dengan pseudo-format berikut:
<Metode Endpoint> Response <Path Endpoint> Body
Kemudian untuk response utama, objek response dibungkus menjadi sebuah type
menjadi:
Penamaan type/interface diberikan dengan pseudo-format berikut:
<Metode Endpoint> Response <Path Endpoint>
Data schemas
yang terdapat pada API Specification menghasilkan masing-masing interface
dari setiap skema, misal pada contoh berikut:
Skema PayloadLogin
akan tersedia pada namespace Schema
:
Namespace Schema
yang terdapat pada /driver
sama persis seperti yang dihasilkan
pada /engine
.
Data Model terintegrasi dengan library TypeORM. Seluruh model tabel dan enumerasi telah ditambahkan dekorator TypeORM. Integrasi ini memungkinkan seluruh model basis data yang dihasilkan Pagonila langsung digunakan selayaknya menggunakan model TypeORM.
TypeORM juga memiliki fitur auto-generated migration yang memungkinkan pengguna men-generate script migrasi basis data secara otomatis dan mengaplikasikan script migrasi tersebut ke basis data langsung.
Berikut contoh berkas konfigurasi TypeORM menggunakan data model Pagonila:
Lalu untuk menjalankan auto-generated migration dan melakukan migrasi basis data,
dapat dilakukan dengan menambahkan script berikut pada package.json
Untuk men-generate berkasi migrasi basis data dapat dilakukan dengan cara berikut:
dan untuk melakukan migrasi ke basis data dengan cara berikut: