Skema Basis Data
HIMARPL menggunakan dua basis data untuk tujuan yang berbeda:
- CockroachDB dengan Prisma ORM - Untuk proyek inti dan infrastruktur utama
- PostgreSQL (NeonDB) dengan Drizzle ORM - Untuk fungsionalitas bot
Struktur Inti Basis Data
Class Utama
1. Manajemen Pengguna
-
Pengguna
- Informasi inti profil pengguna (nama, email, bio, posisi)
- Dapat menjadi anggota satu departemen
- Memiliki role-based akses (admin/anggota)
- Melacak periode keterlibatan dan aktivitas login
-
Otentikasi
- Akun: Menangani koneksi OAuth (misalnya, login Google)
- Sesi: Mengelola sesi pengguna aktif
- Token Verifikasi: Untuk verifikasi email
2. Manajemen Konten
-
Postingan
- Artikel blog dan entri konten
- Berisi metadata (judul, slug, gambar)
- Melacak status dan tanggal publikasi
- Setiap postingan memiliki satu penulis (Pengguna)
-
Tag Postingan
- Kategorisasi konten hierarkis
- Dapat memiliki hubungan parent-child
- Digunakan untuk mengatur postingan berdasarkan topik
3. Struktur Organisasi
-
Departemen
- Dua jenis utama: BE (Badan Eksekutif) dan DP (Dewan Perwakilan)
- Berisi informasi departemen (nama, akronim, deskripsi)
- Melacak program terkait
- Pengguna dapat ditugaskan ke departemen
-
Media Sosial
- Menghubungkan pengguna dengan profil media sosial mereka
- Menyimpan nama platform, nama pengguna, dan URL
Key Relationship
- Pengguna & Konten
- Setiap postingan harus memiliki satu penulis
- Pengguna dapat membuat beberapa postingan
- Pengguna dapat memiliki beberapa profil media sosial
- Organisasi Konten
- Postingan dapat memiliki beberapa tag
- Tag dapat memiliki hubungan parent-child
- Postingan memiliki slug unik per penulis
- Organisasi
- Pengguna dapat menjadi anggota satu departemen
- Departemen dapat memiliki beberapa pengguna
- Setiap pengguna memiliki peran spesifik (admin/anggota)
Prinsip Desain Skema Prisma
- Type-safe dengan enum yang ditentukan
- Foreign-key Constraints yang tepat
- Dapat dikembangkan untuk ekspansi di masa depan
- Hubungan hierarkis yang jelas
Aturan Skema Prisma
- Gunakan PascalCase untuk semua model
- Gunakan camelCase untuk semua atribut
Struktur Basis Data Bot
Bot menggunakan PostgreSQL (NeonDB) dengan Drizzle ORM untuk mengelola notifikasi dan interaksi pengguna.
Kelas Utama
Tabel Utama: notifications
- Tujuan: Melacak notifikasi obrolan Telegram dan preferensi pengguna
- Prefix Tabel:
bot-himarpl_
(menggunakan pola skema multi-proyek)
Kolom Kunci:
chatId
: Pengidentifikasi unik untuk Telegram Chat (primary key)firstName
: Nama depan pengguna dari TelegramlastName
: Nama belakang pengguna dari Telegramusername
: Nama pengguna TelegramcreatedAt
: Timestamp pembuatan obrolannotifying
: Array dari topik notifikasi yang diikuti pengguna
Detail Teknis:
- Menggunakan type spesifik PostgreSQL (bigserial, varchar, timestamp)
- Termasuk pengindeksan pada chatId untuk pencarian lebih cepat
- Menerapkan timestamp yang beradaptasi dengan zona waktu
- Menggunakan type array untuk preferensi notifikasi
Prinsip Desain Skema Drizzle
- Menggunakan prefix tabel untuk isolasi multi-proyek
- Menerapkan type PostgreSQL yang tepat
- Termasuk optimasi kinerja melalui pengindeksan
- Mengikuti studi kasus terbaik dari Drizzle ORM
Aturan Skema Drizzle
- Gunakan camelCase untuk semua model dalam skema
- Gunakan camelCase untuk semua atribut dalam model
- Gunakan snake_case untuk semua nama tabel dalam basis data
- Gunakan snake_case untuk semua nama atribut dalam basis data