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
+30 -14
View File
@@ -12,9 +12,15 @@ Fondasi utama skema database:
table User:
- id String @id
- name String @unique
- id String @id @default(uuid())
- username String @unique
- name String
- password String
- photo String?
- role String @default("user") // "user" or "superadmin"
- is_active Boolean @default(true)
- created_at DateTime @default(now())
- updated_at DateTime @updatedAt
- orders Order[] @relation("CreatedOrders")
- purchases Submission[]
@@ -74,15 +80,12 @@ table SubmissionItem:
# 2. CORE AUTHENTICATION FLOW
- DILARANG menggunakan NextAuth/library auth eksternal.
- Setiap kali web diakses, jalankan pengecekan:
1. Cek `localStorage` untuk `user_id`.
2. Jika belum ada, generate UUID baru, simpan ke `localStorage`.
3. Lakukan verifikasi ke database/server action apakah `user_id` tersebut sudah terdaftar di tabel `User`.
4. Jika belum terdaftar, wajib munculkan Modal Profile yang tidak bisa ditutup.
5. Modal meminta input "Nama" (Wajib) dan "Foto Profile" (Opsional).
6. Validasi: Nama harus UNIK di tabel User. Setelah valid, simpan ke database menggunakan `user_id` sebagai `id`.
7. Jika `user_id` sudah terdaftar, lewati modal dan muat data user secara mulus.
- DILARANG menggunakan NextAuth/library auth eksternal. Buat custom authentication menggunakan JWT (atau hash-based token) yang disimpan di HTTP-only cookies atau localStorage.
- Fitur Token: Tanpa waktu expired (no expiration) dan mendukung multi-device login.
- Terdapat halaman `/login` dan `/register` untuk pengguna.
- Default role saat registrasi adalah `user`.
- Harus ada seeder untuk membuat akun superadmin default: Username: `superadmin` (atau spesifik), Password: `titipin123!`, Role: `superadmin`.
- Middleware/Route Protection: Hanya user yang sudah login yang bisa mengakses halaman utama aplikasi. Halaman manajemen user hanya bisa diakses oleh role `superadmin`.
# 3. MENU NAVIGATION ORDER
@@ -92,7 +95,8 @@ Urutan navigasi menu utama pada aplikasi adalah sebagai berikut:
2. Jasa Order Saya
3. Pesanan Saya
4. Laporan
5. Profile
5. User Management (Hanya Superadmin)
6. Profile
# 4. PAGE SPECIFICATIONS & STEP-BY-STEP FLOW
@@ -148,10 +152,22 @@ Urutan navigasi menu utama pada aplikasi adalah sebagai berikut:
- Visualisasi berupa Bar Chart (Grafik) dan Data Grid (Tabel) yang diurutkan secara proporsional.
- Mendukung filter Bulan dan Tahun berbasis server-side.
## Step 6: Halaman Profile (/profile)
## Step 6: Halaman User Management (/users) - KHUSUS SUPERADMIN
- Hanya muncul jika current user memiliki role `superadmin`.
- Menampilkan tabel daftar user dengan pagination (default 10 per halaman).
- Fitur Superadmin:
- Membuat data user baru.
- Mengedit password user lain.
- Activate dan Deactivate user.
- Menghapus user.
- Proteksi Data Superadmin: Data superadmin tidak bisa dihapus atau di-deactivate (terkunci), hanya bisa ganti password.
## Step 7: Halaman Profile (/profile)
- Form untuk mengedit Nama dan Foto Profile milik current user.
- Validasi nama unik tetap berlaku saat proses update.
- Terdapat form Ganti Password yang mewajibkan input: Password Lama, Password Baru, dan Konfirmasi Password Baru.
- Validasi nama dan verifikasi password lama tetap berlaku saat proses update.
# 6. WORKFLOW EXECUTION