311 lines
5.5 KiB
Markdown
311 lines
5.5 KiB
Markdown
# RayLab Core Phase 5 --- Data Architecture
|
|
|
|
## Tujuan
|
|
|
|
Fase 5 mendefinisikan arsitektur data RayLab Core. Fokus fase ini adalah
|
|
bagaimana seluruh domain saling berhubungan pada tingkat penyimpanan
|
|
data, sekaligus menetapkan standar desain database yang akan digunakan
|
|
oleh seluruh modul.
|
|
|
|
> Dokumen ini membahas arsitektur data, bukan implementasi tabel secara
|
|
> rinci.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Prinsip Data Architecture
|
|
|
|
RayLab Core menggunakan prinsip berikut:
|
|
|
|
- Database merepresentasikan domain bisnis.
|
|
- Tidak ada duplikasi data antar domain.
|
|
- Setiap domain memiliki kepemilikan data (data ownership).
|
|
- Seluruh perubahan struktur database dilakukan melalui migration.
|
|
- Integritas data lebih diutamakan daripada kemudahan implementasi.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Pembagian Database Schema
|
|
|
|
Agar database tetap terstruktur, PostgreSQL dibagi menjadi beberapa
|
|
schema.
|
|
|
|
## identity
|
|
|
|
Mengelola identitas pengguna.
|
|
|
|
Entity utama:
|
|
|
|
- users
|
|
- profiles
|
|
- sessions
|
|
- user_groups
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## authorization
|
|
|
|
Mengelola hak akses.
|
|
|
|
Entity utama:
|
|
|
|
- groups
|
|
- roles
|
|
- permissions
|
|
- role_permissions
|
|
- group_roles
|
|
- special_access
|
|
- domain_access
|
|
- resource_access
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## registry
|
|
|
|
Mengelola registrasi aplikasi dan layanan.
|
|
|
|
Entity utama:
|
|
|
|
- applications
|
|
- services
|
|
- domains
|
|
- adapters
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## configuration
|
|
|
|
Mengelola konfigurasi runtime.
|
|
|
|
Entity utama:
|
|
|
|
- settings
|
|
- setting_categories
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## storage
|
|
|
|
Mengelola penyimpanan logis.
|
|
|
|
Entity utama:
|
|
|
|
- storages
|
|
- volumes
|
|
- quotas
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## media
|
|
|
|
Digunakan oleh Media Manager.
|
|
|
|
Entity utama:
|
|
|
|
- libraries
|
|
- folder_templates
|
|
- folder_permissions
|
|
- folder_mappings
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## audit
|
|
|
|
Menyimpan riwayat aktivitas.
|
|
|
|
Entity utama:
|
|
|
|
- audit_logs
|
|
- audit_categories
|
|
- audit_targets
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## system
|
|
|
|
Digunakan oleh sistem internal.
|
|
|
|
Entity utama:
|
|
|
|
- jobs
|
|
- notifications
|
|
- health_checks
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Hubungan Antar Domain
|
|
|
|
``` text
|
|
Identity
|
|
│
|
|
└──── Authorization
|
|
│
|
|
├──── Registry
|
|
├──── Storage
|
|
├──── Media
|
|
└──── Configuration
|
|
|
|
Semua Domain
|
|
│
|
|
▼
|
|
Audit
|
|
```
|
|
|
|
Audit menerima aktivitas dari seluruh domain.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Standar Primary Key
|
|
|
|
Seluruh entity menggunakan:
|
|
|
|
- UUID v7
|
|
|
|
Keuntungan:
|
|
|
|
- Sulit ditebak
|
|
- Konsisten
|
|
- Cocok untuk sistem terdistribusi
|
|
- Performa indeks lebih baik dibanding UUID v4
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Standar Timestamp
|
|
|
|
Seluruh entity memiliki minimal:
|
|
|
|
``` text
|
|
created_at
|
|
updated_at
|
|
deleted_at
|
|
```
|
|
|
|
Jika diperlukan juga memiliki:
|
|
|
|
``` text
|
|
created_by
|
|
updated_by
|
|
deleted_by
|
|
```
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Soft Delete
|
|
|
|
Data penting tidak langsung dihapus.
|
|
|
|
Sebaliknya menggunakan:
|
|
|
|
``` text
|
|
deleted_at
|
|
```
|
|
|
|
Keuntungan:
|
|
|
|
- Audit lebih mudah
|
|
- Restore data memungkinkan
|
|
- Riwayat tetap terjaga
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Metadata
|
|
|
|
Entity yang memerlukan fleksibilitas dapat memiliki kolom:
|
|
|
|
``` text
|
|
metadata (JSONB)
|
|
```
|
|
|
|
Contoh:
|
|
|
|
``` json
|
|
{
|
|
"theme": "dark",
|
|
"avatar": "/avatars/user.png"
|
|
}
|
|
```
|
|
|
|
JSONB digunakan hanya untuk data yang bersifat dinamis, bukan untuk
|
|
relasi utama.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Naming Convention
|
|
|
|
## Schema
|
|
|
|
Menggunakan huruf kecil.
|
|
|
|
Contoh:
|
|
|
|
``` text
|
|
identity
|
|
authorization
|
|
audit
|
|
```
|
|
|
|
## Table
|
|
|
|
Menggunakan bentuk jamak.
|
|
|
|
Contoh:
|
|
|
|
``` text
|
|
users
|
|
roles
|
|
permissions
|
|
```
|
|
|
|
## Column
|
|
|
|
Menggunakan snake_case.
|
|
|
|
Contoh:
|
|
|
|
``` text
|
|
created_at
|
|
updated_at
|
|
display_name
|
|
```
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Migration Strategy
|
|
|
|
Seluruh perubahan struktur database wajib menggunakan Prisma Migration.
|
|
|
|
Tidak diperbolehkan:
|
|
|
|
- Mengubah tabel langsung di production.
|
|
- Mengedit struktur database secara manual.
|
|
- Menghapus migration yang sudah digunakan.
|
|
|
|
Migration menjadi sumber kebenaran (single source of truth) untuk
|
|
struktur database.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Integritas Data
|
|
|
|
Beberapa prinsip yang harus dijaga:
|
|
|
|
- Foreign key digunakan pada seluruh relasi penting.
|
|
- Constraint digunakan untuk menjaga validitas data.
|
|
- Unique index diterapkan pada data yang harus unik.
|
|
- Cascade delete hanya digunakan jika benar-benar diperlukan.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Hasil Akhir Fase 5
|
|
|
|
Pada akhir fase ini RayLab Core memiliki:
|
|
|
|
- Standar arsitektur database.
|
|
- Pembagian schema berdasarkan domain.
|
|
- Aturan relasi data.
|
|
- Standar UUID, timestamp, dan soft delete.
|
|
- Strategi migration.
|
|
- Konvensi penamaan database.
|
|
|
|
Dokumen ini menjadi acuan resmi ketika mulai membuat Prisma Schema dan
|
|
migration pada tahap implementasi.
|