Database

Database adalah komponen inti dari data source tipe database (DataSource). Setiap data source tipe database memiliki instance Database yang sesuai, dapat diakses melalui dataSource.db. Instance database data source utama juga memiliki alias yang lebih singkat app.db. Memahami method umum dari db adalah dasar untuk menulis plugin server.

Komponen Database

Sebuah Database tipikal terdiri dari komponen berikut:

  • Collection: Mendefinisikan struktur tabel data.
  • Model: Sesuai dengan model ORM (biasanya dikelola oleh Sequelize).
  • Repository: Layer repository yang mengenkapsulasi logika akses data, menyediakan method operasi tingkat lebih tinggi.
  • FieldType: Tipe field.
  • FilterOperator: Operator yang digunakan untuk filter.
  • Event: Event siklus hidup dan event database.

Waktu Penggunaan dalam Plugin

Hal yang Cocok Dilakukan pada Tahap beforeLoad

Pada tahap ini operasi database belum dapat dilakukan, cocok untuk registrasi class statis atau listen event.

  • db.registerFieldTypes() — Mendaftarkan tipe field kustom
  • db.registerModels() — Mendaftarkan class model kustom
  • db.registerRepositories() — Mendaftarkan class repository kustom
  • db.registerOperators() — Mendaftarkan operator filter kustom
  • db.on() — Mendengarkan event terkait database

Hal yang Cocok Dilakukan pada Tahap load

Pada tahap ini semua definisi class dan event prasyarat sudah selesai dimuat, kemudian memuat tabel data tidak akan ada yang terlewat atau hilang.

  • db.defineCollection() — Mendefinisikan tabel data baru
  • db.extendCollection() — Memperluas konfigurasi tabel data yang ada

Namun jika untuk mendefinisikan tabel built-in plugin, lebih disarankan ditempatkan di direktori ./src/server/collections, lihat Collections Tabel Data.

Operasi Data

Database menyediakan dua cara utama untuk mengakses dan mengoperasikan data:

Operasi melalui Repository

const repo = db.getRepository('users');
const user = await repo.findOne({ filter: { id: 1 } });

Layer Repository biasanya digunakan untuk mengenkapsulasi logika bisnis, seperti pagination, filter, pemeriksaan hak akses, dll.

Operasi melalui Model

const UserModel = db.getModel('users');
const user = await UserModel.findByPk(1);

Layer Model langsung sesuai dengan entitas ORM, cocok untuk operasi database tingkat lebih rendah.

Pada Tahap Apa Operasi Database Dapat Dilakukan?

Siklus Hidup Plugin

TahapDapat Operasi Database
staticImportNo
afterAddNo
beforeLoadNo
loadNo
installYes
beforeEnableYes
afterEnableYes
beforeDisableYes
afterDisableYes
removeYes
handleSyncMessageYes

Event App

TahapDapat Operasi Database
beforeLoadNo
afterLoadNo
beforeStartYes
afterStartYes
beforeInstallNo
afterInstallYes
beforeStopYes
afterStopNo
beforeDestroyYes
afterDestroyNo
beforeLoadPluginNo
afterLoadPluginNo
beforeEnablePluginYes
afterEnablePluginYes
beforeDisablePluginYes
afterDisablePluginYes
afterUpgradeYes

Event/Hook Database

TahapDapat Operasi Database
beforeSyncNo
afterSyncYes
beforeValidateYes
afterValidateYes
beforeCreateYes
afterCreateYes
beforeUpdateYes
afterUpdateYes
beforeSaveYes
afterSaveYes
beforeDestroyYes
afterDestroyYes
afterCreateWithAssociationsYes
afterUpdateWithAssociationsYes
afterSaveWithAssociationsYes
beforeDefineCollectionNo
afterDefineCollectionNo
beforeRemoveCollectionNo
afterRemoveCollectionNo

Tautan Terkait