183 lines
4.3 KiB
Markdown
183 lines
4.3 KiB
Markdown
# 🚀 Web Upload Automation Platform
|
||
|
||
> Sistem Web untuk **otomasi unggah file dan publikasi data** berbasis React + Vite.
|
||
|
||

|
||
|
||
---
|
||
|
||
## 📦 Teknologi yang Digunakan
|
||
|
||
| Layer | Stack |
|
||
|-------|-------|
|
||
| Frontend | **React + Vite + TailwindCSS + React Router v6** |
|
||
| State Management | **Redux Toolkit** |
|
||
| HTTP Client | **Axios (dengan interceptor JWT)** |
|
||
| Auth | **JWT Token (disimpan di LocalStorage)** |
|
||
| Backend | FastAPI (terpisah dari repo ini) |
|
||
| Database | PostgreSQL + PostGIS |
|
||
|
||
---
|
||
|
||
## ⚙️ Fitur Utama
|
||
|
||
### 🔑 Autentikasi
|
||
- Login menggunakan JWT token.
|
||
- Token disimpan di `localStorage` agar tetap login selama belum kadaluarsa.
|
||
- Proteksi route admin via `ProtectedRoute`.
|
||
|
||
### 🧩 Upload File (Multi Format)
|
||
- Dukungan **drag & drop** area (`FileDropzone`).
|
||
- Mendukung berbagai format:
|
||
- `.zip` (Shapefile / Geodatabase)
|
||
- `.csv` / `.xlsx`
|
||
- `.pdf`
|
||
|
||
### 🔍 Analisis & Validasi Data
|
||
- Backend menganalisis isi file (misalnya memvalidasi koordinat atau ejaan wilayah).
|
||
- Hasil analisis ditampilkan sebagai **preview data** dan **warning table**:
|
||
- DataPreview.jsx menampilkan:
|
||
- Cuplikan data (max 5 baris)
|
||
- Data dengan ejaan tidak valid (jika ada)
|
||
|
||
### 🧾 Validasi & Upload ke Database
|
||
- User memberi **judul tabel** sebelum disimpan ke PostGIS.
|
||
- Validasi input:
|
||
- Jika belum mengisi judul → notifikasi Tailwind muncul.
|
||
- Konfirmasi sebelum meninggalkan halaman (peringatan bawaan browser).
|
||
- Saat disimpan → hasil dari backend ditampilkan di halaman sukses.
|
||
|
||
### 🧠 Dashboard Admin
|
||
- Navigasi menggunakan **AdminLayout** dengan navbar di atas.
|
||
- Halaman admin:
|
||
- `/admin/home` – Dashboard utama
|
||
- `/admin/upload` – Form upload & validasi
|
||
- `/admin/publikasi` – Manajemen publikasi
|
||
|
||
---
|
||
|
||
## 🧭 Alur Upload File
|
||
|
||
### **1️⃣ Upload Step**
|
||
User mengunggah file (drag & drop atau pilih manual).
|
||
→ dikirim ke backend `/upload`
|
||
→ backend mengembalikan `result` (kolom, preview, warning, dll.)
|
||
|
||
### **2️⃣ Validasi Step**
|
||
User:
|
||
- Melihat hasil preview dan warning.
|
||
- Mengisi “Judul Tabel”.
|
||
- Klik “Upload ke Database”.
|
||
→ dikirim ke backend `/upload_to_postgis`.
|
||
|
||
### **3️⃣ Success Step**
|
||
Response backend disimpan ke Redux (`validatedData`), lalu:
|
||
- Ditampilkan di halaman sukses `/admin/upload/success`.
|
||
- Menampilkan ringkasan hasil:
|
||
- Nama tabel
|
||
- Jumlah baris
|
||
- Waktu upload
|
||
- Pesan backend
|
||
- Metadata tambahan (jika ada)
|
||
|
||
---
|
||
|
||
## ⚡ Instalasi & Menjalankan
|
||
|
||
### 1️⃣ Clone Repository
|
||
```bash
|
||
git clone https://github.com/yourusername/upload-automation.git
|
||
cd upload-automation
|
||
```
|
||
|
||
### 2️⃣ Install Dependencies
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 3️⃣ Jalankan Server Development
|
||
```bash
|
||
npx vite
|
||
```
|
||
|
||
### 4️⃣ (Opsional) Build untuk Produksi
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Konfigurasi Lingkungan (`.env`)
|
||
Buat file `.env` di root proyek dan tambahkan:
|
||
|
||
```bash
|
||
VITE_API_URL=http://localhost:8000
|
||
```
|
||
|
||
Lalu di `api.js`:
|
||
```js
|
||
baseURL: import.meta.env.VITE_API_URL
|
||
```
|
||
|
||
---
|
||
|
||
## 🧩 Contoh Respons Backend
|
||
|
||
### `/upload` (POST)
|
||
```json
|
||
{
|
||
"file_type": ".pdf",
|
||
"columns": ["id", "nama_desa", "kecamatan", "kabupaten"],
|
||
"preview": [
|
||
{ "id": 1, "nama_desa": "Kedungrejo", "kecamatan": "Waru", "kabupaten": "Sidoarjo" }
|
||
],
|
||
"geometry_valid": 120,
|
||
"geometry_empty": 3,
|
||
"warning_examples": [
|
||
{ "nama_desa": "Kedung Rejo", "kecamatan": "waru", "kabupaten": "Sidoarjo" }
|
||
]
|
||
}
|
||
```
|
||
|
||
### `/upload_to_postgis` (POST)
|
||
```json
|
||
{
|
||
"table_name": "data_wilayah_valid",
|
||
"total_rows": 123,
|
||
"upload_time": "2025-10-28T10:14:00Z",
|
||
"message": "Data berhasil disimpan ke PostGIS.",
|
||
"metadata": {
|
||
"user": "admin",
|
||
"database": "geosystem",
|
||
"duration": "1.2s"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🧑💻 Pengembang
|
||
**Nama:** Dimas Anhar
|
||
**Project:** Web Upload & Validation Automation Platform
|
||
**Tujuan:** Sistem Otomatisasi Unggah dan Validasi Data Geospasial
|
||
|
||
---
|
||
|
||
## 💬 Catatan
|
||
- Pastikan backend `FastAPI` berjalan di `localhost:8000`.
|
||
- File besar (PDF/ZIP > 50MB) sebaiknya diunggah melalui koneksi stabil.
|
||
|
||
---
|
||
|
||
## 🧠 Rencana Pengembangan Selanjutnya
|
||
- ✅ Pagination untuk tabel preview
|
||
- ✅ Progress bar upload file
|
||
- 🔄 Refresh token otomatis JWT
|
||
- 🗂️ Manajemen file hasil upload
|
||
- 🌐 Publikasi hasil ke GeoServer/GeoNetwork
|
||
|
||
---
|
||
|
||
## 🏁 Lisensi
|
||
MIT License © 2025 — Dimas Anhar
|