Lewati ke konten utama

Arsitektur

Pendahuluan

Dokumen ini menjelaskan arsitektur frontend Ravenxcope, arah dependensi antar lapisan, alur inisialisasi runtime, dan keputusan desain penting yang membentuk basis kode.


Pola Arsitektur

Frontend mengikuti arsitektur React praktis yang berorientasi pada fitur (feature-oriented). Pohon rute (route tree) dan metadata navigasi dipusatkan di src/app/routes.tsx, tata letak global berada di src/core/layout, kerangka rute/halaman yang dapat digunakan kembali berada di src/core/page, akses data dipusatkan di src/lib/api.ts, dan layar fitur berada di bawah src/modules.

Entry Pointmain.tsxApp CoreApp.tsx & RoutesApp ShellLayout & NavigationFeature ViewsModules & ScreensData & RuntimeAPI, Auth, Hooks

Tanggung Jawab Lapisan

LapisanFile / Folder UtamaTanggung Jawab
Entrisrc/main.tsxMemasang (mount) React, mengimpor CSS global, inisialisasi i18n
Peruteansrc/app/App.tsx, src/app/routes.tsx, src/app/PrivateRoutes.tsxMendefinisikan rute publik/privat, metadata rute dasbor, item navigasi, dan guard rute
Tata Letaksrc/core/layout/Shell aplikasi, sidebar, header, dropdown pengguna, pengalih bahasa, drawer seluler, bingkai konten/footer
Kerangka Halamansrc/core/page/Pembungkus halaman rute, header/toolbar halaman, kartu tabel, status kosong/pemuatan, transisi
UI Fitursrc/modules/{sensors,users,roles,organizations,analytics}Halaman tingkat rute, partial khusus fitur, dialog, dan sub-alur domain
UI Bersamasrc/components/ui/Button, card, dialog, table, select, sheet, tooltip, dan primitif lainnya
Hook Datasrc/hooks/useApi.tsHook pengambilan data kecil untuk pembacaan sumber daya umum
Klien APIsrc/lib/api.tsInstans Axios, interceptor, grup titik akhir, serialisasi kueri
Authsrc/lib/auth.tsPembantu sesi cookie dan pembantu izin
Konfigurasisrc/config/appConfig.tsPenguraian konfigurasi runtime, validasi, dan pembekuan (freezing)
Tipesrc/types/index.tsTipe payload API, entitas, filter, analitik, dan komponen
Lokalisasisrc/i18n.ts, src/locales/Pengaturan i18next dan katalog pesan

Arah Dependensi

Session GuardFeature ComponentsData Hooks (useApi)API Client (lib/api)Auth (lib/auth)Backend HTTP APIModules & Partial Views

Aturan dependensi saat ini:

  • Komponen fitur memanggil objek api pusat alih-alih membuat klien Axios ad-hoc.
  • apiClient melampirkan token bearer melalui auth.getToken().
  • appConfig adalah satu-satunya sumber konfigurasi runtime yang telah dibersihkan.
  • Primitif UI Bersama tidak memanggil API backend.
  • Tipe dipusatkan di src/types/index.ts, tidak diletakkan bersama per fitur.

Inisialisasi Runtime

Urutan boot browser adalah:

  1. Pemuatan Bundle: index.html memuat bundle skrip yang telah dibangun dan config.js.
  2. Inisialisasi Pengaturan: src/main.tsx mengimpor src/i18n.ts, src/index.css, dan App.
  3. Lokalisasi: src/i18n.ts memuat sumber daya Bahasa Inggris dan Bahasa Indonesia, memilih bahasa, dan menyimpan perubahan.
  4. Pemasangan Aplikasi: App memasang provider global, router, dan komponen tata letak inti.
  5. Auth Guard: Rute dasbor privat memanggil auth.isAuthenticated() sebelum perenderan.
  6. Hidrasi Shell: Shell aplikasi dasbor mengambil data pengguna saat ini dan merender navigasi.
  7. Pemuatan Fitur: Tampilan fitur mengambil data backend melalui api atau hook kustom.

Keputusan Desain Penting

  1. Objek API tunggal yang terpusat - src/lib/api.ts mengelompokkan semua panggilan backend berdasarkan domain.
  2. Penyimpanan sesi berbasis cookie - Token akses, ID pengguna, dan ID organisasi disimpan melalui js-cookie.
  3. Konfigurasi runtime alih-alih build ulang - window.__APP_CONFIG__ memungkinkan perubahan konfigurasi tanpa melakukan build ulang.
  4. Hook asinkron manual alih-alih React Query - Aplikasi menggunakan useState dan useEffect untuk pengambilan data.
  5. Shell dasbor tingkat rute - /dashboard merender AppShell dengan Outlet bersarang.
  6. Bendera fitur (Feature flags) - UI chat AI analitik memeriksa bendera frontend dan status backend.
  7. Penanganan respons yang fleksibel - Komponen mentoleransi beberapa bentuk respons selama stabilisasi kontrak.

Hutang Arsitektur yang Diketahui

AreaMasalahDampak
Komposisi shell aplikasiAppShell.tsx memusatkan tata letak standar vs workspaceTetap sebagai satu-satunya batas tata letak global
Organisasi halaman tingkat ruteHalaman rute berada di bawah modules/*/pagesLanjutkan menjaga orkestrasi di halaman
Tampilan fitur besarTampilan analitik memiliki orkestrasi data yang substansialFokus pada hook domain untuk ekstraksi lebih lanjut
Chrome halaman yang dapat digunakan kembaliRoutePage dan DataTableCard adalah kerangka standarGunakan untuk halaman manajemen baru
Konsistensi tata letakHalaman daftar menggunakan kerangka tabel bersamaJaga agar halaman CRUD di masa depan tetap sejajar
Konstanta ruteROUTES dan dashboardRoutes mencakup navigasiPusatkan jalur di src/lib/constants.ts
State/pengambilan dataState server dikelola secara manualLogika pemuatan/kesalahan yang duplikat
Permukaan APISemua titik akhir dalam satu api.ts besarFile dengan tingkat perubahan tinggi
Organisasi tipeSemua tipe domain dalam satu types/index.tsLebih sulit untuk dinavigasi
Kontrak responsBeberapa bentuk respons didukungPotensi penyimpangan kontrak
PengujianTidak ada rangkaian pengujian frontend khususRisiko regresi untuk alur inti