feat: implement app directory routing, authentication flow, and dynamic reporting module

This commit is contained in:
Firman Ramdhani
2026-08-28 15:50:01 +07:00
parent 3e68d12ce4
commit 84e6599b23
28 changed files with 1869 additions and 478 deletions
+19 -11
View File
@@ -1,11 +1,11 @@
# TitipIn - Sistem Titip Pesanan
Aplikasi web modern berbasis Next.js untuk mempermudah sistem "jasa titip" (jastip) atau pesanan bersama. Aplikasi ini berjalan dengan arsitektur serverless (Server Actions) dan menggunakan sistem autentikasi stateless (berbasis UUID di LocalStorage).
Aplikasi web modern berbasis Next.js untuk mempermudah sistem "jasa titip" (jastip) atau pesanan bersama. Aplikasi ini berjalan dengan arsitektur serverless (Server Actions) dan menggunakan sistem autentikasi **stateless berbasis JWT yang disimpan secara aman di HTTP-only Cookies**. Dilengkapi dengan Role-Based Access Control (RBAC) untuk manajemen akses pengguna dan Superadmin.
## Kebutuhan Sistem (Prerequisites)
Sebelum menjalankan aplikasi ini, pastikan Anda telah menginstal perangkat lunak berikut:
- **Node.js**: Versi 18.x atau lebih baru (direkomendasikan versi LTS terbaru).
- **npm**: (biasanya sudah termasuk saat instalasi Node.js).
- **Yarn / npm**: (Disarankan menggunakan Yarn).
- **PostgreSQL**: Database server berjalan (versi 13 atau lebih baru direkomendasikan).
## Instalasi
@@ -13,12 +13,12 @@ Sebelum menjalankan aplikasi ini, pastikan Anda telah menginstal perangkat lunak
2. Buka terminal/command prompt.
3. Jalankan perintah instalasi dependensi:
```bash
npm install
yarn install
```
*Catatan: Pastikan dependensi Prisma terinstal pada versi stabil (contoh: `@prisma/client@5`).*
*(atau `npm install` jika tidak menggunakan yarn).*
## Pengaturan Environment
Buat sebuah file bernama `.env` di root folder proyek Anda. Konfigurasi kredensial database PostgreSQL Anda seperti format berikut:
Buat sebuah file bernama `.env` di root folder proyek Anda. Konfigurasi kredensial database PostgreSQL Anda beserta kunci rahasia JWT seperti format berikut:
```env
DATABASE_HOST="172.10.10.2"
@@ -27,26 +27,33 @@ DATABASE_USER="postgres"
DATABASE_PASSWORD="eigen3m!"
DATABASE_NAME="testing"
DATABASE_URL="postgresql://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?schema=public"
# Kunci rahasia untuk enkripsi sesi JWT
JWT_SECRET="isi-dengan-kunci-rahasia-acak-disini"
```
*(Sesuaikan IP, port, dan kredensial lain jika server database Anda berbeda).*
*(Sesuaikan IP, port, dan kredensial database jika server database Anda berbeda).*
## Eksekusi Migrasi Database
Aplikasi menggunakan **Prisma ORM** untuk berinteraksi dengan database. Jalankan perintah terminal berikut secara berurutan untuk menyinkronkan skema dan mengaktifkan client:
Aplikasi menggunakan **Prisma ORM** untuk berinteraksi dengan database. Jalankan perintah terminal berikut secara berurutan untuk menyinkronkan skema dan mengisi (seed) data awal:
1. **Generate Prisma Client**: Membangun tipe TypeScript dan library client.
```bash
npx prisma generate
```
2. **Push Skema ke Database**: Membuat struktur tabel-tabel di database (User, Order, Submission, dll.) sesuai dengan `prisma/schema.prisma`.
2. **Push Skema ke Database**: Membuat struktur tabel-tabel di database sesuai dengan `prisma/schema.prisma`.
```bash
npx prisma db push
```
3. **Seed Database**: Mengisi database dengan akun Superadmin bawaan.
```bash
npx prisma db seed
```
## Menjalankan Aplikasi
Setelah database siap, Anda bisa menjalankan aplikasi di tahap pengembangan lokal (development mode):
```bash
npm run dev
yarn dev
```
Aplikasi secara bawaan dapat diakses melalui browser dengan URL:
@@ -55,9 +62,10 @@ Aplikasi secara bawaan dapat diakses melalui browser dengan URL:
---
### Alur Singkat Aplikasi:
- Akses pertama kali, sistem akan _generate_ UUID unik untuk *device* Anda dan menyimpannya di `localStorage`.
- Aplikasi akan menampilkan Modal Wajib untuk mendaftarkan **Nama** dan opsional **Foto Profil**.
- **Autentikasi:** Akses aplikasi harus melalui halaman login. Jika belum memiliki akun, pengguna dapat mendaftar (register) yang otomatis akan memberikan *role* sebagai `user`.
- **Akun Superadmin:** Secara default, sistem telah menyiapkan akun *Superadmin* (Username: `superadmin`, Password: `titipin123!`). Superadmin memiliki akses eksklusif ke halaman **User Management** untuk mengelola, menonaktifkan, atau menghapus pengguna lain.
- Anda dapat mulai:
- Membuat Jasa Titip di menu **Jasa Order Saya**.
- Mengikuti Jasa Titip teman di menu **Open Order**.
- Mengelola pembayaran & melihat rincian di halaman detail.
- Memantau laporan omzet & pengeluaran di menu **Laporan**.