Lewati ke konten

Skema Basis Data

HIMARPL menggunakan dua basis data untuk tujuan yang berbeda:

  1. CockroachDB dengan Prisma ORM - Untuk proyek inti dan infrastruktur utama
  2. PostgreSQL (NeonDB) dengan Drizzle ORM - Untuk fungsionalitas bot

Struktur Inti Basis Data

Class Diagram Basis Data Inti

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

  1. Pengguna & Konten
  • Setiap postingan harus memiliki satu penulis
  • Pengguna dapat membuat beberapa postingan
  • Pengguna dapat memiliki beberapa profil media sosial
  1. Organisasi Konten
  • Postingan dapat memiliki beberapa tag
  • Tag dapat memiliki hubungan parent-child
  • Postingan memiliki slug unik per penulis
  1. 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 Telegram
  • lastName: Nama belakang pengguna dari Telegram
  • username: Nama pengguna Telegram
  • createdAt: Timestamp pembuatan obrolan
  • notifying: 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