My Account (Akun Saya)
| Code | ACC-ME |
| Module | Account |
| Type | Self-service profile |
| Status | Implemented |
| Priority | P0 — MVP |
| Process | Manajemen akun pribadi |
| API | [URL Postman] |
1. Overview
Akun Saya adalah halaman tempat pengguna yang sedang login mengelola akunnya sendiri: foto profil, nama, email login, dan kata sandi. Halaman ini juga menampilkan informasi yang tidak bisa diubah sendiri, yaitu peran pengguna dan toko tempat ia ditugaskan (bila terhubung ke data karyawan), serta log aktivitas milik pengguna tersebut.
Semua pengguna yang login bisa mengakses halaman ini tanpa permission khusus; setiap perubahan hanya berlaku untuk akun pengguna itu sendiri.
Hasil yang diharapkan: pengguna bisa menjaga data dan keamanan akunnya sendiri tanpa meminta bantuan admin.
2. Problem
- Pengguna harus menghubungi admin hanya untuk mengganti nama, foto, atau kata sandi.
- Kata sandi awal perlu diganti oleh pemiliknya demi keamanan.
- Pengguna perlu tahu peran dan toko apa yang dimilikinya untuk memahami aksesnya.
3. Goals & Non-goals
Goals
- Pengguna bisa memperbarui profilnya sendiri. Indikator: nama, foto, email, dan kata sandi bisa diubah tanpa admin.
- Perubahan email tetap aman. Indikator: email baru harus diverifikasi lewat tautan.
- Pengguna memahami aksesnya. Indikator: peran dan toko tampil di kartu profil.
Non-goals
- Mengubah peran, status aktif, atau toko sendiri (dilakukan admin)
- Menghapus akun sendiri
- Autentikasi dua faktor
4. User Scenarios
| Role | Scenario |
|---|---|
| Semua pengguna | Mengganti kata sandi awal setelah login pertama |
| Semua pengguna | Mengunggah foto profil agar mudah dikenali di log aktivitas dan notifikasi |
| Kasir | Mengganti email login karena pindah ke email kantor; memverifikasi lewat tautan di email baru |
| Kepala Toko | Memeriksa peran dan toko yang terhubung ke akunnya |
| Semua pengguna | Melihat riwayat aktivitas yang ia lakukan sendiri |
5. User Flow
- Mode lihat — Kartu profil (foto, nama, peran, toko) dan detail nama serta email (dengan ikon terverifikasi bila sudah diverifikasi). Tombol Log Aktivitas dan Ubah Data.
- Mode ubah — Halaman
/account/my-account/editdengan tab Profil, Email, dan Kata Sandi; tab aktif disimpan di URL (?tab=). - Foto profil — Pengunggah gambar tampil di kartu profil (hanya mode ubah). Setelah gambar dipilih, tombol Simpan muncul; foto baru langsung tampil setelah tersimpan.
- Profil — Ubah nama; tombol simpan aktif hanya jika ada perubahan.
- Email — Isi email baru (placeholder: email saat ini). Setelah disimpan, sistem mengirim tautan verifikasi ke email baru. Email login baru berlaku setelah tautan dibuka di
/auth/change-verify-email. - Kata Sandi — Isi kata sandi saat ini, kata sandi baru, dan konfirmasinya.
- Log aktivitas — Panel log aktivitas milik pengguna, dengan filter event, pelaku, dan rentang tanggal.
Alternative paths
- Tinggalkan tab dengan perubahan belum disimpan — muncul konfirmasi perubahan belum disimpan.
- Kata sandi saat ini salah atau konfirmasi tidak cocok — ditolak BE; error tampil pada field terkait.
- Gagal menyimpan foto — toast “Gagal mengubah foto profil”.
6. User Stories
Prioritas: P0 wajib untuk rilis, P1 penting, P2 kalau sempat.
US-01 — Melihat akun saya (P0)
Sebagai pengguna, saya ingin melihat data akun saya, agar tahu profil dan akses saya.
| ID | Kriteria penerimaan |
|---|---|
| AC-01.1 | Kartu profil menampilkan foto (atau inisial nama bila tidak ada foto), nama, dan daftar peran. |
| AC-01.2 | Daftar toko tampil hanya bila akun terhubung ke karyawan yang punya toko. |
| AC-01.3 | Email tampil dengan ikon terverifikasi bila email_verified_at terisi. |
| AC-01.4 | Skeleton tampil selama data dimuat. |
US-02 — Mengubah foto profil (P1)
Sebagai pengguna, saya ingin mengganti foto profil, agar mudah dikenali.
| ID | Kriteria penerimaan |
|---|---|
| AC-02.1 | Pengunggah hanya tampil di mode ubah dan hanya menerima satu file gambar. |
| AC-02.2 | Tombol Simpan muncul setelah gambar dipilih. |
| AC-02.3 | Setelah berhasil, toast “Foto profil berhasil diubah” tampil dan foto baru dipakai tanpa berkedip ke inisial. |
| AC-02.4 | File yang diunggah tercatat sebagai milik pengguna dan muncul di File Saya. |
US-03 — Mengubah nama (P0)
Sebagai pengguna, saya ingin memperbaiki nama saya.
| ID | Kriteria penerimaan |
|---|---|
| AC-03.1 | Nama wajib diisi. |
| AC-03.2 | Tombol simpan aktif hanya jika ada perubahan; setelah berhasil toast sukses tampil dan data akun dimuat ulang. |
US-04 — Mengubah email login (P0)
Sebagai pengguna, saya ingin mengganti email login saya secara aman.
| ID | Kriteria penerimaan |
|---|---|
| AC-04.1 | Email baru wajib dan harus berformat valid. |
| AC-04.2 | Info verifikasi email tampil di tab sebelum menyimpan. |
| AC-04.3 | Setelah disimpan, BE mengirim tautan verifikasi ke email baru dengan URL <origin>/auth/change-verify-email?token=. |
| AC-04.4 | Membuka tautan memverifikasi token lalu mengarahkan ke halaman login. |
| AC-04.5 | Error BE (misalnya email sudah dipakai) tampil pada field. |
US-05 — Mengganti kata sandi (P0)
Sebagai pengguna, saya ingin mengganti kata sandi saya, agar akun tetap aman.
| ID | Kriteria penerimaan |
|---|---|
| AC-05.1 | Kata sandi saat ini, kata sandi baru, dan konfirmasi wajib diisi; ketiganya bisa ditampilkan/disembunyikan. |
| AC-05.2 | Validasi kekuatan kata sandi, kecocokan konfirmasi, dan kebenaran kata sandi saat ini dilakukan BE; error tampil pada field terkait. |
| AC-05.3 | Setelah berhasil, toast sukses tampil. |
US-06 — Log aktivitas saya (P2)
Sebagai pengguna, saya ingin melihat aktivitas yang saya lakukan.
| ID | Kriteria penerimaan |
|---|---|
| AC-06.1 | Tombol Log Aktivitas di mode lihat membuka log milik pengguna, dengan filter event, pelaku, dan rentang tanggal. |
7. Document Structure
| Field | Required | Default | Notes |
|---|---|---|---|
Foto profil (avatar_file) | Tidak | Inisial nama | 1 gambar, maks 1 MB; dikirim sebagai file_id + file_source |
| Nama | Ya | — | |
| Ya | — | Diubah lewat verifikasi (US-04) | |
| Email terverifikasi | Otomatis | — | email_verified_at |
| Peran | Read-only | — | Diatur admin di Settings → Pengguna |
| Toko | Read-only | — | Dari karyawan terhubung (party.employee.stores) |
| Kata sandi saat ini | Ya (tab Kata Sandi) | — | Tidak disimpan di FE |
| Kata sandi baru | Ya (tab Kata Sandi) | — | Aturan kekuatan dari BE |
| Konfirmasi kata sandi baru | Ya (tab Kata Sandi) | — | Harus sama dengan kata sandi baru (BE) |
8. Status Lifecycle
Tidak berlaku untuk akun sendiri. Status email (terverifikasi / belum) dijelaskan di PRD Users; pengguna tidak bisa mengubah status aktifnya sendiri.
9. Permissions & Actions
Permissions
| Action | Permission | Syarat tambahan |
|---|---|---|
| Semua aksi di Akun Saya | — | Pengguna login; hanya untuk akun sendiri |
10. Business Rules
Aturan bisnis adalah ketentuan yang berlaku di semua layar dan semua aksi, siapa pun yang melakukannya. FE memakainya sebagai validasi di form, BE memakainya sebagai sumber kebenaran; jika keduanya berbeda, perilaku BE yang dianggap benar dan FE menyesuaikan.
- BR-01 Semua endpoint Akun Saya bekerja pada pengguna dari token login (
/api/auth/...), bukan id di URL. - BR-02 Email login baru hanya berlaku setelah diverifikasi lewat tautan; sampai saat itu email lama tetap dipakai.
- BR-03 Mengganti kata sandi wajib menyertakan kata sandi saat ini.
- BR-04 Aturan kekuatan kata sandi dan kecocokan konfirmasi ditegakkan BE; FE hanya memeriksa field tidak kosong.
- BR-05 Peran, status aktif, dan toko tidak bisa diubah dari Akun Saya.
- BR-06 Setiap perubahan dicatat di log aktivitas.
11. Edge Cases
Edge case adalah kondisi yang jarang terjadi tetapi pasti muncul di operasional nyata. Perilaku yang diharapkan ditetapkan di sini agar tidak diputuskan sendiri-sendiri saat implementasi.
| ID | Case | Expected behavior |
|---|---|---|
| EC-01 | Tautan verifikasi email kedaluwarsa atau tidak valid | Halaman verifikasi menampilkan status gagal (ditentukan BE) |
| EC-02 | Pengguna meminta ganti email dua kali sebelum verifikasi | Ditentukan BE; sebaiknya hanya tautan terbaru yang berlaku |
| EC-03 | Setelah ganti kata sandi, sesi di perangkat lain | Ditentukan BE; pengguna bisa mencabut sesi lain lewat Perangkat Terhubung |
| EC-04 | Form kata sandi setelah berhasil disimpan | Nilai field tidak dikosongkan otomatis; halaman hanya di-refresh |
| EC-05 | Foto dipilih tetapi tidak disimpan | Foto lama tetap berlaku; file yang terlanjur diunggah tercatat di File Saya sebagai tidak digunakan |
| EC-06 | Akun tidak terhubung ke karyawan | Bagian Toko tidak tampil di kartu profil |
12. API Contract
| Action | Method | Endpoint | Ref |
|---|---|---|---|
| Data akun saya | GET | /api/auth/me | US-01 |
| Ubah nama | PATCH | /api/auth/me | US-03 |
| Ubah foto profil | PATCH | /api/auth/avatar | US-02 |
| Ubah email (kirim verifikasi) | POST | /api/auth/email/change | US-04 |
| Verifikasi ubah email (halaman auth) | POST | /api/auth/email/change/verify | AC-04.4 |
| Ganti kata sandi | PATCH | /api/auth/password/change | US-05 |
| Log aktivitas saya | GET | /api/auth/activity-logs/cursor | US-06 |
| Presign / finalize unggah foto | POST / GET | /api/files/upload/presign, /api/files/upload/finalize/:id | US-02 |
13. Dependencies
PRD terkait
- Users (Settings) — admin mengelola akun yang sama (peran, status, email).
- My Files — foto profil tersimpan sebagai file milik pengguna.
- Linked Devices — mencabut sesi di perangkat lain.
- Activity Logs — sumber log aktivitas.
Efek ke modul lain
- Nama dan foto dipakai di header dashboard, log aktivitas (sebagai pelaku), dan kolom “Dibuat Oleh” di berbagai daftar.