# Backend User Module

## 1. Pengenalan

Module untuk manage admin users (backend users) — CRUD, profile, roles, email verification.

## 2. Database

**Table:** `backend_users`

| Column | Type | Description |
|--------|------|-------------|
| id | bigint (PK) | Primary key |
| username | string(255) (unique) | Username login |
| email | string(255) (unique) | Email login |
| password | string(255) | Hashed password |
| first_name | string(255) (nullable) | Nama pertama |
| last_name | string(255) (nullable) | Nama akhir |
| profile_picture | string(255) | Path gambar profile |
| is_active | boolean | Status aktif |
| email_verified_at | timestamp | Bila email diverifikasi |
| expires_at | datetime | Tempoh account |
| two_factor_code | string(255) | Code 2FA |
| two_factor_expires_at | datetime | Tempoh 2FA |
| last_login_at | datetime | Last login |
| remember_token | string(100) | Remember me token |
| timestamps | - | created_at, updated_at |

## 3. Routes

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

## 4. Controller — `BackendUserController`

**Functions:**
- `index()` — List users with search (username, email, first/last name). Eager load roles. Sort super-admin first, then by created_at desc.
- `create()` — Return form with roles dropdown.
- `store(UserRequest)` — Create user, upload profile picture via FilePond, sync roles, optional send verification email.
- `show($id)` — Display user detail.
- `edit($id)` — Return edit form with user data + roles.
- `update(UserRequest, $id)` — Update user, handle password (only if filled), handle profile picture replacement.
- `destroy($id)` — Delete user.
- `editProfile()` — Profile edit untuk current authenticated user.
- `updateProfile(Request)` — Update profile current user.

## 5. Models

### `BackendUser`
- Table: `backend_users`
- Implements: `MustVerifyEmail`
- Traits: `HasFactory, Notifiable, LogsActivity, HasRoles`
- Fillable: username, email, email_verified_at, password, first_name, last_name, profile_picture, expires_at, two_factor_expires_at, two_factor_code, is_active, last_login_at
- Hidden: password, two_factor_code, remember_token
- Activity Log: log changes on username, email, first_name, last_name, profile_picture, is_active

## 6. Views

- `index.blade.php` — Table: No, Username, Email, Full Name, Roles, Last Login, Actions (edit/delete). Search, pagination, SweetAlert delete.
- `create.blade.php` — Form: Username, Email, Password (toggle), First Name, Last Name, Profile Picture (FilePond), Roles (Select2 multi), Send verification checkbox.
- `edit.blade.php` — Same as create with pre-filled values.
- `show.blade.php` — Detail view (read-only).

## 7. Form Request — `UserRequest`

Guna form request yang sama untuk BackendUser dan FrontendUser. Validation rules:
- username: required, string, max:255, unique (ignore current on update)
- email: required, email, unique (ignore current on update)
- password: required on create, nullable on update, min:6
- first_name, last_name: required, string
- profile_picture: nullable, image, max:2048
- roles: nullable, array
- roles.*: string, exists:roles,name

## 8. Seeder — `BackendUserSeeder`

- Disable activity logging
- Create superadmin: `superadmin@example.com` / `password`
- Mark email as verified
- Assign `super-admin` role
- Create manual activity log entry (event: 'seeded')

## 9. Permissions

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