{
	"info": {
		"_postman_id": "api-absensi-mobile-v2",
		"name": "API Absensi Mobile V2",
		"description": "Complete API collection for Absensi Mobile V2 - Web Dashboard",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"variable": [
		{
			"key": "base_url",
			"value": "http://localhost:8081/api",
			"type": "string"
		},
		{
			"key": "token",
			"value": "",
			"type": "string"
		}
	],
	"auth": {
		"type": "bearer",
		"bearer": [
			{
				"key": "token",
				"value": "{{token}}",
				"type": "string"
			}
		]
	},
	"item": [
		{
			"name": "1. Authentication",
			"item": [
				{
					"name": "Login",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = pm.response.json();",
									"if (jsonData.token) {",
									"    pm.collectionVariables.set('token', jsonData.token);",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"12345\",\n    \"password\": \"password123\",\n    \"device_id\": \"abc123xyz\"\n}"
						},
						"url": "{{base_url}}/login"
					}
				},
				{
					"name": "Check Session",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"12345\",\n    \"deviceId\": \"abc123xyz\"\n}"
						},
						"url": "{{base_url}}/checksession"
					}
				},
				{
					"name": "Delete Device",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"12345\"\n}"
						},
						"url": "{{base_url}}/deletedevice"
					}
				}
			]
		},
		{
			"name": "2. Attendance (Mobile)",
			"item": [
				{
					"name": "Absen Masuk",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"latitude\": \"-6.2088\",\n    \"longitude\": \"106.8456\",\n    \"branch_id\": \"010\",\n    \"cdate\": \"2026-01-11 08:00:00\"\n}"
						},
						"url": "{{base_url}}/absenmasuk"
					}
				},
				{
					"name": "Absen Pulang",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"latitude\": \"-6.2088\",\n    \"longitude\": \"106.8456\",\n    \"branch_id\": \"010\",\n    \"cdate\": \"2026-01-11 17:00:00\"\n}"
						},
						"url": "{{base_url}}/absenpulang"
					}
				},
				{
					"name": "Get Absen Today",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\"\n}"
						},
						"url": "{{base_url}}/getabsen"
					}
				},
				{
					"name": "Get Kantor",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"kode_kantor\": \"010\"\n}"
						},
						"url": "{{base_url}}/kantor"
					}
				}
			]
		},
		{
			"name": "3. Presence Management",
			"item": [
				{
					"name": "List Presences",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/presences?start_date=2024-01-01&end_date=2024-12-31&per_page=50"
					}
				},
				{
					"name": "Create Presence",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"latitude\": \"-6.2088\",\n    \"longitude\": \"106.8456\",\n    \"tgl_absensi\": \"2024-01-15\",\n    \"jam_masuk\": \"2024-01-15 08:00:00\",\n    \"jam_pulang\": \"2024-01-15 17:00:00\",\n    \"branch_id\": \"010\"\n}"
						},
						"url": "{{base_url}}/presences"
					}
				},
				{
					"name": "Get Presence",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/presences/1"
					}
				},
				{
					"name": "Update Presence",
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"jam_masuk\": \"2024-01-15 08:30:00\",\n    \"jam_pulang\": \"2024-01-15 17:30:00\"\n}"
						},
						"url": "{{base_url}}/presences/1"
					}
				},
				{
					"name": "Delete Presence",
					"request": {
						"method": "DELETE",
						"url": "{{base_url}}/presences/1"
					}
				}
			]
		},
		{
			"name": "4. Branch Management",
			"item": [
				{
					"name": "List Branches",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/branches?per_page=50"
					}
				},
				{
					"name": "Create Branch",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"kode_kantor\": \"BR005\",\n    \"nama_kantor\": \"Cabang Baru\",\n    \"latitude\": \"-6.2088\",\n    \"longitude\": \"106.8456\",\n    \"radius\": 100\n}"
						},
						"url": "{{base_url}}/branches"
					}
				},
				{
					"name": "Get Branch",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/branches/1"
					}
				},
				{
					"name": "Update Branch",
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"nama_kantor\": \"Cabang Updated\",\n    \"radius\": 150\n}"
						},
						"url": "{{base_url}}/branches/1"
					}
				},
				{
					"name": "Delete Branch",
					"request": {
						"method": "DELETE",
						"url": "{{base_url}}/branches/1"
					}
				}
			]
		},
		{
			"name": "5. Jam Absensi",
			"item": [
				{
					"name": "List Jam Absensi",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/jam-absensi"
					}
				},
				{
					"name": "Get Active Jam Absensi",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/jam-absensi/active"
					}
				},
				{
					"name": "Create Jam Absensi",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"nama\": \"Shift Pagi\",\n    \"start_jam_masuk\": \"06:00:00\",\n    \"end_jam_masuk\": \"08:00:00\",\n    \"start_jam_pulang\": \"14:00:00\",\n    \"end_jam_pulang\": \"16:00:00\"\n}"
						},
						"url": "{{base_url}}/jam-absensi"
					}
				},
				{
					"name": "Set Active",
					"request": {
						"method": "POST",
						"url": "{{base_url}}/jam-absensi/1/set-active"
					}
				}
			]
		},
		{
			"name": "6. Device Reset",
			"item": [
				{
					"name": "[Mobile] Request Reset",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"reason\": \"HP hilang dan sudah beli baru\"\n}"
						},
						"url": "{{base_url}}/device-reset/request"
					}
				},
				{
					"name": "[Mobile] My Request",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\"\n}"
						},
						"url": "{{base_url}}/device-reset/my-request"
					}
				},
				{
					"name": "[Admin] List All",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/device-reset?per_page=50"
					}
				},
				{
					"name": "[Admin] Pending",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/device-reset/pending"
					}
				},
				{
					"name": "[Admin] Approve",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"admin_npp\": \"admin001\",\n    \"notes\": \"Approved\"\n}"
						},
						"url": "{{base_url}}/device-reset/1/approve"
					}
				},
				{
					"name": "[Admin] Reject",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"admin_npp\": \"admin001\",\n    \"reason\": \"Alasan tidak valid\"\n}"
						},
						"url": "{{base_url}}/device-reset/1/reject"
					}
				}
			]
		},
		{
			"name": "7. Dashboard Statistics",
			"item": [
				{
					"name": "Summary",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/dashboard/summary?date=2024-10-15"
					}
				},
				{
					"name": "Monthly Trend",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/dashboard/monthly-trend?year=2024"
					}
				},
				{
					"name": "Weekly Pattern",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/dashboard/weekly-pattern?start_date=2024-01-01&end_date=2024-12-31"
					}
				},
				{
					"name": "Hourly Distribution",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/dashboard/hourly-distribution?start_date=2024-10-01&end_date=2024-10-31"
					}
				},
				{
					"name": "Branch Comparison",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/dashboard/branch-comparison?start_date=2024-10-01&end_date=2024-10-31"
					}
				}
			]
		},
		{
			"name": "8. Blog/News",
			"item": [
				{
					"name": "[Mobile] Published",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/blogs/published?limit=10"
					}
				},
				{
					"name": "[Mobile] Featured",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/blogs/featured?limit=5"
					}
				},
				{
					"name": "[Mobile] By Slug",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/blogs/slug/pengumuman-jadwal-cuti"
					}
				},
				{
					"name": "[Admin] List All",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/blogs?per_page=20"
					}
				},
				{
					"name": "[Admin] Create",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"title\": \"Judul Blog Baru\",\n    \"content\": \"<p>Konten blog...</p>\",\n    \"category\": \"news\",\n    \"status\": \"draft\"\n}"
						},
						"url": "{{base_url}}/blogs"
					}
				},
				{
					"name": "[Admin] Publish",
					"request": {
						"method": "POST",
						"url": "{{base_url}}/blogs/1/publish"
					}
				},
				{
					"name": "[Admin] Archive",
					"request": {
						"method": "POST",
						"url": "{{base_url}}/blogs/1/archive"
					}
				}
			]
		},
		{
			"name": "9. Notifications",
			"item": [
				{
					"name": "List Notifications",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/notifications?npp=10001&per_page=20"
					}
				},
				{
					"name": "Unread Count",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/notifications/unread-count?npp=10001"
					}
				},
				{
					"name": "Mark as Read",
					"request": {
						"method": "POST",
						"url": "{{base_url}}/notifications/1/read"
					}
				},
				{
					"name": "Mark All as Read",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\"\n}"
						},
						"url": "{{base_url}}/notifications/read-all"
					}
				},
				{
					"name": "Delete Notification",
					"request": {
						"method": "DELETE",
						"url": "{{base_url}}/notifications/1"
					}
				},
				{
					"name": "Register FCM Token",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"fcm_token\": \"your_fcm_token_from_flutter\",\n    \"device_type\": \"android\",\n    \"device_id\": \"device123\"\n}"
						},
						"url": "{{base_url}}/fcm/register"
					}
				},
				{
					"name": "Unregister FCM Token",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"fcm_token\": \"your_fcm_token_from_flutter\"\n}"
						},
						"url": "{{base_url}}/fcm/unregister"
					}
				},
				{
					"name": "[Admin] Send Test",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"npp\": \"10001\",\n    \"title\": \"Test Notification\",\n    \"body\": \"Ini adalah test push notification\"\n}"
						},
						"url": "{{base_url}}/notifications/send-test"
					}
				},
				{
					"name": "[Admin] Broadcast",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"title\": \"Pengumuman Penting\",\n    \"body\": \"Ini broadcast ke semua user\",\n    \"type\": \"announcement\"\n}"
						},
						"url": "{{base_url}}/notifications/broadcast"
					}
				}
			]
		},
		{
			"name": "10. Users & Employees",
			"item": [
				{
					"name": "Get User by NPP",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/users/12345"
					}
				},
				{
					"name": "List Pegawai",
					"request": {
						"method": "GET",
						"url": "{{base_url}}/pegawai"
					}
				}
			]
		}
	]
}