| Current Path : /var/www/html/reddsis/docs/module/ |
| Current File : /var/www/html/reddsis/docs/module/frontend-user.md |
# 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 |