# Dokumentasi Struktur Proyek - Desa Darmasaba ## 1. Ringkasan Proyek **Desa Darmasaba** adalah aplikasi web komprehensif untuk layanan pemerintahan desa di Desa Darmasaba, Kabupaten Badung, Bali. Aplikasi ini berfungsi sebagai platform digital untuk layanan pemerintah, informasi publik, dan keterlibatan masyarakat. ### Tech Stack | Kategori | Teknologi | |----------|-----------| | **Framework Frontend** | Next.js 15 dengan App Router | | **Bahasa** | TypeScript (strict mode) | | **Styling** | Mantine UI v7/v8 + Custom CSS | | **Backend API** | Elysia.js (high-performance TypeScript framework) | | **Database** | PostgreSQL | | **ORM** | Prisma 6.3.1 | | **Runtime** | Bun | | **State Management** | Jotai + Valtio + SWR | | **Autentikasi** | iron-session + JWT | | **File Storage** | Seafile | | **Rich Text Editor** | TipTap | | **Charts** | Recharts + Chart.js | | **Maps** | Leaflet + react-leaflet | | **UI Components** | Mantine, PrimeReact, Framer Motion | | **Validasi** | Zod | | **Testing** | Vitest (unit), Playwright (E2E) | | **Deployment** | Docker + GitHub Actions + Portainer | | **Registry** | GitHub Container Registry (GHCR) | --- ## 2. Struktur Direktori ``` desa-darmasaba/ ├── .github/workflows/ # GitHub Actions CI/CD │ ├── docker-publish.yml # Auto build & push saat tag v* │ ├── publish.yml # Manual build & push ke GHCR │ ├── re-pull.yml # Manual re-pull image di Portainer │ └── script/ # Script deployment │ ├── prisma/ │ ├── schema.prisma # Database schema (2413 baris, 100+ model) │ ├── seed.ts # Database seeder utama │ └── _seeder_list/ # Data seed per modul │ ├── desa/ # Seed berita, gallery, layanan, dll │ ├── ekonomi/ # Seed APBDes, demografi, dll │ ├── inovasi/ # Seed ide inovatif, desa digital │ ├── keamanan/ # Seed keamanan, kontak darurat │ ├── kesehatan/ # Seed fasilitas kesehatan, posyandu │ ├── kependudukan/ # Seed data penduduk │ ├── lingkungan/ # Seed lingkungan desa │ ├── pendidikan/ # Seed sekolah, beasiswa │ ├── ppid/ # Seed PPID │ └── landing-page/ # Seed landing page │ ├── src/ │ ├── app/ # Next.js App Router │ │ ├── _com/ # Komponen global (SplashScreen, WebVitals) │ │ ├── admin/ # Panel administrasi (protected) │ │ │ ├── _com/ # Komponen admin shared │ │ │ ├── (dashboard)/ # Dashboard admin dengan route groups │ │ │ │ ├── _com/ # Komponen dashboard shared │ │ │ │ ├── _state/ # State khusus dashboard │ │ │ │ ├── _utils/ # Utilitas dashboard │ │ │ │ ├── auth/ # Autentikasi admin │ │ │ │ ├── desa/ # Admin: berita, gallery, profil, layanan │ │ │ │ ├── ekonomi/ # Admin: APBDes, demografi, BUMDes │ │ │ │ ├── inovasi/ # Admin: ide inovatif, desa digital │ │ │ │ ├── keamanan/ # Admin: keamanan, kontak darurat │ │ │ │ ├── kependudukan/# Admin: banjar, agama, umur, migrasi │ │ │ │ ├── kesehatan/ # Admin: puskesmas, posyandu, wabah │ │ │ │ ├── landing-page/# Admin: konten landing page │ │ │ │ ├── lingkungan/ # Admin: konservasi, sampah, penghijauan │ │ │ │ ├── musik/ # Admin: musik desa │ │ │ │ ├── pendidikan/ # Admin: sekolah, beasiswa, perpustakaan │ │ │ │ ├── ppid/ # Admin: PPID, IKM, permohonan │ │ │ │ └── user&role/ # Admin: manajemen user & role │ │ │ ├── auth/ # Halaman login admin │ │ │ ├── csv/ # Upload/demo CSV │ │ │ ├── images/ # Manajemen gambar │ │ │ └── upload-demo/ # Demo upload │ │ │ │ │ ├── api/ # API routes (Elysia.js) │ │ │ ├── [[...slugs]]/ # Catch-all route untuk Elysia │ │ │ │ ├── _lib/ # Modul API per domain │ │ │ │ │ ├── auth/ # Autentikasi API │ │ │ │ │ ├── desa/ # API modul desa │ │ │ │ │ ├── ekonomi/ # API modul ekonomi │ │ │ │ │ ├── fileStorage/ # API file storage │ │ │ │ │ ├── inovasi/ # API modul inovasi │ │ │ │ │ ├── keamanan/# API modul keamanan │ │ │ │ │ ├── kependudukan/ # API modul kependudukan │ │ │ │ │ ├── kesehatan/ # API modul kesehatan │ │ │ │ │ ├── landing_page/ # API landing page │ │ │ │ │ ├── lingkungan/ # API modul lingkungan │ │ │ │ │ ├── pendidikan/ # API modul pendidikan │ │ │ │ │ ├── ppid/ # API modul PPID │ │ │ │ │ ├── search/ # API pencarian global │ │ │ │ │ └── user/ # API user management │ │ │ │ └── route.ts # Entry point Elysia server │ │ │ ├── admin/ # API khusus admin │ │ │ ├── auth/ # API autentikasi │ │ │ ├── health/ # Health check endpoint │ │ │ ├── layout/ # API layout │ │ │ ├── news/ # API berita │ │ │ ├── subscribe/ # API subscription (email) │ │ │ └── tts/ # Text-to-Speech (ElevenLabs) │ │ │ │ │ ├── context/ # React contexts │ │ │ └── MusicContext.tsx # Context untuk pemutar musik │ │ │ │ │ ├── darmasaba/ # Halaman publik (front-facing) │ │ │ ├── _com/ # Komponen shared publik │ │ │ │ ├── main-page/ # Komponen halaman utama │ │ │ │ ├── Navbar.tsx # Navigasi utama │ │ │ │ ├── Footer.tsx # Footer │ │ │ │ ├── FixedPlayerBar.tsx # Music player bar │ │ │ │ ├── LoadDataFirstClient.tsx # Data prefetching │ │ │ │ ├── NewsReader.tsx # Component pembaca berita │ │ │ │ ├── globalSearch.tsx # Pencarian global │ │ │ │ └── scrollToTopButton.tsx │ │ │ ├── (pages)/ # Halaman publik utama │ │ │ │ ├── desa/ # Halaman: profil, berita, gallery, layanan │ │ │ │ ├── ekonomi/ # Halaman: APBDes, BUMDes, demografi │ │ │ │ ├── inovasi/ # Halaman: inovasi desa │ │ │ │ ├── keamanan/ # Halaman: keamanan lingkungan │ │ │ │ ├── kependudukan/# Halaman: data penduduk │ │ │ │ ├── kesehatan/ # Halaman: fasilitas kesehatan │ │ │ │ ├── lingkungan/ # Halaman: lingkungan desa │ │ │ │ ├── module/ # Halaman modul tambahan │ │ │ │ ├── musik/ # Halaman: musik desa │ │ │ │ ├── pendidikan/ # Halaman: pendidikan │ │ │ │ └── ppid/ # Halaman: PPID publik │ │ │ ├── (tambahan)/ # Halaman tambahan │ │ │ ├── layout.tsx # Layout utama publik │ │ │ └── page.tsx # Landing page utama │ │ │ │ │ ├── login/ # Halaman login │ │ ├── registrasi/ # Halaman registrasi │ │ ├── waiting-room/ # Halaman waiting room │ │ ├── terms-of-service/ # Halaman syarat layanan │ │ ├── test-upload/ # Halaman tes upload │ │ ├── validasi/ # Halaman validasi │ │ ├── coba/ # Halaman percobaan │ │ ├── percobaan/ # Halaman percobaan lainnya │ │ ├── layout.tsx # Root layout (MantineProvider) │ │ ├── page.tsx # Root page │ │ ├── error.tsx # Error boundary │ │ ├── not-found.tsx # 404 page │ │ ├── globals.css # Global styles │ │ └── favicon.ico │ │ │ ├── components/ │ │ └── admin/ # Komponen admin reusable │ │ ├── AdminThemeProvider.tsx │ │ ├── DarkModeToggle.tsx │ │ ├── UnifiedSurface.tsx │ │ └── UnifiedTypography.tsx │ │ │ ├── con/ # Constants & konfigurasi │ │ └── colors.ts # Palet warna │ │ │ ├── lib/ # Utility functions │ │ ├── router/ # Router utilities │ │ ├── api-auth.ts # Autentikasi API │ │ ├── api-fetch.ts # Helper fetch API │ │ ├── EnvStringParse.ts # Parser environment variables │ │ ├── prisma.ts # Prisma client instance │ │ ├── seafile-auth-service.ts # Integrasi Seafile │ │ └── session.ts # iron-session helper │ │ │ ├── middlewares/ # Next.js middleware │ ├── state/ # Global state (Jotai/Valtio) │ │ ├── darkModeStore.ts # State dark mode │ │ ├── state-layanan.ts # State layanan │ │ ├── state-list-image.ts # State daftar gambar │ │ └── state-nav.ts # State navigasi │ │ │ ├── store/ # State management tambahan │ └── types/ # TypeScript type definitions │ ├── public/ # Static assets │ └── assets/ # Gambar, icon, dll │ ├── uploads/ # Directory upload (runtime) │ └── image/ # Upload gambar │ ├── .env.example # Contoh environment variables ├── .gitignore ├── AGENTS.md # Panduan untuk AI coding agents ├── Dockerfile # Docker image definition ├── docker-entrypoint.sh # Entry point container ├── next.config.ts # Next.js configuration ├── package.json # Dependencies & scripts ├── tsconfig.json # TypeScript configuration ├── biome.json # Biome linter config ├── eslint.config.mjs # ESLint config ├── NOTE.md # Catatan deployment └── QWEN.md # Konteks & memori proyek ``` --- ## 3. Arsitektur Aplikasi ### 3.1 Arsitektur Keseluruhan ``` ┌─────────────────────────────────────────────────────────┐ │ Client (Browser) │ └────────────┬────────────────────────────┬────────────────┘ │ │ │ Next.js Pages │ API Calls │ (SSR/CSR) │ ▼ ▼ ┌────────────────────────┐ ┌────────────────────────────┐ │ Next.js 15 App Router│ │ Elysia.js API Server │ │ - Pages publik │ │ - RESTful endpoints │ │ - Admin dashboard │ │ - File upload │ │ - Server components │ │ - Swagger docs (/api/docs│ │ - Client components │ │ - Static file serving │ └────────────┬───────────┘ └────────────┬───────────────┘ │ │ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────┐ │ PostgreSQL Database │ │ (via Prisma ORM) │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Seafile File Storage │ │ (Images & Documents) │ └─────────────────────────────────────────────────────────┘ ``` ### 3.2 Next.js App Router - Menggunakan **App Router** (bukan Pages Router) - Route groups `(dashboard)`, `(pages)`, `(tambahan)` untuk organisasi tanpa mempengaruhi URL - Layout bersarang: root layout -> admin/darmasaba layout -> page layouts - `force-dynamic` digunakan untuk menghindari error prerendering - View Transitions API diaktifkan via `next-view-transitions` ### 3.3 Elysia.js API Server - Terintegrasi sebagai **catch-all route** di `/api/[[...slugs]]/route.ts` - Semua HTTP methods (GET, POST, PATCH, DELETE, PUT) di-handle oleh Elysia - Plugin yang digunakan: - `@elysiajs/cors` - CORS configuration - `@elysiajs/static` - Static file serving dari `/uploads` - `@elysiajs/swagger` - API documentation di `/api/docs` - `@elysiajs/jwt` - JWT authentication - `@elysiajs/cookie` - Cookie handling - Endpoint file upload: `/api/upl-img`, `/api/upl-img-single`, `/api/upl-csv` - Image serving: `/api/img/:name` dengan resize support ### 3.4 Rendering Strategy - **Server Components**: Halaman publik untuk SEO optimal - **Client Components**: Komponen interaktif (form, state, animasi) - **Force Dynamic**: Beberapa halaman menggunakan `force-dynamic` - **ISR**: Caching header untuk assets (1 jam cache) --- ## 4. Modul Domain ### 4.1 Profil Desa (Desa) **Admin**: `/admin/desa/*` | **Publik**: `/darmasaba/desa/*` | Sub-modul | Fungsi | |-----------|--------| | `berita` | CRUD berita/pengumuman desa | | `gallery` | Galeri foto dan video | | `layanan` | Manajemen layanan desa | | `penghargaan` | Penghargaan yang diraih | | `pengumuman` | Pengumuman publik | | `potensi` | Potensi desa (pertanian, pariwisata, dll) | | `profil` | Profil desa (sejarah, visi misi, lambang, maskot, perangkat) | ### 4.2 PPID (Pejabat Pengelola Informasi dan Dokumentasi) **Admin**: `/admin/ppid/*` | **Publik**: `/darmasaba/ppid/*` | Sub-modul | Fungsi | |-----------|--------| | `profil-ppid` | Profil pejabat PPID | | `struktur-ppid` | Struktur organisasi PPID | | `visi-misi-ppid` | Visi dan misi PPID | | `daftar-informasi-publik` | Daftar informasi yang tersedia | | `dasar-hukum` | Dasar hukum PPID | | `permohonan-informasi-publik` | Form permohonan informasi | | `permohonan-keberatan-informasi-publik` | Form keberatan | | `indeks-kepuasan-masyarakat` | Survei kepuasan masyarakat (IKM) | ### 4.3 Kesehatan **Admin**: `/admin/kesehatan/*` | **Publik**: `/darmasaba/kesehatan/*` | Sub-modul | Fungsi | |-----------|--------| | `fasilitas-kesehatan` | Data puskesmas, klinik, dokter | | `posyandu` | Manajemen posyandu | | `program-kesehatan` | Program kesehatan desa | | `info-wabah-penyakit` | Informasi wabah | | `penanganan-darurat` | Prosedur penanganan darurat | | `kontak-darurat` | Kontak darurat kesehatan | | `data-kesehatan-warga` | Statistik kesehatan warga | | `artikel-kesehatan` | Artikel kesehatan | ### 4.4 Ekonomi **Admin**: `/admin/ekonomi/*` | **Publik**: `/darmasaba/ekonomi/*` | Sub-modul | Fungsi | |-----------|--------| | `APBDes` | Anggaran Pendapatan dan Belanja Desa (hierarki items + realisasi) | | `PADesa-pendapatan-asli-desa` | Pendapatan asli desa | | `demografi-pekerjaan` | Demografi pekerjaan penduduk | | `jumlah-penduduk-miskin` | Data penduduk miskin | | `jumlah-pengangguran` | Data pengangguran | | `lowongan-kerja-lokal` | Lowongan kerja lokal | | `pasar-desa` | Data pasar desa | | `program-kemiskinan` | Program penanganan kemiskinan | | `sektor-unggulan-desa` | Sektor unggulan ekonomi | | `Struktur-Organisasi-Dan-Sk-Pengurus-BumDes` | Struktur BUMDes | ### 4.5 Kependudukan **Admin**: `/admin/kependudukan/*` | **Publik**: `/darmasaba/kependudukan/*` | Sub-modul | Fungsi | |-----------|--------| | `data-banjar` | Data banjar (unit wilayah tradisional Bali) | | `distribusi-agama` | Distribusi agama penduduk | | `distribusi-umur` | Distribusi umur penduduk | | `migrasi-penduduk` | Data migrasi (masuk/keluar) | ### 4.6 Pendidikan **Admin**: `/admin/pendidikan/*` | **Publik**: `/darmasaba/pendidikan/*` | Sub-modul | Fungsi | |-----------|--------| | `beasiswa-desa` | Program beasiswa | | `bimbingan-belajar-desa` | Bimbingan belajar | | `data-pendidikan` | Data statistik pendidikan | | `info-sekolah` | Informasi sekolah | | `pendidikan-non-formal` | Pendidikan non-formal | | `perpustakaan-digital` | Perpustakaan digital | | `program-pendidikan-anak` | Program pendidikan anak | ### 4.7 Keamanan **Admin**: `/admin/keamanan/*` | **Publik**: `/darmasaba/keamanan/*` | Sub-modul | Fungsi | |-----------|--------| | `keamanan-lingkungan-pecalang-patwal` | Keamanan lingkungan (pecalang Bali) | | `kontak-darurat` | Kontak darurat keamanan | | `laporan-publik` | Laporan publik | | `pencegahan-kriminalitas` | Pencegahan kriminalitas | | `polsek-terdekat` | Data polsek terdekat | | `tips-keamanan` | Tips keamanan | ### 4.8 Lingkungan **Admin**: `/admin/lingkungan/*` | **Publik**: `/darmasaba/lingkungan/*` | Sub-modul | Fungsi | |-----------|--------| | `data-lingkungan-desa` | Data lingkungan desa | | `edukasi-lingkungan` | Edukasi lingkungan | | `gotong-royong` | Kegiatan gotong royong | | `konservasi-adat-bali` | Konservasi adat Bali | | `pengelolaan-sampah-bank-sampah` | Bank sampah | | `program-penghijauan` | Program penghijauan | ### 4.9 Inovasi **Admin**: `/admin/inovasi/*` | **Publik**: `/darmasaba/inovasi/*` | Sub-modul | Fungsi | |-----------|--------| | `ajukan-ide-inovatif` | Form pengajuan ide inovatif | | `desa-digital-smart-village` | Program desa digital | | `info-teknologi-tepat-guna` | Info teknologi tepat guna | | `kolaborasi-inovasi` | Kolaborasi inovasi | | `layanan-online-desa` | Layanan online desa | | `program-kreatif-desa` | Program kreatif desa | ### 4.10 Musik Desa **Admin**: `/admin/musik/*` | **Publik**: `/darmasaba/musik/*` - Manajemen audio dan cover musik desa - Fixed player bar di halaman publik - Context provider untuk state pemutar musik ### 4.11 Landing Page **Admin**: `/admin/landing-page/*` | Sub-modul | Fungsi | |-----------|--------| | `desa-anti-korupsi` | Konten anti-korupsi | | `prestasi-desa` | Prestasi yang diraih | | `sdgs-desa` | SDGs (Sustainable Development Goals) | | `profil-landing-page` | Profil dan media sosial | ### 4.12 User & Role **Admin**: `/admin/user&role/*` - Manajemen pengguna admin - Manajemen role dan permission - Manajemen menu akses --- ## 5. Database Schema ### 5.1 Overview Database menggunakan **PostgreSQL** dengan **Prisma ORM** (versi 6.3.1). Schema terdiri dari **2413 baris** dengan **100+ model**. ### 5.2 Model Utama #### FileStorage Model sentral untuk semua file (gambar, dokumen, audio): ```prisma model FileStorage { id String @id @default(cuid()) name String @unique realName String path String mimeType String category String // "image" / "document" / "audio" / "other" link String isActive Boolean @default(true) // Relasi ke 50+ model lain (Berita, PotensiDesa, GalleryFoto, dll) } ``` #### AppMenu & AppMenuChild Menu navigasi aplikasi: ```prisma model AppMenu { id String @id @default(cuid()) name String @unique link String isActive Boolean @default(true) AppMenuChild AppMenuChild[] } ``` #### User & Role (Autentikasi Admin) - `User` - Data pengguna admin - `Role` - Role/peran pengguna - `Menu` - Menu akses per role #### Modul Desa - `Berita` - Berita desa (dengan featured image & gallery) - `GalleryFoto` / `GalleryVideo` - Galeri media - `Layanan` - Layanan desa - `Pengumuman` - Pengumuman - `PotensiDesa` - Potensi desa - `ProfileDesaImage` - Gambar profil desa - `ProfilPerbekel` - Profil perbekel (kepala desa) - `PejabatDesa` - Pejabat desa - `Penghargaan` - Penghargaan - `PrestasiDesa` - Prestasi - `MediaSosial` - Media sosial desa #### Modul PPID - `StrukturPPID` - Struktur organisasi - `PosisiOrganisasiPPID` - Posisi dengan hierarki - `PegawaiPPID` - Data pegawai - `ProfilePPID` - Profil PPID - `VisiMisiPPID` - Visi misi - `DasarHukumPPID` - Dasar hukum - `DaftarInformasiPublik` - Daftar informasi - `PermohonanInformasiPublik` - Permohonan informasi - `FormulirPermohonanKeberatan` - Formulir keberatan - `IndeksKepuasanMasyarakat` - IKM - `Responden` + lookup tables - Data responden IKM #### Modul Kesehatan - `Puskesmas` - Data puskesmas - `Posyandu` - Data posyandu - `ProgramKesehatan` - Program kesehatan - `FasilitasKesehatan` - Fasilitas - `InfoWabahPenyakit` - Info wabah - `PenangananDarurat` - Penanganan darurat - `KontakDarurat` - Kontak darurat - `ArtikelKesehatan` - Artikel #### Modul Ekonomi - `APBDes` & `APBDesItem` - Anggaran desa (hierarki tree structure) - `RealisasiItem` - Realisasi anggaran (multiple per item) - `PasarDesa` - Pasar desa - `PegawaiBumDes` - Pegawai BUMDes - `StrukturBumDes` - Struktur BUMDes - `DemografiPekerjaan` - Demografi pekerjaan - `JumlahPendudukMiskin` - Data kemiskinan - `JumlahPengangguran` - Data pengangguran - `LowonganKerjaLokal` - Lowongan kerja - `ProgramKemiskinan` - Program kemiskinan - `SektorUnggulanDesa` - Sektor unggulan - `PendapatanAsli` - Pendapatan asli desa #### Modul Kependudukan - `DataBanjar` - Data banjar - `DistribusiAgama` - Distribusi agama - `DistribusiUmur` - Distribusi umur - `MigrasiPenduduk` - Migrasi #### Modul Pendidikan - `InfoSekolah` - Data sekolah - `BeasiswaDesa` - Beasiswa - `BimbinganBelajar` - Bimbingan belajar - `PendidikanNonFormal` - Pendidikan non-formal - `DataPerpustakaan` - Perpustakaan #### Modul Keamanan - `KeamananLingkungan` - Keamanan lingkungan - `MenuTipsKeamanan` - Tips keamanan - `PencegahanKriminalitas` - Pencegahan kriminalitas - `PolsekTerdekat` - Polsek terdekat - `LaporanPublik` - Laporan publik #### Modul Lingkungan - `DataLingkunganDesa` - Data lingkungan - `KonservasiAdatBali` - Konservasi adat - `BankSampah` - Bank sampah - `ProgramPenghijauan` - Penghijauan - `GotongRoyong` - Gotong royong - `EdukasiLingkungan` - Edukasi #### Modul Inovasi - `ProgramInovasi` - Program inovasi - `DesaDigital` - Desa digital - `InfoTekno` - Info teknologi - `KolaborasiInovasi` + `MitraKolaborasi` - Kolaborasi - `LayananOnlineDesa` - Layanan online - `ProgramKreatifDesa` - Program kreatif - `Ajukan` - Pengajuan ide #### Modul Musik - `MusikDesa` - Musik desa - `audioFile` -> FileStorage - `coverImage` -> FileStorage #### Landing Page - `DesaAntiKorupsi` + `KategoriDesaAntiKorupsi` - `SdgsDesa` - SDGs - `PrestasiDesa` + `KategoriPrestasiDesa` - `MediaSosial` - `LandingPage_Layanan` #### APBDes (Struktur Hierarki) ```prisma model APBDesItem { kode String // "4", "4.1", "4.1.2" uraian String // Nama item anggaran Float // Anggaran dalam Rupiah tipe String? // "pendapatan" | "belanja" | "pembiayaan" level Int // 1, 2, 3 parentId String? // Self-referencing untuk tree children APBDesItem[] totalRealisasi Float @default(0) // Auto-calculated selisih Float @default(0) // totalRealisasi - anggaran persentase Float @default(0) // (totalRealisasi / anggaran) * 100 realisasiItems RealisasiItem[] } ``` ### 5.3 Pola Umum Model Hampir semua model mengikuti pola: ```prisma model Contoh { id String @id @default(cuid()) // ... fields createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? @default(now()) // Soft delete isActive Boolean @default(true) // Soft delete flag } ``` --- ## 6. API Routes ### 6.1 Struktur API Semua API routes ditangani oleh **Elysia.js** di `/src/app/api/[[...slugs]]/route.ts` ### 6.2 API Groups | Prefix | Modul | Contoh Endpoints | |--------|-------|------------------| | `/api/layanan` | Layanan | `GET /api/layanan` | | `/api/potensi` | Potensi | `GET /api/potensi` | | `/api/desa/*` | Desa | CRUD berita, gallery, profil, dll | | `/api/ppid/*` | PPID | CRUD struktur, profil, permohonan | | `/api/kesehatan/*` | Kesehatan | CRUD puskesmas, posyandu, dll | | `/api/ekonomi/*` | Ekonomi | CRUD APBDes, BUMDes, demografi | | `/api/kependudukan/*` | Kependudukan | CRUD banjar, demografi | | `/api/pendidikan/*` | Pendidikan | CRUD sekolah, beasiswa | | `/api/keamanan/*` | Keamanan | CRUD keamanan, kontak darurat | | `/api/lingkungan/*` | Lingkungan | CRUD data lingkungan | | `/api/inovasi/*` | Inovasi | CRUD program inovasi | | `/api/landing-page/*` | Landing Page | CRUD konten landing page | | `/api/user/*` | User | CRUD user admin | | `/api/user/role/*` | Role | CRUD role & permission | | `/api/search` | Search | Pencarian global | | `/api/file-storage/*` | File Storage | CRUD file storage | | `/api/img/:name` | Image | GET gambar dengan resize | | `/api/upl-img` | Upload | Upload multiple images | | `/api/upl-img-single` | Upload | Upload single image | | `/api/upl-csv` | Upload | Upload CSV files | | `/api/utils/version` | Utils | GET versi aplikasi | ### 6.3 API Documentation Swagger UI tersedia di: **`/api/docs`** ### 6.4 API Route Lainnya | Route | Fungsi | |-------|--------| | `/api/health` | Health check endpoint | | `/api/news` | API berita (standalone) | | `/api/subscribe` | Subscription email | | `/api/tts` | Text-to-Speech (ElevenLabs) | | `/api/admin/*` | API khusus admin | | `/api/auth/*` | API autentikasi | --- ## 7. Halaman Admin ### 7.1 Struktur Admin dashboard berada di `/admin` dengan route group `(dashboard)`. | Section | Path | Fungsi | |---------|------|--------| | **Dashboard** | `/admin` | Dashboard utama | | **Autentikasi** | `/admin/auth` | Login admin | | **Desa** | `/admin/desa/*` | Berita, gallery, profil, layanan, penghargaan, pengumuman, potensi | | **PPID** | `/admin/ppid/*` | Profil, struktur, visi-misi, daftar informasi, dasar hukum, permohonan, IKM | | **Kesehatan** | `/admin/kesehatan/*` | Puskesmas, posyandu, program kesehatan, wabah, kontak darurat | | **Ekonomi** | `/admin/ekonomi/*` | APBDes, PAD, demografi, pengangguran, kemiskinan, BUMDes, pasar desa | | **Kependudukan** | `/admin/kependudukan/*` | Banjar, distribusi agama, distribusi umur, migrasi | | **Pendidikan** | `/admin/pendidikan/*` | Sekolah, beasiswa, bimbingan belajar, perpustakaan digital | | **Keamanan** | `/admin/keamanan/*` | Keamanan lingkungan, kontak darurat, pencegahan kriminalitas, polsek | | **Lingkungan** | `/admin/lingkungan/*` | Data lingkungan, konservasi, bank sampah, penghijauan, gotong royong | | **Inovasi** | `/admin/inovasi/*` | Ide inovatif, desa digital, teknologi tepat guna, kolaborasi | | **Musik** | `/admin/musik/*` | Manajemen musik desa | | **Landing Page** | `/admin/landing-page/*` | Anti-korupsi, prestasi, SDGs, media sosial | | **User & Role** | `/admin/user&role/*` | Manajemen user dan role | | **Images** | `/admin/images/*` | Manajemen gambar | | **CSV** | `/admin/csv/*` | Upload/import CSV | ### 7.2 Komponen Admin Shared - `AdminThemeProvider.tsx` - Theme provider untuk dark/light mode - `DarkModeToggle.tsx` - Toggle dark mode - `UnifiedSurface.tsx` - Komponen surface/card unified - `UnifiedTypography.tsx` - Tipografi unified --- ## 8. Halaman Publik ### 8.1 Struktur Halaman publik berada di `/darmasaba` dengan layout yang mencakup Navbar, Footer, dan Fixed Music Player. | Halaman | Path | Konten | |---------|------|--------| | **Landing Page