219 lines
3.9 KiB
Markdown
219 lines
3.9 KiB
Markdown
# RayLab Core Phase 2 --- Domain Model
|
|
|
|
## Tujuan
|
|
|
|
Fase 2 mendefinisikan domain bisnis yang dimiliki RayLab Core beserta
|
|
hubungan antar domain. Domain model menjadi dasar implementasi entity,
|
|
service, API, dan database.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Prinsip Domain
|
|
|
|
- Domain mewakili konsep bisnis, bukan tabel database.
|
|
- Setiap domain memiliki tanggung jawab yang jelas.
|
|
- Domain saling berinteraksi melalui service, bukan akses langsung ke
|
|
data domain lain.
|
|
- Seluruh aturan bisnis berada pada domain terkait.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Domain Utama
|
|
|
|
## Identity
|
|
|
|
Mengelola identitas pengguna.
|
|
|
|
### Entity
|
|
|
|
- User
|
|
- Profile
|
|
- Session
|
|
|
|
### Tanggung Jawab
|
|
|
|
- Identitas pengguna
|
|
- Informasi profil
|
|
- Status sesi
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Authorization
|
|
|
|
Mengelola hak akses sistem.
|
|
|
|
### Entity
|
|
|
|
- Group
|
|
- Role
|
|
- Permission
|
|
- Domain Access
|
|
- Resource Access
|
|
- Special Access
|
|
|
|
### Model IAM
|
|
|
|
``` text
|
|
User
|
|
↓
|
|
Group
|
|
↓
|
|
Role
|
|
↓
|
|
Permission
|
|
↓
|
|
Domain Access
|
|
↓
|
|
Resource Access
|
|
↓
|
|
Special Access
|
|
```
|
|
|
|
### Penjelasan
|
|
|
|
**Group** adalah identitas organisasi utama.
|
|
|
|
**Role** merupakan kumpulan tanggung jawab.
|
|
|
|
**Permission** mendefinisikan aksi yang diizinkan.
|
|
|
|
**Domain Access** menentukan aplikasi atau domain yang dapat diakses.
|
|
|
|
**Resource Access** menentukan objek di dalam aplikasi yang boleh
|
|
digunakan.
|
|
|
|
**Special Access** merupakan override khusus untuk user tertentu tanpa
|
|
mengubah group atau role.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Registry
|
|
|
|
Entity:
|
|
|
|
- Application
|
|
- Service
|
|
- Domain
|
|
- Adapter
|
|
|
|
Berfungsi sebagai katalog seluruh layanan RayLab.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Configuration
|
|
|
|
Entity:
|
|
|
|
- Setting
|
|
- Setting Category
|
|
|
|
Digunakan untuk konfigurasi yang dapat diubah saat runtime.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Storage
|
|
|
|
Entity:
|
|
|
|
- Storage
|
|
- Volume
|
|
- Quota
|
|
|
|
Mengelola penyimpanan logis dan alokasi kapasitas.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Media
|
|
|
|
Entity:
|
|
|
|
- Library
|
|
- Folder Template
|
|
- Folder Mapping
|
|
- Folder Permission
|
|
|
|
Media Manager mengendalikan struktur media, sedangkan Jellyfin hanya
|
|
membaca media yang telah disiapkan.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Audit
|
|
|
|
Entity:
|
|
|
|
- Audit Log
|
|
- Audit Category
|
|
- Audit Target
|
|
|
|
Mencatat seluruh aktivitas penting sistem.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## Health
|
|
|
|
Entity:
|
|
|
|
- Health Check
|
|
- Service Status
|
|
|
|
Digunakan untuk memantau kesehatan layanan internal.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
## System
|
|
|
|
Entity:
|
|
|
|
- Job
|
|
- Notification
|
|
|
|
Digunakan untuk proses internal seperti background job dan notifikasi.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Relasi Antar Domain
|
|
|
|
``` text
|
|
Identity
|
|
│
|
|
└── Authorization
|
|
|
|
Authorization
|
|
│
|
|
├── Registry
|
|
├── Media
|
|
├── Storage
|
|
└── Dashboard
|
|
|
|
Registry
|
|
│
|
|
└── Adapter
|
|
|
|
Semua Domain
|
|
│
|
|
└── Audit
|
|
```
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Aturan Domain
|
|
|
|
- Domain hanya memiliki satu tanggung jawab utama.
|
|
- Tidak ada duplikasi data antar domain.
|
|
- Setiap domain memiliki service sendiri.
|
|
- Entity hanya mewakili data dan aturan dasar domain.
|
|
- Komunikasi lintas domain dilakukan melalui service.
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
# Hasil Akhir Fase 2
|
|
|
|
Pada akhir fase ini RayLab Core memiliki model domain yang menjadi acuan
|
|
untuk:
|
|
|
|
- Desain database
|
|
- Layered Architecture
|
|
- API
|
|
- Implementasi modul
|
|
- Pengembangan fitur di masa depan
|