feat: implement app directory routing, authentication flow, and dynamic reporting module
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user