# Frontend User Module

## 1. Pengenalan

Module untuk manage frontend users (public site users) — CRUD, profile, email verification, authentication.

## 2. Database

**Table:** `frontend_users`

Sama struktur dengan `backend_users`:
- id, username (unique), email (unique), password, first_name, last_name, profile_picture, is_active
- email_verified_at, expires_at, two_factor_code, two_factor_expires_at, last_login_at
- remember_token, timestamps

## 3. Routes

### Admin CRUD

| Method | URI | Permission | Name |
|--------|-----|------------|------|
| GET | `/admin/frontend-user` | `frontend-user.view` | `frontend-user.index` |
| GET | `/admin/frontend-user/create` | `frontend-user.create` | `frontend-user.create` |
| POST | `/admin/frontend-user` | `frontend-user.create` | `frontend-user.store` |
| GET | `/admin/frontend-user/{id}` | `frontend-user.view` | `frontend-user.show` |
| GET | `/admin/frontend-user/{id}/edit` | `frontend-user.update` | `frontend-user.edit` |
| PUT | `/admin/frontend-user/{id}` | `frontend-user.update` | `frontend-user.update` |
| DELETE | `/admin/frontend-user/{id}` | `frontend-user.delete` | `frontend-user.destroy` |

### Public Auth (No Permission — Accessible to All)

| Method | URI | Name |
|--------|-----|------|
| GET | `/user/login` | `user.login` |
| POST | `/user/login` | `user.login.submit` |
| GET | `/user/register` | `user.register` |
| POST | `/user/register` | `user.register.submit` |
| POST | `/user/logout` | `user.logout` |
| GET | `/user/forgot-password` | `user.password.request` |
| POST | `/user/forgot-password` | `user.password.email` |
| GET | `/user/profile/edit` | `user.profile.edit` |
| PUT | `/user/profile` | `user.profile.update` |
| GET | `/user/dashboard` | `user.dashboard` |

## 4. Controller

### `Backend\FrontendUserController` (Admin CRUD)

Sama pattern dengan BackendUserController. Functions:
- `index()` — List users, search, paginate
- `create()` — Return create form
- `store(UserRequest)` — Create user + upload profile picture + optional send verification email
- `show($id)` — Detail view
- `edit($id)` — Return edit form
- `update(UserRequest, $id)` — Update user + handle password + profile picture
- `destroy($id)` — Delete user

### `Frontend\UserController` (User Self-Profile)

| Method | URI | Name |
|--------|-----|------|
| GET | `/user/profile/edit` | `user.profile.edit` |
| PUT | `/user/profile` | `user.profile.update` |

**File:** `app/Http/Controllers/Frontend/UserController.php`

**updateProfile():**
- Validasi: username (unique), email, first_name, last_name, password (nullable|confirmed), **profile_picture** (nullable|image|max:2048)
- Upload profile_picture ke `storage/app/public/profile_pictures/frontend/` via FilePond
- Delete gambar lama jika ada sebelum replace

## 5. Model — `FrontendUser`

- Table: `frontend_users`
- Implements: `MustVerifyEmail`
- Traits: `HasFactory, Notifiable, LogsActivity, HasRoles`
- Guard: `user`
- Same fillable/hidden as BackendUser
- Activity Log: log changes on same fields

## 6. Views

### Admin CRUD

- `index.blade.php` — Table: No, Username, Email, Full Name, Last Login, Actions
- `create.blade.php` — Form: Username, Email, Password (toggle), First Name, Last Name, Profile Picture (FilePond), Send verification checkbox
- `edit.blade.php` — Same with pre-filled values
- `show.blade.php` — Detail view

### User Self-Profile

- `frontend/profile/edit.blade.php` — Edit profile form dengan FilePond untuk profile picture (sama UI dengan backend profile edit)

## 7. Seeder — `FrontendUserSeeder`

- Create default user: `frontenduser@example.com` / `password`
- Disable activity logging, create manual log entry (event: 'seeded')

## 8. Permissions

| Permission | Description |
|------------|-------------|
| `frontend-user.view` | View list & detail |
| `frontend-user.create` | Create new user |
| `frontend-user.update` | Edit user |
| `frontend-user.delete` | Delete user |
