diff --git a/HAK_AKSES_API_ENDPOINT.md b/HAK_AKSES_API_ENDPOINT.md new file mode 100644 index 0000000..3ff87a8 --- /dev/null +++ b/HAK_AKSES_API_ENDPOINT.md @@ -0,0 +1,700 @@ +# API Endpoint Documentation - Hak Akses + +## Deskripsi +Dokumentasi ini menjelaskan semua API endpoint yang diperlukan untuk fitur **Hak Akses** di halaman `/pages/Setting/HakAkses.vue`. Endpoint-endpoint ini akan dihubungkan ke backend API yang disediakan oleh tim backend. + +--- + +## Base URL +``` +{API_BASE_URL}/api/v1 +``` +**Catatan:** Ganti `{API_BASE_URL}` dengan URL backend yang sebenarnya (contoh: `http://10.10.150.131:8089`) + +--- + +## 1. Get List Users + +Mengambil daftar semua users beserta roles, groups, dan informasi lainnya yang diperlukan untuk form hak akses. + +### Endpoint +``` +GET /api/users/list +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Query Parameters:** Tidak ad + +### Response +**Success (200 OK):** +```json +[ + { + "id": "user-123", + "namaLengkap": "John Doe", + "namaUser": "johndoe", + "email": "john.doe@example.com", + "tipeUser": "Super Admin", + "lastLogin": 1704067200, + "roles": ["superadmin", "admin"], + "realmRoles": ["default-roles-sandbox"], + "accountRoles": [], + "resourceRoles": [], + "groups": [ + "/Instalasi STIM/Devops/Superadmin", + "/Instalasi STIM/Admin" + ], + "given_name": "John", + "family_name": "Doe", + "createdAt": 1704067200, + "updatedAt": 1704067200 + } +] +``` + +**Error (500 Internal Server Error):** +```json +{ + "statusCode": 500, + "statusMessage": "Failed to fetch users" +} +``` + +### Field Description +- `id`: Unique identifier user +- `namaLengkap`: Nama lengkap user +- `namaUser`: Username untuk login +- `email`: Email user +- `tipeUser`: Tipe/jenis user (contoh: "Super Admin", "Admin Loket", dll) +- `lastLogin`: Timestamp terakhir login (Unix timestamp dalam detik) +- `roles`: Array of role names +- `realmRoles`: Array of realm roles dari Keycloak +- `accountRoles`: Array of account roles +- `resourceRoles`: Array of resource roles +- `groups`: Array of group paths (contoh: "/Instalasi STIM/Devops/Superadmin") +- `given_name`: Nama depan +- `family_name`: Nama belakang +- `createdAt`: Timestamp pembuatan (Unix timestamp dalam detik) +- `updatedAt`: Timestamp update terakhir (Unix timestamp dalam detik) + +--- + +## 2. Get Permissions by Role and Group + +Mengambil daftar permissions dari backend berdasarkan role dan group yang dipilih. + +### Endpoint +``` +GET /api/v1/permission +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Query Parameters:** +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `roles` | string | Yes | Role name (contoh: "superadmin", "admin") | +| `groups` | string | Yes | Group name atau group path (contoh: "STIM", "/Instalasi STIM/Devops/Superadmin") | + +**Example:** +``` +GET /api/v1/permission?roles=superadmin&groups=STIM +``` + +### Response +**Success (200 OK):** +```json +{ + "message": "Data permission berhasil diambil", + "data": [ + { + "id": 1, + "create": false, + "read": true, + "update": false, + "disable": false, + "delete": false, + "active": true, + "pagename": "Halaman Utama", + "pagesID": 1, + "level": 1, + "sort": 1, + "parent": null + }, + { + "id": 2, + "create": false, + "read": true, + "update": false, + "disable": false, + "delete": false, + "active": true, + "pagename": "Pengaturan", + "pagesID": 2, + "level": 1, + "sort": 2, + "parent": null + }, + { + "id": 3, + "create": true, + "read": true, + "update": true, + "disable": true, + "delete": false, + "active": true, + "pagename": "Hak Akses", + "pagesID": 3, + "level": 2, + "sort": 3, + "parent": 2 + } + ], + "meta": { + "count": 3, + "total": 3 + } +} +``` + +**Error (400 Bad Request):** +```json +{ + "statusCode": 400, + "statusMessage": "roles or groups parameter is required" +} +``` + +**Error (500 Internal Server Error):** +```json +{ + "message": "Failed to fetch permissions", + "data": [], + "meta": { + "count": 0, + "total": 0 + } +} +``` + +### Field Description +- `id`: Unique identifier permission +- `create`: Boolean, permission untuk create/tambah data +- `read`: Boolean, permission untuk read/lihat data +- `update`: Boolean, permission untuk update/edit data +- `disable`: Boolean, permission untuk disable/nonaktifkan +- `delete`: Boolean, permission untuk delete/hapus data +- `active`: Boolean, status aktif permission +- `pagename`: Nama halaman/menu (akan di-mapping ke menu sidebar) +- `pagesID`: ID halaman di sistem backend +- `level`: Level hierarki menu (1 = parent, 2 = child, dll) +- `sort`: Urutan tampil +- `parent`: ID parent menu (null jika parent menu) + +--- + +## 3. Get List Hak Akses + +Mengambil daftar semua hak akses yang sudah tersimpan. + +### Endpoint +``` +GET /api/v1/hak-akses +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Query Parameters:** Tidak ada + +### Response +**Success (200 OK):** +```json +[ + { + "id": 1, + "userId": "user-123", + "namaLengkap": "John Doe", + "namaUser": "johndoe", + "tipeUser": "Super Admin", + "role": "superadmin", + "group": "STIM", + "groupPath": "/Instalasi STIM/Devops/Superadmin", + "namaTipeUser": "Super Admin", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + }, + { + "name": "Master Data", + "canAccess": true, + "canView": true, + "canAdd": true, + "canEdit": true, + "canDelete": false + } + ], + "isGroupBased": true, + "createdAt": 1704067200, + "updatedAt": 1704067200 + } +] +``` + +**Error (500 Internal Server Error):** +```json +{ + "statusCode": 500, + "statusMessage": "Failed to fetch hak akses" +} +``` + +### Field Description +- `id`: Unique identifier hak akses +- `userId`: ID user (optional, untuk backward compatibility) +- `namaLengkap`: Nama lengkap user (optional) +- `namaUser`: Username (optional) +- `tipeUser`: Tipe user (optional) +- `role`: Role name (required) +- `group`: Group name (required) +- `groupPath`: Full group path (optional, untuk group-based access) +- `namaTipeUser`: Nama tipe user (optional) +- `hakAksesMenu`: Array of menu permissions + - `name`: Nama menu + - `canAccess`: Boolean, apakah bisa akses menu + - `canView`: Boolean, apakah bisa lihat data + - `canAdd`: Boolean, apakah bisa tambah data + - `canEdit`: Boolean, apakah bisa edit data + - `canDelete`: Boolean, apakah bisa hapus data +- `isGroupBased`: Boolean, apakah hak akses ini group-based (true) atau individual (false) +- `createdAt`: Timestamp pembuatan (Unix timestamp dalam detik) +- `updatedAt`: Timestamp update terakhir (Unix timestamp dalam detik) + +--- + +## 4. Create Hak Akses + +Membuat hak akses baru (group-based atau individual). + +### Endpoint +``` +POST /api/v1/hak-akses +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Body:** +```json +{ + "role": "superadmin", + "group": "STIM", + "groupPath": "/Instalasi STIM/Devops/Superadmin", + "namaTipeUser": "Super Admin", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + }, + { + "name": "Master Data", + "canAccess": true, + "canView": true, + "canAdd": true, + "canEdit": true, + "canDelete": false + } + ], + "isGroupBased": true +} +``` + +### Response +**Success (201 Created):** +```json +{ + "success": true, + "message": "Hak akses berhasil dibuat", + "data": { + "id": 1, + "role": "superadmin", + "group": "STIM", + "groupPath": "/Instalasi STIM/Devops/Superadmin", + "namaTipeUser": "Super Admin", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + } + ], + "isGroupBased": true, + "createdAt": 1704067200, + "updatedAt": 1704067200 + } +} +``` + +**Error (400 Bad Request):** +```json +{ + "statusCode": 400, + "statusMessage": "role and group are required" +} +``` + +**Error (409 Conflict):** +```json +{ + "statusCode": 409, + "statusMessage": "Hak akses untuk group dan role ini sudah ada" +} +``` + +### Field Description +**Required Fields:** +- `role`: Role name (string, required) +- `group`: Group name (string, required) +- `hakAksesMenu`: Array of menu permissions (array, required) + +**Optional Fields:** +- `userId`: ID user (string, optional) +- `namaLengkap`: Nama lengkap (string, optional) +- `namaUser`: Username (string, optional) +- `tipeUser`: Tipe user (string, optional) +- `groupPath`: Full group path (string, optional) +- `namaTipeUser`: Nama tipe user (string, optional) +- `isGroupBased`: Boolean, default true (boolean, optional) + +--- + +## 5. Update Hak Akses + +Mengupdate hak akses yang sudah ada. + +### Endpoint +``` +PATCH /api/v1/hak-akses/{id} +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Path Parameters:** +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `id` | integer | Yes | ID hak akses yang akan diupdate | + +**Body (semua field optional, hanya kirim field yang ingin diupdate):** +```json +{ + "role": "admin", + "group": "LOKET", + "namaTipeUser": "Admin Loket", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + } + ] +} +``` + +### Response +**Success (200 OK):** +```json +{ + "success": true, + "message": "Hak akses berhasil diperbarui", + "data": { + "id": 1, + "role": "admin", + "group": "LOKET", + "groupPath": "/Instalasi STIM/Loket", + "namaTipeUser": "Admin Loket", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + } + ], + "isGroupBased": true, + "createdAt": 1704067200, + "updatedAt": 1704067300 + } +} +``` + +**Error (400 Bad Request):** +```json +{ + "statusCode": 400, + "statusMessage": "ID is required" +} +``` + +**Error (404 Not Found):** +```json +{ + "statusCode": 404, + "statusMessage": "Hak akses not found" +} +``` + +**Error (500 Internal Server Error):** +```json +{ + "statusCode": 500, + "statusMessage": "Failed to update hak akses" +} +``` + +--- + +## 6. Delete Hak Akses + +Menghapus hak akses. + +### Endpoint +``` +DELETE /api/v1/hak-akses/{id} +``` + +### Request +**Headers:** +``` +Content-Type: application/json +Accept: application/json +``` + +**Path Parameters:** +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `id` | integer | Yes | ID hak akses yang akan dihapus | + +### Response +**Success (200 OK):** +```json +{ + "success": true, + "message": "Hak akses berhasil dihapus" +} +``` + +**Error (400 Bad Request):** +```json +{ + "statusCode": 400, + "statusMessage": "ID is required" +} +``` + +**Error (404 Not Found):** +```json +{ + "statusCode": 404, + "statusMessage": "Hak akses not found" +} +``` + +**Error (500 Internal Server Error):** +```json +{ + "statusCode": 500, + "statusMessage": "Failed to delete hak akses" +} +``` + +--- + +## Mapping Permissions ke Menu Sidebar + +Sistem akan otomatis memetakan `pagename` dari API permission ke nama menu di sidebar. Mapping dilakukan dengan: + +1. **Exact match**: `pagename.toLowerCase() === menu.name.toLowerCase()` +2. **Partial match**: `pagename.toLowerCase().includes(menu.name.toLowerCase())` atau sebaliknya + +### Contoh Mapping: +- `pagename: "Halaman Utama"` → Menu: "Dashboard" +- `pagename: "Pengaturan"` → Menu: "Master Data" +- `pagename: "Hak Akses"` → Menu: "Hak Akses" + +### Permission Mapping: +- `read: true` → `canView: true` +- `create: true` → `canAdd: true` +- `update: true` → `canEdit: true` +- `delete: true` → `canDelete: true` +- `active: true || read: true` → `canAccess: true` + +--- + +## Group-Based Access + +Sistem mendukung **Group-Based Access** dimana: +- Satu hak akses dapat diberikan ke semua user yang memiliki group dan role yang sama +- Setiap user dapat memiliki multiple hak akses dari berbagai group +- Hak akses disimpan dengan flag `isGroupBased: true` dan `groupPath` untuk identifikasi + +### Contoh: +Jika hak akses dibuat dengan: +- `role: "superadmin"` +- `groupPath: "/Instalasi STIM/Devops/Superadmin"` +- `isGroupBased: true` + +Maka semua user yang memiliki: +- Role: "superadmin" **DAN** +- Group: "/Instalasi STIM/Devops/Superadmin" + +Akan otomatis mendapatkan hak akses tersebut. + +--- + +## Error Handling + +Semua endpoint harus mengembalikan error dengan format konsisten: + +```json +{ + "statusCode": 400|404|409|500, + "statusMessage": "Error message description" +} +``` + +**HTTP Status Codes:** +- `200 OK`: Request berhasil +- `201 Created`: Resource berhasil dibuat +- `400 Bad Request`: Request tidak valid (missing required fields, invalid format) +- `404 Not Found`: Resource tidak ditemukan +- `409 Conflict`: Resource sudah ada (untuk create duplicate) +- `500 Internal Server Error`: Server error + +--- + +## Authentication + +**Catatan:** Tim backend perlu menentukan apakah endpoint-endpoint ini memerlukan authentication token atau tidak. Jika diperlukan, tambahkan: + +**Headers:** +``` +Authorization: Bearer {access_token} +``` + +--- + +## Testing + +### Contoh Request dengan cURL: + +**1. Get Users List:** +```bash +curl -X GET "http://{API_BASE_URL}/api/users/list" \ + -H "Content-Type: application/json" +``` + +**2. Get Permissions:** +```bash +curl -X GET "http://{API_BASE_URL}/api/v1/permission?roles=superadmin&groups=STIM" \ + -H "Content-Type: application/json" +``` + +**3. Create Hak Akses:** +```bash +curl -X POST "http://{API_BASE_URL}/api/v1/hak-akses" \ + -H "Content-Type: application/json" \ + -d '{ + "role": "superadmin", + "group": "STIM", + "groupPath": "/Instalasi STIM/Devops/Superadmin", + "namaTipeUser": "Super Admin", + "hakAksesMenu": [ + { + "name": "Dashboard", + "canAccess": true, + "canView": true, + "canAdd": false, + "canEdit": false, + "canDelete": false + } + ], + "isGroupBased": true + }' +``` + +**4. Update Hak Akses:** +```bash +curl -X PATCH "http://{API_BASE_URL}/api/v1/hak-akses/1" \ + -H "Content-Type: application/json" \ + -d '{ + "namaTipeUser": "Updated Admin", + "hakAksesMenu": [...] + }' +``` + +**5. Delete Hak Akses:** +```bash +curl -X DELETE "http://{API_BASE_URL}/api/v1/hak-akses/1" \ + -H "Content-Type: application/json" +``` + +--- + +## Catatan Penting + +1. **Base URL**: Ganti `{API_BASE_URL}` dengan URL backend yang sebenarnya +2. **Timestamps**: Semua timestamp menggunakan format Unix timestamp (detik sejak epoch) +3. **Group Path**: Group path harus full path (contoh: "/Instalasi STIM/Devops/Superadmin") untuk group-based access +4. **Menu Permissions**: Array `hakAksesMenu` harus sesuai dengan struktur menu sidebar +5. **Validation**: Backend harus melakukan validasi untuk: + - Required fields (role, group, hakAksesMenu) + - Duplicate check untuk group+role combination (jika isGroupBased = true) + - Format data yang valid + +--- + +## Kontak + +Jika ada pertanyaan atau perubahan requirement, silakan hubungi tim frontend. + diff --git a/components/verification/PatientVerificationList.vue b/components/verification/PatientVerificationList.vue index 5e2d2ac..38e6870 100644 --- a/components/verification/PatientVerificationList.vue +++ b/components/verification/PatientVerificationList.vue @@ -1,83 +1,93 @@ @@ -99,12 +109,14 @@ defineEmits(['verify']); \ No newline at end of file diff --git a/pages/CheckInPasien/checkIn.vue.backup.combined-layout b/pages/CheckInPasien/checkIn.vue.backup.combined-layout new file mode 100644 index 0000000..2f72c74 --- /dev/null +++ b/pages/CheckInPasien/checkIn.vue.backup.combined-layout @@ -0,0 +1,3386 @@ + + + + + \ No newline at end of file diff --git a/pages/CheckInPasien/checkIn.vue.before-combined.backup b/pages/CheckInPasien/checkIn.vue.before-combined.backup new file mode 100644 index 0000000..964886f --- /dev/null +++ b/pages/CheckInPasien/checkIn.vue.before-combined.backup @@ -0,0 +1,3351 @@ + + + + + \ No newline at end of file diff --git a/pages/MonitoringPasien/monitoringPasien.vue b/pages/MonitoringPasien/monitoringPasien.vue index 2fe1497..e520982 100644 --- a/pages/MonitoringPasien/monitoringPasien.vue +++ b/pages/MonitoringPasien/monitoringPasien.vue @@ -1,27 +1,43 @@ @@ -95,6 +154,14 @@ definePageMeta({ const router = useRouter(); +// Get current date formatted +const currentDate = computed(() => { + const date = new Date(); + const days = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu']; + const months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember']; + return `${days[date.getDay()]}, ${date.getDate()} ${months[date.getMonth()]} ${date.getFullYear()}`; +}); + // === STATE MANAGEMENT === const activeTab = ref('all'); @@ -224,29 +291,180 @@ const viewPatient = (patientId) => { }; - \ No newline at end of file diff --git a/pages/MonitoringPasien/pasien/[id].vue b/pages/MonitoringPasien/pasien/[id].vue index 2cc8beb..0955d28 100644 --- a/pages/MonitoringPasien/pasien/[id].vue +++ b/pages/MonitoringPasien/pasien/[id].vue @@ -1,30 +1,44 @@ - \ No newline at end of file diff --git a/pages/Setting/HakAkses.vue b/pages/Setting/HakAkses.vue index 04f6bcb..2d91378 100644 --- a/pages/Setting/HakAkses.vue +++ b/pages/Setting/HakAkses.vue @@ -45,74 +45,22 @@ - - Pilih User (Optional) - + - - + Group-Based Access + Hak akses akan diberikan ke semua user yang memiliki group dan role yang dipilih. + Setiap user dapat memiliki multiple hak akses dari berbagai group. + - - User ID - - - - Nama Lengkap - - - - Nama User - - - - Tipe User - - - - - - Role + + Role * - - Group + + Group * + required + @update:model-value="onGroupSelected" + > + + +
+ + {{ selectedGroupUsers.length }} user akan mendapatkan hak akses ini + +
- +
+ + + User yang akan mendapatkan hak akses: + +
+ + {{ user.namaLengkap || user.namaUser }} ({{ user.namaUser }}) + +
+
+
+
+ + Nama Tipe User (Optional) - - Role - - - - Group - - - - Nama Tipe User - + + Hak Akses (Multiple Groups) + +
+ + mdi-account-group + {{ hakAkses.group }} / {{ hakAkses.role }} + + Tidak ada hak akses +
+
@@ -589,20 +559,7 @@ - - - - + - + - + {{ item.id }} - + @@ -689,40 +646,30 @@ - - - - - - - - -