From bd44be14ff04b9877ee1116272cadab84fd22eb1 Mon Sep 17 00:00:00 2001 From: Syifa Date: Fri, 28 Nov 2025 09:01:05 +0700 Subject: [PATCH] feat: csa-dashboard for deploy argocd, no fix --- csa-dashboard/.eslintrc.json | 6 + csa-dashboard/.gitignore | 8 + csa-dashboard/API.postman_collection.json | 2480 +++++ csa-dashboard/Dockerfile | 14 + csa-dashboard/Jenkinsfile | 120 + csa-dashboard/README.md | 196 + .../app/(dashboard)/api-management/page.tsx | 262 + .../app/(dashboard)/campaigns/page.tsx | 805 ++ .../app/(dashboard)/campaigns/send/page.tsx | 145 + .../app/(dashboard)/campaigns/setup/page.tsx | 152 + .../app/(dashboard)/cms/buckets/page.tsx | 143 + .../cms/content/[type]/create/page.tsx | 143 + .../cms/content/[type]/edit/[id]/page.tsx | 136 + .../(dashboard)/cms/content/[type]/page.tsx | 186 + .../app/(dashboard)/cms/content/page.tsx | 85 + csa-dashboard/app/(dashboard)/layout.tsx | 7 + csa-dashboard/app/(dashboard)/openai/page.tsx | 74 + csa-dashboard/app/(dashboard)/page.tsx | 633 ++ csa-dashboard/app/(dashboard)/users/page.tsx | 231 + csa-dashboard/app/globals.css | 228 + csa-dashboard/app/layout.tsx | 35 + csa-dashboard/app/login/page.tsx | 110 + csa-dashboard/app/register/page.tsx | 115 + .../data-table/data-table-pagination.tsx | 68 + .../data-table/data-table-toolbar.tsx | 39 + .../components/data-table/data-table.tsx | 109 + csa-dashboard/components/empty-state.tsx | 22 + .../components/layout/dashboard-layout.tsx | 16 + csa-dashboard/components/layout/sidebar.tsx | 86 + csa-dashboard/components/layout/topbar.tsx | 95 + csa-dashboard/components/ui/alert-dialog.tsx | 141 + csa-dashboard/components/ui/avatar.tsx | 41 + csa-dashboard/components/ui/badge.tsx | 30 + csa-dashboard/components/ui/button.tsx | 52 + csa-dashboard/components/ui/card.tsx | 66 + csa-dashboard/components/ui/dialog.tsx | 95 + csa-dashboard/components/ui/dropdown-menu.tsx | 125 + csa-dashboard/components/ui/input.tsx | 23 + csa-dashboard/components/ui/label.tsx | 23 + csa-dashboard/components/ui/switch.tsx | 26 + csa-dashboard/components/ui/table.tsx | 111 + csa-dashboard/components/ui/toast.tsx | 126 + csa-dashboard/components/ui/toaster.tsx | 35 + csa-dashboard/config/constants.ts | 52 + csa-dashboard/config/env.ts | 12 + csa-dashboard/hooks/use-toast.ts | 175 + csa-dashboard/lib/api-client.ts | 31 + csa-dashboard/lib/query-client.ts | 11 + csa-dashboard/lib/utils.ts | 30 + csa-dashboard/middleware.ts | 23 + csa-dashboard/modules/admin/hooks.ts | 23 + csa-dashboard/modules/admin/schemas.ts | 71 + csa-dashboard/modules/admin/services.ts | 28 + csa-dashboard/modules/api-management/hooks.ts | 38 + .../modules/api-management/schemas.ts | 11 + .../modules/api-management/services.ts | 31 + csa-dashboard/modules/campaigns/hooks.ts | 77 + csa-dashboard/modules/campaigns/schemas.ts | 158 + csa-dashboard/modules/campaigns/services.ts | 59 + csa-dashboard/modules/cms/bucket/hooks.ts | 40 + csa-dashboard/modules/cms/bucket/schemas.ts | 20 + csa-dashboard/modules/cms/bucket/services.ts | 27 + csa-dashboard/modules/cms/content/hooks.ts | 42 + csa-dashboard/modules/cms/content/schemas.ts | 33 + csa-dashboard/modules/cms/content/services.ts | 55 + csa-dashboard/modules/openai/hooks.ts | 8 + csa-dashboard/modules/openai/schemas.ts | 7 + csa-dashboard/modules/openai/services.ts | 9 + csa-dashboard/modules/users/hooks.ts | 16 + csa-dashboard/modules/users/schemas.ts | 22 + csa-dashboard/modules/users/services.ts | 20 + csa-dashboard/next-env.d.ts | 5 + csa-dashboard/next.config.ts | 14 + csa-dashboard/package-lock.json | 8567 +++++++++++++++++ csa-dashboard/package.json | 52 + csa-dashboard/postcss.config.js | 6 + csa-dashboard/providers/auth-provider.tsx | 77 + csa-dashboard/providers/query-provider.tsx | 10 + csa-dashboard/providers/theme-provider.tsx | 11 + csa-dashboard/tailwind.config.ts | 58 + csa-dashboard/tsconfig.json | 40 + csa-manifest/argocd/csa-application.yaml | 18 + csa-manifest/argocd/csa-project.yaml | 18 + csa-manifest/base-k8s/csa-deployment.yaml | 0 csa-manifest/base-k8s/kustomization.yaml | 0 csa-manifest/overlays/kustomization.yaml | 0 csa-manifest/overlays/patch.yaml | 0 87 files changed, 17648 insertions(+) create mode 100644 csa-dashboard/.eslintrc.json create mode 100644 csa-dashboard/.gitignore create mode 100644 csa-dashboard/API.postman_collection.json create mode 100644 csa-dashboard/Dockerfile create mode 100644 csa-dashboard/Jenkinsfile create mode 100644 csa-dashboard/README.md create mode 100644 csa-dashboard/app/(dashboard)/api-management/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/campaigns/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/campaigns/send/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/campaigns/setup/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/cms/buckets/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/cms/content/[type]/create/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/cms/content/[type]/edit/[id]/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/cms/content/[type]/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/cms/content/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/layout.tsx create mode 100644 csa-dashboard/app/(dashboard)/openai/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/page.tsx create mode 100644 csa-dashboard/app/(dashboard)/users/page.tsx create mode 100644 csa-dashboard/app/globals.css create mode 100644 csa-dashboard/app/layout.tsx create mode 100644 csa-dashboard/app/login/page.tsx create mode 100644 csa-dashboard/app/register/page.tsx create mode 100644 csa-dashboard/components/data-table/data-table-pagination.tsx create mode 100644 csa-dashboard/components/data-table/data-table-toolbar.tsx create mode 100644 csa-dashboard/components/data-table/data-table.tsx create mode 100644 csa-dashboard/components/empty-state.tsx create mode 100644 csa-dashboard/components/layout/dashboard-layout.tsx create mode 100644 csa-dashboard/components/layout/sidebar.tsx create mode 100644 csa-dashboard/components/layout/topbar.tsx create mode 100644 csa-dashboard/components/ui/alert-dialog.tsx create mode 100644 csa-dashboard/components/ui/avatar.tsx create mode 100644 csa-dashboard/components/ui/badge.tsx create mode 100644 csa-dashboard/components/ui/button.tsx create mode 100644 csa-dashboard/components/ui/card.tsx create mode 100644 csa-dashboard/components/ui/dialog.tsx create mode 100644 csa-dashboard/components/ui/dropdown-menu.tsx create mode 100644 csa-dashboard/components/ui/input.tsx create mode 100644 csa-dashboard/components/ui/label.tsx create mode 100644 csa-dashboard/components/ui/switch.tsx create mode 100644 csa-dashboard/components/ui/table.tsx create mode 100644 csa-dashboard/components/ui/toast.tsx create mode 100644 csa-dashboard/components/ui/toaster.tsx create mode 100644 csa-dashboard/config/constants.ts create mode 100644 csa-dashboard/config/env.ts create mode 100644 csa-dashboard/hooks/use-toast.ts create mode 100644 csa-dashboard/lib/api-client.ts create mode 100644 csa-dashboard/lib/query-client.ts create mode 100644 csa-dashboard/lib/utils.ts create mode 100644 csa-dashboard/middleware.ts create mode 100644 csa-dashboard/modules/admin/hooks.ts create mode 100644 csa-dashboard/modules/admin/schemas.ts create mode 100644 csa-dashboard/modules/admin/services.ts create mode 100644 csa-dashboard/modules/api-management/hooks.ts create mode 100644 csa-dashboard/modules/api-management/schemas.ts create mode 100644 csa-dashboard/modules/api-management/services.ts create mode 100644 csa-dashboard/modules/campaigns/hooks.ts create mode 100644 csa-dashboard/modules/campaigns/schemas.ts create mode 100644 csa-dashboard/modules/campaigns/services.ts create mode 100644 csa-dashboard/modules/cms/bucket/hooks.ts create mode 100644 csa-dashboard/modules/cms/bucket/schemas.ts create mode 100644 csa-dashboard/modules/cms/bucket/services.ts create mode 100644 csa-dashboard/modules/cms/content/hooks.ts create mode 100644 csa-dashboard/modules/cms/content/schemas.ts create mode 100644 csa-dashboard/modules/cms/content/services.ts create mode 100644 csa-dashboard/modules/openai/hooks.ts create mode 100644 csa-dashboard/modules/openai/schemas.ts create mode 100644 csa-dashboard/modules/openai/services.ts create mode 100644 csa-dashboard/modules/users/hooks.ts create mode 100644 csa-dashboard/modules/users/schemas.ts create mode 100644 csa-dashboard/modules/users/services.ts create mode 100644 csa-dashboard/next-env.d.ts create mode 100644 csa-dashboard/next.config.ts create mode 100644 csa-dashboard/package-lock.json create mode 100644 csa-dashboard/package.json create mode 100644 csa-dashboard/postcss.config.js create mode 100644 csa-dashboard/providers/auth-provider.tsx create mode 100644 csa-dashboard/providers/query-provider.tsx create mode 100644 csa-dashboard/providers/theme-provider.tsx create mode 100644 csa-dashboard/tailwind.config.ts create mode 100644 csa-dashboard/tsconfig.json create mode 100644 csa-manifest/argocd/csa-application.yaml create mode 100644 csa-manifest/argocd/csa-project.yaml create mode 100644 csa-manifest/base-k8s/csa-deployment.yaml create mode 100644 csa-manifest/base-k8s/kustomization.yaml create mode 100644 csa-manifest/overlays/kustomization.yaml create mode 100644 csa-manifest/overlays/patch.yaml diff --git a/csa-dashboard/.eslintrc.json b/csa-dashboard/.eslintrc.json new file mode 100644 index 0000000..80cf49f --- /dev/null +++ b/csa-dashboard/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["next/core-web-vitals"], + "parserOptions": { + "project": "./tsconfig.json" + } +} \ No newline at end of file diff --git a/csa-dashboard/.gitignore b/csa-dashboard/.gitignore new file mode 100644 index 0000000..525cdbb --- /dev/null +++ b/csa-dashboard/.gitignore @@ -0,0 +1,8 @@ +node_modules +.next +.env.local +.env +dist +build +*.log +.DS_Store diff --git a/csa-dashboard/API.postman_collection.json b/csa-dashboard/API.postman_collection.json new file mode 100644 index 0000000..e029bbc --- /dev/null +++ b/csa-dashboard/API.postman_collection.json @@ -0,0 +1,2480 @@ +{ + "info": { + "_postman_id": "9d0c3516-7b28-4fb0-9830-8088ca831a2f", + "name": "API", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "23407696" + }, + "item": [ + { + "name": "API MANAGEMENT", + "item": [ + { + "name": "TEST", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test" + ] + } + }, + "response": [ + { + "name": "TEST", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "59" + }, + { + "key": "ETag", + "value": "W/\"3b-nXWiaHcyTTDLY07VHQ/e0hQhOiQ\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:52:47 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"API Connected!\",\n \"data\": null\n}" + } + ] + }, + { + "name": "TEST SECURE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test/secure", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test", + "secure" + ] + } + }, + "response": [ + { + "name": "TEST SECURE", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test/secure", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test", + "secure" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "155" + }, + { + "key": "ETag", + "value": "W/\"9b-It9mTyV43wPaJqUIyZJZYFX1wRY\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:52:54 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Secure API Connected!\",\n \"data\": {\n \"message\": \"Authentication successful\",\n \"credentialId\": \"af35a0f7-8bb1-4b75-a5ab-a98225d9daf7\"\n }\n}" + } + ] + }, + { + "name": "TEST TOKEN", + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiJkZWY5MzA5YS0wMDdjLTQ5NzMtOTU3Ny0zNTRkNDA3NjlmNDIiLCJpYXQiOjE3NjQwNTcwNjksImV4cCI6MTc2NDE0MzQ2OX0.p6-ahnmHzxRT849yp6c7ghh17hZVR8wsI2yTruBhZgg", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test", + "token" + ] + } + }, + "response": [ + { + "name": "TEST TOKEN", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/test/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "test", + "token" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "110" + }, + { + "key": "ETag", + "value": "W/\"6e-AZvKpBaGxixut5AGT3vYwr3tI14\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:53:43 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Token API Connected!\",\n \"data\": {\n \"userID\": \"def9309a-007c-4973-9577-354d40769f42\"\n }\n}" + } + ] + }, + { + "name": "GET ALL TOKENS", + "request": { + "method": "GET", + "header": [] + }, + "response": [ + { + "name": "GET ALL TOKENS", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/tokens", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "tokens" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "714" + }, + { + "key": "ETag", + "value": "W/\"2ca-KBAMf4UxZ4IZlWUSkT2gRYE7Hbs\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 13:35:02 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"API tokens retrieved successfully!\",\n \"data\": {\n \"total\": 3,\n \"tokens\": [\n {\n \"UUID_AC\": \"7828145e-8466-4b4e-a677-c6fef6aa6969\",\n \"TokenCredential_AC\": \"52678af854b4c482ab8337ac1b2647721926dd8980ae4863c9ed72c300b697d5\",\n \"UpdatedAt_AC\": \"2025-11-25T08:20:25.675Z\",\n \"CreatedAt_AC\": \"2025-11-25T15:20:25.674Z\"\n },\n {\n \"UUID_AC\": \"10e07ce7-e2cf-49de-9983-f5a196298e74\",\n \"TokenCredential_AC\": \"3d4400a695f914cdc2a24e2680c72c6dad39a0e95635350ace062a19f8dbd8c0\",\n \"UpdatedAt_AC\": \"2025-11-25T08:20:03.876Z\",\n \"CreatedAt_AC\": \"2025-11-25T15:20:03.874Z\"\n },\n {\n \"UUID_AC\": \"af35a0f7-8bb1-4b75-a5ab-a98225d9daf7\",\n \"TokenCredential_AC\": \"cifosuperapp\",\n \"UpdatedAt_AC\": \"2025-08-22T15:49:03.000Z\",\n \"CreatedAt_AC\": \"2025-08-22T15:49:01.000Z\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "CREATE NEW KEY", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "token" + ] + } + }, + "response": [ + { + "name": "CREATE NEW KEY", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "token" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "189" + }, + { + "key": "ETag", + "value": "W/\"bd-wZDcH+Fjx8Fbh5Mf5bIqavovUHk\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:55:52 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"API key created successfully!\",\n \"data\": {\n \"apiKey\": \"cifosuperapps\",\n \"credentialId\": \"4acbcf86-8928-4f07-b081-046fdc650ac0\",\n \"createdAt\": \"2025-11-25T14:55:52.208Z\"\n }\n}" + } + ] + }, + { + "name": "DELETE KEY", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "token" + ] + } + }, + "response": [ + { + "name": "DELETE KEY", + "originalRequest": { + "method": "DELETE", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{API_MANAGEMENT}}/token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{API_MANAGEMENT}}", + "token" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "189" + }, + { + "key": "ETag", + "value": "W/\"bd-m29pEVR+t4Ep4GO9FPAUXS9T3gE\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:56:22 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"API key deleted successfully!\",\n \"data\": {\n \"apiKey\": \"cifosuperapps\",\n \"credentialId\": \"4acbcf86-8928-4f07-b081-046fdc650ac0\",\n \"deletedAt\": \"2025-11-25T07:56:22.423Z\"\n }\n}" + } + ] + } + ] + }, + { + "name": "CAMPAIGN MANAGEMENT", + "item": [ + { + "name": "SEND SINGLE CAMPAIGN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"userID\" : \"CH9QX5WB\",\r\n \"title\": \"TEST\",\r\n \"body\": \"TEST\",\r\n \"data\": {}\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{CAMPAIGN_MANAGEMENT}}/send", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CAMPAIGN_MANAGEMENT}}", + "send" + ] + } + }, + "response": [] + }, + { + "name": "SETUP CAMPAIGN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Selamat Pagi Dunia!\",\r\n \"content\": \"Jangan lupa cek cek promo terbaru ya!\",\r\n \"date\": \"2025-11-26T08:15:00Z\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{CAMPAIGN_MANAGEMENT}}/setup", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CAMPAIGN_MANAGEMENT}}", + "setup" + ] + } + }, + "response": [] + }, + { + "name": "GET CAMPAIGN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{CAMPAIGN_MANAGEMENT}}/all?status=completed", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CAMPAIGN_MANAGEMENT}}", + "all" + ], + "query": [ + { + "key": "status", + "value": "completed" + } + ] + } + }, + "response": [] + }, + { + "name": "CANCEL CAMPAIGN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "target-x-api-key", + "value": "cifosuperapps", + "type": "text" + } + ], + "url": { + "raw": "{{BASE_URL}}/{{CAMPAIGN_MANAGEMENT}}/df6db223-6e55-4d05-981f-6a5ded3b2c26", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CAMPAIGN_MANAGEMENT}}", + "df6db223-6e55-4d05-981f-6a5ded3b2c26" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "CMS MANAGEMENT", + "item": [ + { + "name": "CONTENT", + "item": [ + { + "name": "CREATE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "title", + "value": "CIFO: Layanan Internet Dedicated CIFO: Koneksi Eksklusif untuk Bisnis Anda 2", + "type": "text" + }, + { + "key": "description", + "value": "null", + "type": "text" + }, + { + "key": "image", + "type": "file", + "src": "/C:/Users/cifo/OneDrive/Pictures/bg.png" + }, + { + "key": "type", + "value": "article", + "type": "text" + }, + { + "key": "corp", + "value": "cifo", + "type": "text" + }, + { + "key": "targetUrl", + "value": "https://www.cifo.co.id/blog/cifo-layanan-internet-dedicated-cifo-koneksi-eksklusif-untuk-bisnis-anda", + "type": "text" + } + ] + }, + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/create", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "create" + ] + } + }, + "response": [ + { + "name": "CREATE", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "title", + "value": "CIFO: Layanan Internet Dedicated CIFO: Koneksi Eksklusif untuk Bisnis Anda 2", + "type": "text" + }, + { + "key": "description", + "value": "null", + "type": "text" + }, + { + "key": "image", + "type": "file", + "src": "/C:/Users/cifo/OneDrive/Pictures/bg.png" + }, + { + "key": "type", + "value": "article", + "type": "text" + }, + { + "key": "corp", + "value": "cifo", + "type": "text" + }, + { + "key": "targetUrl", + "value": "https://www.cifo.co.id/blog/cifo-layanan-internet-dedicated-cifo-koneksi-eksklusif-untuk-bisnis-anda", + "type": "text" + } + ] + }, + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/create", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "create" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "78" + }, + { + "key": "ETag", + "value": "W/\"4e-xJPomSRfkRn8PbVWI6sDdNpdv34\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:57:18 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"article item created successfully\",\n \"data\": null\n}" + } + ] + }, + { + "name": "GET ALL", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/get/article/all", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "get", + "article", + "all" + ] + } + }, + "response": [ + { + "name": "GET ALL", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/get/article/all", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "get", + "article", + "all" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "ETag", + "value": "W/\"2809-Md0gyYHWMNkX8GTN+JikxgZsEZc\"" + }, + { + "key": "Content-Encoding", + "value": "br" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:57:35 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"article with corp all items retrieved successfully\",\n \"data\": [\n {\n \"UUID_APC\": \"f502ae67-5ed9-4298-adfc-5fa10dac2360\",\n \"Title_APC\": \"CIFO: Layanan Internet Dedicated CIFO: Koneksi Eksklusif untuk Bisnis Anda 2\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/0fd96061-e0b0-4611-b604-7071e409aa97.png\",\n \"Filename_APC\": \"0fd96061-e0b0-4611-b604-7071e409aa97.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-layanan-internet-dedicated-cifo-koneksi-eksklusif-untuk-bisnis-anda\",\n \"UpdatedAt_APC\": \"2025-11-25T07:57:18.787Z\",\n \"CreatedAt_APC\": \"2025-11-25T14:57:18.785Z\"\n },\n {\n \"UUID_APC\": \"7ccc587e-7ed8-496f-bb68-931544fbb656\",\n \"Title_APC\": \"CIFO: Layanan Internet Dedicated CIFO: Koneksi Eksklusif untuk Bisnis Anda\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/ce262188-0de2-4481-a34a-8f1382fcd56d.png\",\n \"Filename_APC\": \"ce262188-0de2-4481-a34a-8f1382fcd56d.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-layanan-internet-dedicated-cifo-koneksi-eksklusif-untuk-bisnis-anda\",\n \"UpdatedAt_APC\": \"2025-11-18T09:46:00.219Z\",\n \"CreatedAt_APC\": \"2025-11-18T16:46:00.217Z\"\n },\n {\n \"UUID_APC\": \"0fc33389-4b07-4537-953c-53f23ce84008\",\n \"Title_APC\": \"Walanja: Platform Traveler Modern untuk Booking Hotel dengan Mudah dan Cepat\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/a27a4a72-da7e-434c-8015-d6f602365cb7.png\",\n \"Filename_APC\": \"a27a4a72-da7e-434c-8015-d6f602365cb7.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/walanja-platform-traveler-modern-untuk-booking-hotel-dengan-mudah-dan-cepat\",\n \"UpdatedAt_APC\": \"2025-11-18T09:45:24.902Z\",\n \"CreatedAt_APC\": \"2025-11-18T16:45:24.901Z\"\n },\n {\n \"UUID_APC\": \"7266925e-599b-4472-9bab-32397e87edff\",\n \"Title_APC\": \"Booking Hotel Mudah Lewat Walanja\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/d9c15b84-36a5-4162-8c63-024c1c61a84e.png\",\n \"Filename_APC\": \"d9c15b84-36a5-4162-8c63-024c1c61a84e.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/booking-hotel-mudah-lewat-walanja\",\n \"UpdatedAt_APC\": \"2025-11-18T09:44:58.225Z\",\n \"CreatedAt_APC\": \"2025-11-18T16:44:58.224Z\"\n },\n {\n \"UUID_APC\": \"4c8a07d2-0669-4b50-bc25-8dc7a0268d55\",\n \"Title_APC\": \"Pentingnya Uptime Tinggi dalam Layanan Internet Korporasi\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/c1ec0983-8b7f-4132-803a-16ad2aaf70cb.png\",\n \"Filename_APC\": \"c1ec0983-8b7f-4132-803a-16ad2aaf70cb.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/pentingnya-uptime-tinggi-dalam-layanan-internet-korporasi\",\n \"UpdatedAt_APC\": \"2025-11-18T09:44:30.028Z\",\n \"CreatedAt_APC\": \"2025-11-18T16:44:30.027Z\"\n },\n {\n \"UUID_APC\": \"2f594279-f092-4184-ac2a-61aa04f43c16\",\n \"Title_APC\": \"Healing Tanpa Drama: Lawan Mager dengan Booking Hotel Praktis di Jawa Barat bersama Walanja\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/9f6097fe-5ff0-41bf-8ce1-7b7fa9f29a96.png\",\n \"Filename_APC\": \"9f6097fe-5ff0-41bf-8ce1-7b7fa9f29a96.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/healing-tanpa-drama-lawan-mager-dengan-booking-hotel-praktis-di-jawa-barat-bersama-walanja\",\n \"UpdatedAt_APC\": \"2025-10-30T08:33:22.991Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:33:22.990Z\"\n },\n {\n \"UUID_APC\": \"f3e69410-83f6-4aea-9b90-fdb632847746\",\n \"Title_APC\": \"Mengapa CIFO Jadi Pilihan Tepat untuk Internet Perusahaan Anda\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/ef2a470e-fdf9-44f9-acb2-40b1a826db29.png\",\n \"Filename_APC\": \"ef2a470e-fdf9-44f9-acb2-40b1a826db29.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/mengapa-cifo-jadi-pilihan-tepat-untuk-internet-perusahaan-anda\",\n \"UpdatedAt_APC\": \"2025-10-30T08:32:51.844Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:32:51.842Z\"\n },\n {\n \"UUID_APC\": \"d754ae59-0a3b-43ac-a889-cca6f6bd45cf\",\n \"Title_APC\": \"CIFO Internet Perusahaan Tanpa Gangguan\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/f050c5f5-18cf-48d5-8f9a-f4541cd75991.png\",\n \"Filename_APC\": \"f050c5f5-18cf-48d5-8f9a-f4541cd75991.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-internet-perusahaan-tanpa-gangguan\",\n \"UpdatedAt_APC\": \"2025-10-30T08:32:25.347Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:32:25.346Z\"\n },\n {\n \"UUID_APC\": \"7a708eb6-7423-40f3-ae2e-23fd2377eb25\",\n \"Title_APC\": \"Hotel nyaman untuk bestie trip\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/a3ab0bfa-9488-4adf-b3a0-c7650a6d20af.png\",\n \"Filename_APC\": \"a3ab0bfa-9488-4adf-b3a0-c7650a6d20af.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/hotel-nyaman-untuk-bestie-trip\",\n \"UpdatedAt_APC\": \"2025-10-30T08:31:50.249Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:31:50.248Z\"\n },\n {\n \"UUID_APC\": \"1c1291af-1ec6-4040-8bfb-be68600adafa\",\n \"Title_APC\": \"Pilihan ISP Andal dan Terbaik CIFO\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/0da943ed-08e6-46fc-bcac-eb52df92406b.png\",\n \"Filename_APC\": \"0da943ed-08e6-46fc-bcac-eb52df92406b.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/pilihan-isp-andal-dan-terbaik-cifo\",\n \"UpdatedAt_APC\": \"2025-10-30T08:31:17.820Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:31:17.819Z\"\n },\n {\n \"UUID_APC\": \"165a3b2e-4f1b-43e7-b6b5-d2bab5770f0b\",\n \"Title_APC\": \"ISP Terbaik Untuk Bisnis\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/dda6c6d6-d1ca-455f-94fe-a50179d54bdd.png\",\n \"Filename_APC\": \"dda6c6d6-d1ca-455f-94fe-a50179d54bdd.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/isp-terbaik-untuk-bisnis\",\n \"UpdatedAt_APC\": \"2025-10-30T08:30:45.575Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:30:45.574Z\"\n },\n {\n \"UUID_APC\": \"84fcecc8-2262-43ce-b4eb-36d819f26846\",\n \"Title_APC\": \"CIFO Internet Cepat untuk Produktivitas Bisnis\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/d761a3d2-8c51-46a4-a471-f856a3876b4a.png\",\n \"Filename_APC\": \"d761a3d2-8c51-46a4-a471-f856a3876b4a.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-internet-cepat-untuk-produktivitas-bisnis\",\n \"UpdatedAt_APC\": \"2025-10-30T08:30:14.451Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:30:14.450Z\"\n },\n {\n \"UUID_APC\": \"922dd40f-fa0a-4043-af51-678a2c913cf9\",\n \"Title_APC\": \"CIFO Internet Cepat Untuk Rumah dan Bisnis\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/bc625f31-26e7-4dbc-88b7-1a86ce4ac2c7.png\",\n \"Filename_APC\": \"bc625f31-26e7-4dbc-88b7-1a86ce4ac2c7.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-internet-cepat-untuk-rumah-bisnis\",\n \"UpdatedAt_APC\": \"2025-10-30T08:29:47.065Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:29:47.064Z\"\n },\n {\n \"UUID_APC\": \"d76fc1c4-134d-41fe-9172-4ee687139fb6\",\n \"Title_APC\": \"CIFO Internet Terbaik untuk Kota Besar dan Daerah\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"cifo\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/98fd76d7-73a9-4cc6-8d0b-dc468fbb6c64.png\",\n \"Filename_APC\": \"98fd76d7-73a9-4cc6-8d0b-dc468fbb6c64.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/cifo-internet-terbaik-untuk-kota-besar-dan-daerah\",\n \"UpdatedAt_APC\": \"2025-10-30T08:29:07.864Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:29:07.863Z\"\n },\n {\n \"UUID_APC\": \"69c1fa74-d4b1-4b08-9cb2-d663d5b946d0\",\n \"Title_APC\": \"Booking Hotel Murah dan Nyaman di Jawa Barat Bersama Walanja\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/948a5044-17ea-4fa9-8b35-8093016cccbd.png\",\n \"Filename_APC\": \"948a5044-17ea-4fa9-8b35-8093016cccbd.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/booking-hotel-murah-dan-nyaman-di-jawa-barat-bersama-walanja\",\n \"UpdatedAt_APC\": \"2025-10-30T08:28:31.004Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:28:31.003Z\"\n },\n {\n \"UUID_APC\": \"fb07952a-9595-4465-967f-8a1304dc27d7\",\n \"Title_APC\": \"Nikmati Liburan Mudah di Jawa Barat Bersama Walanja Platform Booking Hotel Terbaik!\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/1c3502e9-662b-4898-bffd-c11efec702c9.png\",\n \"Filename_APC\": \"1c3502e9-662b-4898-bffd-c11efec702c9.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/nikmati-liburan-mudah-di-jawa-barat-bersama-walanja-platform-booking-hotel-terbaik\",\n \"UpdatedAt_APC\": \"2025-10-30T08:28:00.036Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:28:00.035Z\"\n },\n {\n \"UUID_APC\": \"b82f5648-7592-4b48-bcbd-c41d201db032\",\n \"Title_APC\": \"Walanja Platform Booking Hotel Terpercaya di Jawa Barat\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/380baded-e7f1-4f92-a62d-a248c9bd9bea.png\",\n \"Filename_APC\": \"380baded-e7f1-4f92-a62d-a248c9bd9bea.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/walanja-solusi-booking-hotel-untuk-liburan-di-jawa-barat\",\n \"UpdatedAt_APC\": \"2025-10-30T08:27:27.841Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:27:27.840Z\"\n },\n {\n \"UUID_APC\": \"f385828a-a82a-4fa2-b7e4-61a8ae9f5d2d\",\n \"Title_APC\": \"Booking Hotel Tanpa Ribet\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/fa3aacf5-4b7c-402a-86a2-303ca2c5960c.png\",\n \"Filename_APC\": \"fa3aacf5-4b7c-402a-86a2-303ca2c5960c.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/booking-hotel-online-tanpa-ribet-solusi-cerdas-liburan-modern-bersama-walanja\",\n \"UpdatedAt_APC\": \"2025-10-30T08:26:54.803Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:26:54.802Z\"\n },\n {\n \"UUID_APC\": \"6e76c364-6691-44c2-a19f-cf76e2c67a57\",\n \"Title_APC\": \"Walanja : Platform Booking Hotel Online di Jawa Barat Bersama Walanja\",\n \"Content_APC\": \"null\",\n \"Type_APC\": \"article\",\n \"CorpType_APC\": \"walanja\",\n \"Url_APC\": \"http://storage.cifo.id:443/cifosuperapps/article/70400c32-19fc-475c-91e6-988ea2313480.png\",\n \"Filename_APC\": \"70400c32-19fc-475c-91e6-988ea2313480.png\",\n \"TargetUrl_APC\": \"https://www.cifo.co.id/blog/walanja-platform-booking-hotel-online-di-jawa-barat\",\n \"UpdatedAt_APC\": \"2025-10-30T08:26:30.531Z\",\n \"CreatedAt_APC\": \"2025-10-30T15:26:30.530Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "GET STATS", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/stats", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "stats" + ] + } + }, + "response": [ + { + "name": "GET STATS", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/stats", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "stats" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "", + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "ETag", + "value": "W/\"41d-M5W1C1jG4EAYGx2lbEdOzpPvGhQ\"" + }, + { + "key": "Content-Encoding", + "value": "br" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 13:35:46 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"CMS stats retrieved successfully\",\n \"data\": {\n \"summary\": {\n \"content\": {\n \"splash\": 3,\n \"promo\": 1,\n \"article\": 18,\n \"banner\": 1,\n \"floatingWidget\": 0,\n \"total\": 23\n },\n \"infra\": {\n \"buckets\": 2,\n \"apiKeys\": 3,\n \"users\": 81\n },\n \"campaigns\": 3,\n \"activities\": 0\n },\n \"charts\": {\n \"contentByType\": {\n \"labels\": [\n \"Splash\",\n \"Promo\",\n \"Article\",\n \"Banner\",\n \"Floating Widget\"\n ],\n \"data\": [\n 3,\n 1,\n 18,\n 1,\n 0\n ]\n },\n \"contentByCorpType\": {\n \"labels\": [\n \"walanja\",\n \"cifo\",\n \"simaya\"\n ],\n \"data\": [\n 11,\n 10,\n 2\n ]\n },\n \"contentMatrix\": [\n {\n \"type\": \"article\",\n \"corp\": \"walanja\",\n \"count\": 9\n },\n {\n \"type\": \"article\",\n \"corp\": \"cifo\",\n \"count\": 9\n },\n {\n \"type\": \"splash\",\n \"corp\": \"walanja\",\n \"count\": 1\n },\n {\n \"type\": \"splash\",\n \"corp\": \"simaya\",\n \"count\": 2\n },\n {\n \"type\": \"promo\",\n \"corp\": \"walanja\",\n \"count\": 1\n },\n {\n \"type\": \"banner\",\n \"corp\": \"cifo\",\n \"count\": 1\n }\n ],\n \"contentCreationTimeline\": {\n \"2025-10-30\": {\n \"article\": 14,\n \"splash\": 1\n },\n \"2025-11-18\": {\n \"article\": 4\n }\n },\n \"campaignStatus\": {\n \"labels\": [\n \"pending\",\n \"completed\",\n \"cancelled\"\n ],\n \"data\": [\n 1,\n 1,\n 1\n ]\n },\n \"activityTypes\": {\n \"labels\": [],\n \"data\": []\n },\n \"userRegistrationTrend\": {\n \"labels\": [\n \"2025-11-19\",\n \"2025-11-20\",\n \"2025-11-23\",\n \"2025-11-24\",\n \"2025-11-25\"\n ],\n \"data\": [\n 1,\n 3,\n 1,\n 2,\n 6\n ]\n }\n }\n }\n}" + } + ] + }, + { + "name": "UPDATE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "targetUrl", + "value": "https://www.instagram.com/walanja.co.id/", + "type": "text" + }, + { + "key": "title", + "value": "Liburan Hemat, Pasti Nyaman!", + "type": "text" + }, + { + "key": "corp", + "value": "walanja", + "type": "text" + }, + { + "key": "description", + "value": "Booking Hotel untuk mendukung liburan kamu di Walanja!Dapatkan pilihan hotel berkualitas dengan harga hemat!", + "type": "text" + }, + { + "key": "image", + "type": "file", + "src": "/C:/Users/cifo/OneDrive/Pictures/bg.png" + }, + { + "key": "type", + "value": "promo", + "type": "text" + } + ] + }, + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/update/f502ae67-5ed9-4298-adfc-5fa10dac2360", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "update", + "f502ae67-5ed9-4298-adfc-5fa10dac2360" + ] + } + }, + "response": [ + { + "name": "UPDATE", + "originalRequest": { + "method": "PUT", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "targetUrl", + "value": "https://www.instagram.com/walanja.co.id/", + "type": "text" + }, + { + "key": "title", + "value": "Liburan Hemat, Pasti Nyaman!", + "type": "text" + }, + { + "key": "corp", + "value": "walanja", + "type": "text" + }, + { + "key": "description", + "value": "Booking Hotel untuk mendukung liburan kamu di Walanja!Dapatkan pilihan hotel berkualitas dengan harga hemat!", + "type": "text" + }, + { + "key": "image", + "type": "file", + "src": "/C:/Users/cifo/OneDrive/Pictures/bg.png" + }, + { + "key": "type", + "value": "promo", + "type": "text" + } + ] + }, + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/update/f502ae67-5ed9-4298-adfc-5fa10dac2360", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "update", + "f502ae67-5ed9-4298-adfc-5fa10dac2360" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "94" + }, + { + "key": "ETag", + "value": "W/\"5e-S8Gi/8pmw++FB+ILJw069J6ccBY\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:58:19 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"promo with corp walanja item updated successfully\",\n \"data\": null\n}" + } + ] + }, + { + "name": "DELETE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/delete/f502ae67-5ed9-4298-adfc-5fa10dac2360", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "delete", + "f502ae67-5ed9-4298-adfc-5fa10dac2360" + ] + } + }, + "response": [ + { + "name": "DELETE", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{CMS_MANAGEMENT}}/delete/f502ae67-5ed9-4298-adfc-5fa10dac2360", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{CMS_MANAGEMENT}}", + "delete", + "f502ae67-5ed9-4298-adfc-5fa10dac2360" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "76" + }, + { + "key": "ETag", + "value": "W/\"4c-yqmuncmipsBT/tiphnIkyxFdfrk\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:58:35 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"promo item deleted successfully\",\n \"data\": null\n}" + } + ] + } + ] + }, + { + "name": "BUCKET CONTROL", + "item": [ + { + "name": "CREATE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"bucketName\" : \"tests\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "response": [ + { + "name": "CREATE", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"bucketName\" : \"tests\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "72" + }, + { + "key": "ETag", + "value": "W/\"48-PFa+L5R73oWxQZllTN7lvjxDhk4\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:59:24 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Bucket created successfully\",\n \"data\": null\n}" + } + ] + }, + { + "name": "GET ALL", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "response": [ + { + "name": "GET ALL", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "253" + }, + { + "key": "ETag", + "value": "W/\"fd-T5gdFk74Hxkua8+jRC6FhgagVr4\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:59:41 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Buckets fetched successfully\",\n \"data\": [\n {\n \"name\": \"cifosuperapps\",\n \"creationDate\": \"2025-09-26T07:48:53.420Z\"\n },\n {\n \"name\": \"hrm\",\n \"creationDate\": \"2025-10-16T04:02:34.437Z\"\n },\n {\n \"name\": \"tests\",\n \"creationDate\": \"2025-11-25T07:59:24.796Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "UPDATE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"oldBucket\": \"tests\",\r\n \"newBucket\": \"test\",\r\n \"policy\": \"public\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "response": [ + { + "name": "UPDATE", + "originalRequest": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"oldBucket\": \"tests\",\r\n \"newBucket\": \"test\",\r\n \"policy\": \"public\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "126" + }, + { + "key": "ETag", + "value": "W/\"7e-Rxx8nE+fAl2j0otKBFfwNfo6AzM\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 08:00:24 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Bucket updated successfully\",\n \"data\": {\n \"oldBucket\": \"tests\",\n \"newBucket\": \"test\",\n \"policy\": \"public\"\n }\n}" + } + ] + }, + { + "name": "DELETE", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"bucketName\" : \"test\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "response": [ + { + "name": "DELETE", + "originalRequest": { + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"bucketName\" : \"test\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{BUCKET_MANAGEMENT}}", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{BUCKET_MANAGEMENT}}" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "72" + }, + { + "key": "ETag", + "value": "W/\"48-jN2bsa4SreE0obLuZnj1OY5Vv+U\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 08:00:49 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Bucket deleted successfully\",\n \"data\": null\n}" + } + ] + } + ] + } + ] + }, + { + "name": "USERS MANAGEMENT", + "item": [ + { + "name": "SETUP USER TOKEN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"userID\": \"test\",\r\n \"token\": \"tstsss\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/setup-token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "setup-token" + ] + } + }, + "response": [ + { + "name": "SETUP USER TOKEN", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"userID\": \"test\",\r\n \"token\": \"tstsss\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/setup-token", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "setup-token" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "75" + }, + { + "key": "ETag", + "value": "W/\"4b-DK0klNf4BLtmsir4nKOmVk/Uqy0\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 08:01:40 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"User token setup successfully!\",\n \"data\": null\n}" + } + ] + }, + { + "name": "GET ALL USERS", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/get-all", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "get-all" + ] + } + }, + "response": [ + { + "name": "GET ALL USERS", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/get-all", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "get-all" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "", + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "ETag", + "value": "W/\"63a1-X5cdsFhsSHfjbz9bgM0jFapeVDE\"" + }, + { + "key": "Content-Encoding", + "value": "br" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 13:32:05 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Users retrieved successfully!\",\n \"data\": [\n {\n \"UUID_UT\": \"f144c022-e239-4426-9a1d-f9c05c2592b1\",\n \"UserID_UT\": \"C005ZS80\",\n \"Token_UT\": \"egGOdUkkRee4WAbDr9_rNf:APA91bGUt7NY1wNqZYPrmCn74_ahsVCWOcwqcu-L8nt42jHmTQtvsgWuJH_RMd6tcU9I0HpMmGTgze-pQgOmwWcRZ4Gixfm98TPjV3a4AitQ1Q8zrQUFNu4\",\n \"UpdatedAt_UT\": \"2025-10-13T05:59:01.336Z\",\n \"CreatedAt_UT\": \"2025-10-13T05:59:01.336Z\"\n },\n {\n \"UUID_UT\": \"e955383d-bc35-4c04-ba70-f4aa61d63521\",\n \"UserID_UT\": \"C12WOB80\",\n \"Token_UT\": \"fssHydXfTNit3FiNDugux4:APA91bGC6p_Uo__E4XlxP-NMa859Hj1YNjRt9N0weeCHfnXgifsFLTa0nsJIgJCRWyRLb_KcNcMLogZb8DgAEFcfLQz791BsdKc0PEE0L32krKgKYJb9_ic\",\n \"UpdatedAt_UT\": \"2025-10-13T02:48:35.513Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:48:35.513Z\"\n },\n {\n \"UUID_UT\": \"d8400b7e-a3b6-4c49-aa0e-f99d08ef3e82\",\n \"UserID_UT\": \"C1BXE3HN\",\n \"Token_UT\": \"dWzRMRO2RzOx_CMVB4qsSY:APA91bGQFVWZdD_JgypGJUjxpZiYoDAdm5GdhyGL2xm4-HuIDzIojq9aHt9nXNKjruRLXJgh_ccIfE_IuGoMsqmdFfbKCtatcgzFE3kmNLJ4SiqniqCQ-L8\",\n \"UpdatedAt_UT\": \"2025-10-21T02:19:28.286Z\",\n \"CreatedAt_UT\": \"2025-10-21T02:19:28.286Z\"\n },\n {\n \"UUID_UT\": \"12d7fb9a-26be-4340-8aef-e78cb07f3acb\",\n \"UserID_UT\": \"C21P4B3B\",\n \"Token_UT\": \"fO0d_qvhQcmwIGfavINMU2:APA91bERQTpZBoLqjKFJd56oP0QAPSLFJr_bjNR216X_wVyiOhXQvHs1E8_0JhZxtZAzi6_HlQTUZXpvA-TRgNvKyt-sTUjg5lF4HJ5kIwDS_2ErINiXHjE\",\n \"UpdatedAt_UT\": \"2025-11-04T06:56:21.960Z\",\n \"CreatedAt_UT\": \"2025-11-04T13:56:21.959Z\"\n },\n {\n \"UUID_UT\": \"3122d7a2-fb32-4314-ab60-5f77712d4cff\",\n \"UserID_UT\": \"C23LWRX9\",\n \"Token_UT\": \"d6HU9pCjTSuiTVI5keWkmF:APA91bHW85AwStmAgqrRDeAc7SOEy5WczGSJ_lJGB1arCGgCKV4xjE3H29sXd5cFtjLomhn2d8uI-ndcH6Q1SpLAHYIsgwTR7Hopotv7t2VLilxC84COkes\",\n \"UpdatedAt_UT\": \"2025-10-23T03:24:27.740Z\",\n \"CreatedAt_UT\": \"2025-10-23T03:24:27.740Z\"\n },\n {\n \"UUID_UT\": \"f444bd99-c67e-4410-a629-acb32423be1a\",\n \"UserID_UT\": \"C2514YZS\",\n \"Token_UT\": \"elOMRFMqT82W1gZYAFusqi:APA91bFiKHGAjOFlWT1vQfErGp9XTf6S1CRDCzviFN3DP053FfZxdqyRkEuE0dLi0JdVz5Z8dx8R2UttPi77E8dQC_aqqre9HgjFE23KMLTiW7pSdUm0K3I\",\n \"UpdatedAt_UT\": \"2025-10-13T14:46:33.873Z\",\n \"CreatedAt_UT\": \"2025-10-13T14:46:33.873Z\"\n },\n {\n \"UUID_UT\": \"aca2726d-59bb-4833-98ab-b0272611124d\",\n \"UserID_UT\": \"C2LBSMGQ\",\n \"Token_UT\": \"eq9fwBDbSKCgKpuedTmHos:APA91bGZq2Hue7kYTC34Ab2_-gTHYVWvteqWzuf_Y1my5dYSszJjpqeJzUQxSPPzllWDf1n-kuGRctRp2X8Gc6NvhUehz5ecqkrgY9S158APsa8ohdDQ16E\",\n \"UpdatedAt_UT\": \"2025-10-17T06:48:34.526Z\",\n \"CreatedAt_UT\": \"2025-10-17T06:48:34.526Z\"\n },\n {\n \"UUID_UT\": \"1d6a8783-ce5b-40c3-bf5f-9a172c3dc928\",\n \"UserID_UT\": \"C2LZD917\",\n \"Token_UT\": \"ea8A1CjeQ8KO1grsuFSf1Y:APA91bHiiACj662PneU8j9TqEr1puM17XvaMYYvR3AnquuMZgqoRcyJhH1CsxbWO_PK59PUY_wyHAOLLVmOG1Q2R0dzbi5yqctzw1hNjEOASFeVyF-yLbz4\",\n \"UpdatedAt_UT\": \"2025-11-01T05:23:47.169Z\",\n \"CreatedAt_UT\": \"2025-11-01T12:23:47.168Z\"\n },\n {\n \"UUID_UT\": \"ea646647-53cf-49ab-8678-30d4a0b8d453\",\n \"UserID_UT\": \"C363FLPU\",\n \"Token_UT\": \"eCtFGj7TTI6LaJDF4C3F06:APA91bHt5kGCflwY4DmUsBKO86jAAN55vl2sasAJ_aGaaHhYE4-AL92-f3l7JBOdspjXaTJnspxF-8qJS_R41ukXtVIPjw76gGvYruRgDZxh84PRgzohtkc\",\n \"UpdatedAt_UT\": \"2025-10-29T11:43:50.451Z\",\n \"CreatedAt_UT\": \"2025-10-29T18:43:50.450Z\"\n },\n {\n \"UUID_UT\": \"9bc111fa-ac56-4b90-ad67-d7e9d8856656\",\n \"UserID_UT\": \"C3JUFIN4\",\n \"Token_UT\": \"cBhuwD88Tl285jeguXLJR0:APA91bFpL6kGC0UD1MI6YOn1YKt8gwgPLQggpo4gM3g_OVG5EO_omdg0kl4-fjk6wjgw6JkL3ZOTdGEnJkWYbmfvXhVqFs_KiPgcJUCngnY5yrDt2z798Oo\",\n \"UpdatedAt_UT\": \"2025-10-16T04:09:03.774Z\",\n \"CreatedAt_UT\": \"2025-10-16T04:09:03.774Z\"\n },\n {\n \"UUID_UT\": \"af188477-e0ec-47b7-b537-e3d4346b1af9\",\n \"UserID_UT\": \"C41SZXE5\",\n \"Token_UT\": \"c5I208DWRPWxQ5JUlcXnDr:APA91bERGZQS3Zx1i1pK_j81YCeq7SnX0OF0qi-qyNrRoYmxIDCIiCBPrE2nDLbk45xmXp56-MODLXfLquZOCdnzLkJtibm37tqfevA2nn-N9l7LchFZkd8\",\n \"UpdatedAt_UT\": \"2025-10-14T01:12:29.134Z\",\n \"CreatedAt_UT\": \"2025-10-14T01:12:29.134Z\"\n },\n {\n \"UUID_UT\": \"12a36773-e6ea-4885-9414-dba53f6b2fa3\",\n \"UserID_UT\": \"C4JG82O9\",\n \"Token_UT\": \"eYRhwel7SgmZgr8E3Y-H-x:APA91bH7AWnZACHKr-9KMdBlcxEwq6qAbAtLWpJQmNAugZgy52B1hi_sR-c8NY9RKHG8_B4ioHmv8IhiPK7mHYAzREc6paHNT32T4hmp65pmWrVpXF-I7BI\",\n \"UpdatedAt_UT\": \"2025-10-10T04:37:56.582Z\",\n \"CreatedAt_UT\": \"2025-10-10T04:37:56.582Z\"\n },\n {\n \"UUID_UT\": \"523add6a-72c9-4472-905f-5c3906ed596c\",\n \"UserID_UT\": \"C54RZ6WG\",\n \"Token_UT\": \"ecHaPi7RQ4yOTS2qOt6p37:APA91bH18ffmWB3I6kpa47DOSPGHS11pvmz0quwtqTweWfpPTv98bMdPm-CcLtsDIq6ZGeg6oPpnTSDlmqLaRMsVJDx5oE8bQkvOnuI7lcYvZDfAjz1FhqA\",\n \"UpdatedAt_UT\": \"2025-10-20T00:45:22.497Z\",\n \"CreatedAt_UT\": \"2025-10-20T00:45:22.497Z\"\n },\n {\n \"UUID_UT\": \"327ebe5d-ccc1-4cde-ad37-6a46ded15a65\",\n \"UserID_UT\": \"C5DGDFF8\",\n \"Token_UT\": \"dQlWGRXPQpCYzvR6TV_k8z:APA91bFNDRzMaSnyWXTjqANm3pQtDWADf1Yh4RuiGEnyT55UapuEATloyn8DMFe6lEw_DiHi9JEbZjtmksb6VckbpB0OFFSWfTrN6CgYEvHXoD40LnZkCtk\",\n \"UpdatedAt_UT\": \"2025-11-24T03:49:56.531Z\",\n \"CreatedAt_UT\": \"2025-11-24T10:49:56.530Z\"\n },\n {\n \"UUID_UT\": \"9a48570b-17cf-4b55-86a0-ba25b5b639fc\",\n \"UserID_UT\": \"C5TASL0Y\",\n \"Token_UT\": \"foXuNEMVTTygSTCQImp3Nw:APA91bGCvYgnzJAUjL2fNSvrGPeU6GsB3901e7CZl7_6-iETvw60aoeDCZvxX5tzbStrf-VR5eMO7GNGB1MFtC8JwOjvZRMbUvj3ETAiv9iQgTY6mTdYUI4\",\n \"UpdatedAt_UT\": \"2025-11-03T12:01:21.781Z\",\n \"CreatedAt_UT\": \"2025-11-03T19:01:21.780Z\"\n },\n {\n \"UUID_UT\": \"8674e424-53e0-4c20-8925-2c79c398e849\",\n \"UserID_UT\": \"C5U7YXJW\",\n \"Token_UT\": \"dyWYQAa7TE-f6ZA9EK1rgL:APA91bHy3x5MMGY0KUTy8CuR7ZPErX1_BLcIh_qLMJ440-RRJgDaO_8vCtT4uYXHdixLuTkz5FQ4Wj4P2jdCR_mtwNrbQlbD09fAez----E6B-UAJIIsIu4\",\n \"UpdatedAt_UT\": \"2025-10-16T16:34:44.366Z\",\n \"CreatedAt_UT\": \"2025-10-16T16:34:44.366Z\"\n },\n {\n \"UUID_UT\": \"0d632236-313b-4958-9e62-033003b169e1\",\n \"UserID_UT\": \"C65M3G4L\",\n \"Token_UT\": \"fqDWWUe7SU6lFBErDaUK2C:APA91bEokyt1tcVA2WaiISbD-9sdap5tCIKXFcjmsIXab9OTjCmrJhwi7HTrlYmgBVmYQgkh1aqhxVMH03kKoNM9xaLL6uKNyguNDlyocEw8x9szBoLvvOQ\",\n \"UpdatedAt_UT\": \"2025-11-10T15:11:50.648Z\",\n \"CreatedAt_UT\": \"2025-11-10T22:11:50.647Z\"\n },\n {\n \"UUID_UT\": \"635e4570-1b82-402b-9efe-a5727108a22d\",\n \"UserID_UT\": \"C6PKTY4O\",\n \"Token_UT\": \"cZ0hALQBQQivRvvrdo_tmS:APA91bFM2IiR9GBe0OTA6pvnncje83UXviEVipxB74HFh1-J87gmpQxUtuigJb9Ua0CQX4U2OyHpZ85HmdRrNltdyl1Wc0j4Z7c3zCLDEVW8Eip0ZRbr_eo\",\n \"UpdatedAt_UT\": \"2025-10-23T15:55:19.753Z\",\n \"CreatedAt_UT\": \"2025-10-23T15:55:19.753Z\"\n },\n {\n \"UUID_UT\": \"f5ae06be-19c3-4d53-b47b-a261c41cf93f\",\n \"UserID_UT\": \"C7OO1HRF\",\n \"Token_UT\": \"cDnWeUM4RIeSLrx64sjzqP:APA91bH1yX41fNG0_C2B_x4gqGzp1HX4DHJIE6-ZkmWHrw6-huk3PYUhorPVns444dvNF-eEK_CTeRcDoTveS4c4GaMY6B0Qbm6E06YgObdpw7WtDqVoHKo\",\n \"UpdatedAt_UT\": \"2025-10-29T02:07:55.078Z\",\n \"CreatedAt_UT\": \"2025-10-29T09:07:55.078Z\"\n },\n {\n \"UUID_UT\": \"2f7df618-0bac-402e-8365-f7e01a997696\",\n \"UserID_UT\": \"C8092S20\",\n \"Token_UT\": \"e1T_HD8gSieNx3_pPEKn42:APA91bEtpMNIz0vmZiriSFoXQpMH73AxA1NdZXsK_I1KHuZ6LmZJXMPi3vdR-nqBWO4oKfzV82bL0af6XDAz10UDy1w-ta2KCwgXXKlagkZnSKwJfjBLom0\",\n \"UpdatedAt_UT\": \"2025-11-25T04:05:44.088Z\",\n \"CreatedAt_UT\": \"2025-11-25T11:05:44.087Z\"\n },\n {\n \"UUID_UT\": \"6670cd6f-5eae-4807-bb63-ee62dc0ae8f0\",\n \"UserID_UT\": \"C8BARWON\",\n \"Token_UT\": \"dSsmx1t_QVuKKlkd25NOJ9:APA91bGPFpFrpJbXbKJP6GD1raH37aAoLVHdLfa2SR3VuTHZgV0fPAsI96B0XM4GWGY7ra1Fv4KpePn5rtTW4M9yTHPCP0751mM-JaIewb0PDZab6uQF82U\",\n \"UpdatedAt_UT\": \"2025-10-13T10:54:29.241Z\",\n \"CreatedAt_UT\": \"2025-10-13T10:54:29.241Z\"\n },\n {\n \"UUID_UT\": \"ba9b80ff-ccfe-4670-af19-30a08682770f\",\n \"UserID_UT\": \"C8UIXNA0\",\n \"Token_UT\": \"ecXRDWvZTvC2O7sZmwwAJ1:APA91bF6OkgQB3wR-6G0yLnIMgij1i9B8GrPHT1v67VS7ERzf69FAbkbyFSfo-Yd4ty61w7GDqYvyR6HQUepXSX2EnvG0YRPKK8w2wXdB-RubjoYVc6wLqI\",\n \"UpdatedAt_UT\": \"2025-10-13T02:50:54.842Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:50:54.842Z\"\n },\n {\n \"UUID_UT\": \"8dd62153-f5e0-4411-a9fd-8362e5a92cce\",\n \"UserID_UT\": \"C8WKM8Y6\",\n \"Token_UT\": \"eSemyJ81SmmxRbYVDwVD7F:APA91bENfuERArzrrDZAec0GyiZarF8CJcdZri5R2YiLCQXF9vLKd2SHZLwKVUW5IJu2pyMZ_Be5kd1sO9zliv_APN20Gx7snkvEfFzZiTLdRzklCDDuWIA\",\n \"UpdatedAt_UT\": \"2025-10-13T02:24:53.521Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:24:53.521Z\"\n },\n {\n \"UUID_UT\": \"b1e0d303-bb1e-4dbf-8f37-f314159f875f\",\n \"UserID_UT\": \"C9QA0KPC\",\n \"Token_UT\": \"fxczXrjMSG2pqkJ95wDnF5:APA91bFWKvirDms4mBHUJPPUAY2c_gcwRy80BiEBr5E_L00HUnezQGvImLCxM91Je9glrZvH5rIKvjnKiq4boLY99_YOwtOqFVhkGDl26Sa8FwTrJqLXlYM\",\n \"UpdatedAt_UT\": \"2025-11-20T02:25:16.225Z\",\n \"CreatedAt_UT\": \"2025-11-20T09:25:16.224Z\"\n },\n {\n \"UUID_UT\": \"f5a08e6b-5f94-485e-8cb1-bf5c116bb090\",\n \"UserID_UT\": \"CACXNZBM\",\n \"Token_UT\": \"ducBkEhWQq6v8UcoWsLuL9:APA91bE5JsdMGfa4DaNLoe-oYdKOhGjZeIE-hV0nh6TEX1ax8RmgGQ7HoG4vIjQeK35o7b4ZriP7KdbXVbsXCFCU0n6T7yBbSTLbFZaJ6tHPpvwbnJTVYSQ\",\n \"UpdatedAt_UT\": \"2025-10-29T02:40:37.511Z\",\n \"CreatedAt_UT\": \"2025-10-29T09:40:37.510Z\"\n },\n {\n \"UUID_UT\": \"fd060b2a-a1ff-4432-a75b-b642f0708e3c\",\n \"UserID_UT\": \"CAHCJ1Z0\",\n \"Token_UT\": \"fZB6W4fOQr2IpZkHFqf7Do:APA91bEWbPi7ipgPNkm3VYU3o_4XQOx-9DTTzSsRJ2RzhhHFyRQVkJ6KiJ1CvxFX_Ganq4jIz38mmXfA-V2hGGcmCtSqsv-O3YGI7rSFlq58cMAx-tfbdPE\",\n \"UpdatedAt_UT\": \"2025-11-05T03:10:30.113Z\",\n \"CreatedAt_UT\": \"2025-11-05T10:10:30.112Z\"\n },\n {\n \"UUID_UT\": \"e2b0f434-182a-444d-94f7-401f8feafc67\",\n \"UserID_UT\": \"CAR0EUDR\",\n \"Token_UT\": \"eGRV6o8gRm2jxi_y4PkqCL:APA91bEGQMBUz8-MIo66p0y2XdVZGz72_q3-XUaDeihiCAjZtt1NREhnBvNRfPvjtidiKVOI6OhhtB2jL31LzFF_Gdzt3P-sqd6Z2rkY0uExQCVUxeuTtkg\",\n \"UpdatedAt_UT\": \"2025-10-13T02:38:34.581Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:38:34.581Z\"\n },\n {\n \"UUID_UT\": \"756961ba-159c-4c93-b13d-bbc6c17120c3\",\n \"UserID_UT\": \"CBFABODX\",\n \"Token_UT\": \"eusTXZq5SCuM2LPq9hkoQZ:APA91bFbQqzizvSsBpH5-hnUC4nvdJxWsuHqh7Y5AmVR5RLKiV13fu5ceAxOWPuYqUUeWf1yMVsKFPR3xiDbx71cTBLJa4csdyrD1YERqBSs_Z7foepnjZE\",\n \"UpdatedAt_UT\": \"2025-10-27T02:07:24.934Z\",\n \"CreatedAt_UT\": \"2025-10-27T02:07:24.934Z\"\n },\n {\n \"UUID_UT\": \"2bc6aa55-003c-4037-b585-6ee5d4257c87\",\n \"UserID_UT\": \"CC9B5JYB\",\n \"Token_UT\": \"exe32pXuR_GrjEXeHIOH7U:APA91bEOb6sLT23muWOJk4Oz2ZPzchBwfWCjAbtlvwetwE638TC2hCUHCN0AclRst7JuRnhMu5prGrv5YCI0OVm_1w7pmPrDBlNYZYm9eErqNgeXEsYrmbM\",\n \"UpdatedAt_UT\": \"2025-11-20T09:54:34.055Z\",\n \"CreatedAt_UT\": \"2025-11-20T16:54:34.054Z\"\n },\n {\n \"UUID_UT\": \"41acaa68-10ec-43ad-85fb-eb9179ffc31c\",\n \"UserID_UT\": \"CCIROZYJ\",\n \"Token_UT\": \"eRWtt7HoRvGLa52W-XGs1-:APA91bG_f7c3dCDRCBipahi9osHEeyA-CqO5yUsfsOJYMI6kIOKW2BRk6N5-2M9kh95aSuGfplBvvQ_svtzCFTo0G63DgujDtn6zKGQKRJQrkQiZSE-wyHs\",\n \"UpdatedAt_UT\": \"2025-11-14T05:39:00.984Z\",\n \"CreatedAt_UT\": \"2025-11-14T12:39:00.983Z\"\n },\n {\n \"UUID_UT\": \"bfa4825a-6b9b-4ca8-a617-9fdc8cf46818\",\n \"UserID_UT\": \"CCL00PQY\",\n \"Token_UT\": \"esV18cCNSXaekrF7YsZBTi:APA91bGo4Ycj7ctGj-IWaWYXh5WYgT7SObnI2y2PDHsmErRCDyT5cKbJHjk7_iqUO79LEbrAJ16fKASPrYh64mqVrztdRogXH_vl0RKNhbK8ZfLlb2W-COQ\",\n \"UpdatedAt_UT\": \"2025-11-25T10:23:16.506Z\",\n \"CreatedAt_UT\": \"2025-11-25T17:23:16.505Z\"\n },\n {\n \"UUID_UT\": \"fc97e74c-a84b-4015-8d70-d6a8ceb2747e\",\n \"UserID_UT\": \"CCOLWWLJ\",\n \"Token_UT\": \"fNwMx-kES9OxetqaS4m0lH:APA91bEHmKqWmfM2QTOdqvUDL2d-X0WpwfMJFwvolERSV8MsHIWc_03NJerAsDQHXalilnyJA-8BuLYgq0Vb8IQUaIUvCx2hk-gVcNxKpMN3vDJefQ15Pi4\",\n \"UpdatedAt_UT\": \"2025-10-29T14:04:32.127Z\",\n \"CreatedAt_UT\": \"2025-10-29T21:04:32.127Z\"\n },\n {\n \"UUID_UT\": \"21b15d64-79e9-4ebf-a182-816c35baceeb\",\n \"UserID_UT\": \"CCWPXQPY\",\n \"Token_UT\": \"eBhh23pPQFm3k6Mgogen7i:APA91bEjI8bnA4NSdg5AryixfATNWJXokt017KkLHlW9innvrYzOpq413VHYHSW1NNPfFSkCG8xrwZqNlnaS14N8rkRHxXbUMAkH6E1k_wLA6lp-GW0OBck\",\n \"UpdatedAt_UT\": \"2025-11-25T04:36:09.977Z\",\n \"CreatedAt_UT\": \"2025-11-25T11:36:09.976Z\"\n },\n {\n \"UUID_UT\": \"93b716ae-4890-4cf7-b64c-50dddd8d9024\",\n \"UserID_UT\": \"CDPWBF29\",\n \"Token_UT\": \"eSaX7yhiQriCDx84QPTlSw:APA91bFzvSEnRKpjX5nvAjLK8oIPH32-d05A002H5shW3xyvG3PTdnAxmeGQ1kiWpnKYvN2mxNy5-eRHQ70Cgx1zcz5Y2evTG25fFyjvjGztDeqZ7qhv3eU\",\n \"UpdatedAt_UT\": \"2025-11-20T10:52:53.372Z\",\n \"CreatedAt_UT\": \"2025-11-20T17:52:53.371Z\"\n },\n {\n \"UUID_UT\": \"72135911-2197-4bfc-a6e5-b3e880f09671\",\n \"UserID_UT\": \"CDU1505U\",\n \"Token_UT\": \"c2Fihw1BSCiBMny_UAHc6t:APA91bG0U_gNkoqTu6tBRj0tcnQwd2g54yYvtAltLv2yztqYXCT3VGFQAMjQF5cUTwPeyl8j74k8EJm7zxW6uO9U62UXFdPwW9_YUEVRUoxZXXldgO7WeHY\",\n \"UpdatedAt_UT\": \"2025-11-13T06:42:55.500Z\",\n \"CreatedAt_UT\": \"2025-11-13T13:42:55.499Z\"\n },\n {\n \"UUID_UT\": \"6533badd-3547-4684-9543-27ef39878712\",\n \"UserID_UT\": \"CE70R3NC\",\n \"Token_UT\": \"foibFLMkReS7vYJJfc7Wpp:APA91bHxdrP-G39bvXvWtVnZfNEzCFJNl6xU9Ngl9He-wltf-PC4JRh8r1m-R9t0Suz9PV4I2GwM6Bg9rBuNyO3Oj5rlA1OgwP3DVyDpYhknFakFHWOyiuo\",\n \"UpdatedAt_UT\": \"2025-10-19T10:21:06.656Z\",\n \"CreatedAt_UT\": \"2025-10-19T10:21:06.656Z\"\n },\n {\n \"UUID_UT\": \"4bc57933-0674-4b05-922c-f7864da63231\",\n \"UserID_UT\": \"CERY3QA7\",\n \"Token_UT\": \"csBDZVBvRniCn_1bis91Bg:APA91bH-dRDHnRxjgcTnuGuzBUEe6Qas7DypgNY-q7_x1GBGtxPfb9HzpIyXcWKM8ypVFPtbczKF39PaCqVelw_bb5ZViNDAxpEmrVpbTFM-OrXHXwKUnek\",\n \"UpdatedAt_UT\": \"2025-11-18T01:44:34.315Z\",\n \"CreatedAt_UT\": \"2025-11-18T08:44:34.313Z\"\n },\n {\n \"UUID_UT\": \"9244a1eb-386d-4199-bdf0-40184fb8267d\",\n \"UserID_UT\": \"CESMLXEH\",\n \"Token_UT\": \"cD8PNuOSTVuLlFZvPuFyuD:APA91bFEQre7i3bMxflrVCwdBG8jzpWXDtqkqJ78awx-0JsEYwRpP8C7YwUQzdtS7hGhsB4K0wfJ_mnOeLCa_HOoXpAa-g6ykIAVtQqVkTL6k2uqAoE6Njw\",\n \"UpdatedAt_UT\": \"2025-10-25T18:49:04.898Z\",\n \"CreatedAt_UT\": \"2025-10-25T18:49:04.898Z\"\n },\n {\n \"UUID_UT\": \"8cc2c237-f74b-429f-8468-472c48a512c9\",\n \"UserID_UT\": \"CF9S71UJ\",\n \"Token_UT\": \"fMAErDxmTKqYQuX8KB8xDp:APA91bF5CO-tiVZMkOxp6HxqJJsSFg1Fpfvjzl6a2cDhwz2YGDI1ZosWcZYglO2wcEBo4xf4XvVAAfynI5DZlJLxM3nhhmm0MSO5ENtcOrZtz56M2IwD48w\",\n \"UpdatedAt_UT\": \"2025-10-29T02:34:09.690Z\",\n \"CreatedAt_UT\": \"2025-10-29T09:34:09.689Z\"\n },\n {\n \"UUID_UT\": \"25df039e-d495-4d93-b21b-390553575732\",\n \"UserID_UT\": \"CG941LO7\",\n \"Token_UT\": \"cBiPXTckTwCMDlqxKEgCBJ:APA91bGMG7mxRewZsSmZVJkQxtOpO4mKaLJXlRUkdH81ZzW4qr5GqlfU7iQXgwcjcTg0ggH_Lme3py06SKir24Z7YrYc9k9cuKftJngM28qC5ypk87fwmXI\",\n \"UpdatedAt_UT\": \"2025-10-31T07:28:17.055Z\",\n \"CreatedAt_UT\": \"2025-10-31T14:28:17.054Z\"\n },\n {\n \"UUID_UT\": \"e6e4d095-6e77-4466-9bff-4cf05cea5a39\",\n \"UserID_UT\": \"CGGKNXGE\",\n \"Token_UT\": \"ckTGqGVpRXuqf_edI5zXEp:APA91bH5mSj8uvZgiMxQZNREYAPWC109Y_0Gtz4IBKCIenSMhiQLle9xlSq7i_bOb2ojnasSHBZf-bQjac1mAgvedb8UHM83gQcUiReE0tFNDioGBuVga-0\",\n \"UpdatedAt_UT\": \"2025-10-13T02:38:35.254Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:38:35.254Z\"\n },\n {\n \"UUID_UT\": \"48f017be-a2f5-4f5e-a39b-a19f4e6236b3\",\n \"UserID_UT\": \"CH471YGE\",\n \"Token_UT\": \"fLAT_QszRuiiNwsv-h_9mk:APA91bEmvLMl8rgwCL1vN5oP2uEebv3YY8bZaTz7j9Tj8d_1qP-v7yjDuHDoLsO7HbsAiMVTrITgFLEu0WynElChcfpRwI8bpyiK7ugXjvCbSeUT92SVHNs\",\n \"UpdatedAt_UT\": \"2025-10-31T09:25:09.180Z\",\n \"CreatedAt_UT\": \"2025-10-31T16:25:09.179Z\"\n },\n {\n \"UUID_UT\": \"7c1e9b3c-6b52-4db5-bf41-05e5b8f01525\",\n \"UserID_UT\": \"CH9QX5WB\",\n \"Token_UT\": \"dv92nJ8HQ1Gt10lvzi1xOG:APA91bE_zTJ8K_ZzcpgcQBXx1pQgPTAMgKswYOQr0yHzv3jJAIowmMvrWTyMZWVOfUHjmZB--x9kXlfSX1awazNx6l6mWplogWTWJUdj0HgWnZfNU4GkEFY\",\n \"UpdatedAt_UT\": \"2025-11-25T10:43:14.502Z\",\n \"CreatedAt_UT\": \"2025-11-25T17:43:14.501Z\"\n },\n {\n \"UUID_UT\": \"bcc29eef-001b-444b-9556-f84335f08b5a\",\n \"UserID_UT\": \"CHAH6MOH\",\n \"Token_UT\": \"cbnN8XyNSEOtQ76O5IVjpO:APA91bEy3qIDJg-5O9jJdNEja3N2-dXRjlt5NcNv0nnIbhIivTuvOdDb9NQAKNEsVP9-_fHaaqtBpfvfdrHNS7BDsKM5fC6eAqVFA4KDB31cSF6H-8vNqow\",\n \"UpdatedAt_UT\": \"2025-10-29T08:24:36.285Z\",\n \"CreatedAt_UT\": \"2025-10-29T15:24:36.284Z\"\n },\n {\n \"UUID_UT\": \"f1eed196-6eb3-4ef9-947c-9a2a88f7572a\",\n \"UserID_UT\": \"CHCP4IBM\",\n \"Token_UT\": \"d1R_LgEHSValq7laKKrInc:APA91bF6TE7tKVEdEsa7tDAyry83Aa8ZsN84XwUEAfX1h6g4LhrSxnimoSE2VfFa9zRcDAxyF6uweICRzJlHH0-jfgtYXtH3wiobUocOS3JPfOjqf32gZNQ\",\n \"UpdatedAt_UT\": \"2025-10-29T08:20:29.337Z\",\n \"CreatedAt_UT\": \"2025-10-29T15:20:29.336Z\"\n },\n {\n \"UUID_UT\": \"7d966e5d-e287-43b5-9e11-f0859047636f\",\n \"UserID_UT\": \"CI4YJXLL\",\n \"Token_UT\": \"fY20bQ91RoSShjAAKjbOMS:APA91bGdEi-zmAULrzajBVxVZQMM__g2h3XcJYmPxuxG5thNQLYqxKHN6lBIvYF117eFDnhHCTELNlR70HgpdKBYWdLJBqstKr-Q58WlLFqGjFqLnCyqyqk\",\n \"UpdatedAt_UT\": \"2025-10-13T04:04:01.122Z\",\n \"CreatedAt_UT\": \"2025-10-13T04:04:01.122Z\"\n },\n {\n \"UUID_UT\": \"f39cdbf3-0d00-4cd8-9f2c-e12eee4a5ac9\",\n \"UserID_UT\": \"CIKAM4AN\",\n \"Token_UT\": \"dRE9bLyUQm2PLMWrtY5DNJ:APA91bFdxz8v_CnWSO4y4CvIU29h1j9clfLsHNqXVWjxobgJQrKeTu69jaeqvoIttkniZdNGL7YRvF7xrm-9iruCWytFLu3rNmAxNP5NEqG3IgfyjjUzeDc\",\n \"UpdatedAt_UT\": \"2025-11-09T14:10:49.047Z\",\n \"CreatedAt_UT\": \"2025-11-09T21:10:49.046Z\"\n },\n {\n \"UUID_UT\": \"a4170778-44bd-4750-bc52-bf9ce1538e24\",\n \"UserID_UT\": \"CIQP6WYN\",\n \"Token_UT\": \"fbbB_fBITzqtn9YhZ9ZQ_K:APA91bGSzzvSyaP2J518RYjb0mdWwBPlhQz1Y2fSsT_MoNhBsvAKXni_q3D7ujDHgN8OMTHeSvv-IxvmDn-yZJQWzubnmVX7uPTjs5zZygGqUmLaxiM1L5o\",\n \"UpdatedAt_UT\": \"2025-10-29T09:11:45.738Z\",\n \"CreatedAt_UT\": \"2025-10-29T16:11:45.738Z\"\n },\n {\n \"UUID_UT\": \"88f8a728-5cca-4014-b862-77bd3c35c5e2\",\n \"UserID_UT\": \"CIQS4NYA\",\n \"Token_UT\": \"cp2eiy5jRsKgHKSLltzO-h:APA91bGf40bPsyrOX--7GCA_-VWTnZvx7VzjndGJdlN3HrrNdZ3YXD6M5zAybH9-7iDiCwo2WpAZe3O7ht6487bkcDQBlLSeE1prZRJciHP3HAUJeEKlpPA\",\n \"UpdatedAt_UT\": \"2025-10-13T02:44:28.688Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:44:28.688Z\"\n },\n {\n \"UUID_UT\": \"65311833-2451-4ed5-b87c-eed157d1ab1c\",\n \"UserID_UT\": \"CJDWOCWX\",\n \"Token_UT\": \"eU_uXvXbSJKlWTgLYZhyll:APA91bG3Q6Ndq_qh7EB1NBsjCz2y0kAtmZD6LEWzzNf_2Sm3I4eMkLctaHeU8npaDY4VSRLFn4bEynl4PF-IMXb_qU-iCjqfyYAAjXgsFF2HUOWj5snssR0\",\n \"UpdatedAt_UT\": \"2025-10-21T02:32:23.669Z\",\n \"CreatedAt_UT\": \"2025-10-21T02:32:23.669Z\"\n },\n {\n \"UUID_UT\": \"f5179ea8-d4d6-4cd9-93c8-fe10bea3bac3\",\n \"UserID_UT\": \"CJOPC47H\",\n \"Token_UT\": \"cRB3zmMiRDONvVwzTYyRil:APA91bFfLJvova2g73RqnZFs3c_GZ-Wy5mjfglFWJkIGt9rLQ3JY3GVXND9QPANLKCi0qVS4eiM988H8d5S-1TCLvB6MOfiH3G7GVnSZHBqbyv378T-F8yw\",\n \"UpdatedAt_UT\": \"2025-10-13T03:49:43.756Z\",\n \"CreatedAt_UT\": \"2025-10-13T03:49:43.756Z\"\n },\n {\n \"UUID_UT\": \"017b1671-9e1e-4af9-92cf-ea19d819b552\",\n \"UserID_UT\": \"CKKJ2Y8R\",\n \"Token_UT\": \"ds7RW8tFTnqBrYJtA22CY4:APA91bHwH-giAJ3dD3xNwn9q7Hs6V8u0ZNyxMwgLk3rsY8hFnrud6aHvTNueIGcBYLHLfXawQHwvE_FuDxbsLchYGd1ObREFy7le-Vsxx74OEw0wmuJ-54Y\",\n \"UpdatedAt_UT\": \"2025-11-14T11:56:46.426Z\",\n \"CreatedAt_UT\": \"2025-11-14T18:56:46.425Z\"\n },\n {\n \"UUID_UT\": \"ad1054be-fd77-47e5-a245-9465a5fe0b36\",\n \"UserID_UT\": \"CKMXKWZS\",\n \"Token_UT\": \"doTaCojqTIqVSeUfMEBBTk:APA91bGKfcTpD0hCzM2xR6KNQpz2FKaHt33UiCoFUYM4ggSfUUTtCZIOCyBx-J5Ksb5dDJO2OOb8UMtLC2gdsqrSwVgWHU_ZZ_Dvxm59FHiWYL0ulfc1-Ac\",\n \"UpdatedAt_UT\": \"2025-10-23T11:19:51.643Z\",\n \"CreatedAt_UT\": \"2025-10-23T11:19:51.643Z\"\n },\n {\n \"UUID_UT\": \"a7b31942-9c48-4a59-ab91-fb629a18771e\",\n \"UserID_UT\": \"CKQ9JKGW\",\n \"Token_UT\": \"eMmDNdneQGObj33DQhhTGt:APA91bFmEiW4El-xCAEkXj9UshUKC5q3hzeSk-T0_XQs0AMIqsIHftGhpHscUj2V3dGWAPsYP7_IZ5o8xzXQn-KhEr0cmugiS0pT6bQnHAYtQHAtvCKq1yI\",\n \"UpdatedAt_UT\": \"2025-11-23T14:11:51.712Z\",\n \"CreatedAt_UT\": \"2025-11-23T21:11:51.711Z\"\n },\n {\n \"UUID_UT\": \"8b6a23a4-4188-4f35-a0fa-c27896390ee7\",\n \"UserID_UT\": \"CL3FHOS1\",\n \"Token_UT\": \"exNoI5DdTQ-ig95vbpUiXI:APA91bEJRj9gxzqLyKDcM4LPTHHTg_q5IRt4Pf-9lV3P03UsHZbokL_qUrfhfN4xVkPQk8NcAcK208ZnjRgjtdWTGM483hPTmT5k4zAT8ajaF2h6pW3IVwE\",\n \"UpdatedAt_UT\": \"2025-11-07T22:27:46.483Z\",\n \"CreatedAt_UT\": \"2025-11-08T05:27:46.482Z\"\n },\n {\n \"UUID_UT\": \"9737bf06-a771-4c0a-b7a8-c1099c9da796\",\n \"UserID_UT\": \"CLWJL3EG\",\n \"Token_UT\": \"dfEhlVmuSEm9AABDGd3bF2:APA91bFzO793nRsvu9yBWFyh7r86MZzcMuNOnQiyfgzA-MkdwstlfVXJbxxrV9Sy00KfvIDgajKJhxswcgn7BrjUkaj5NvZh5fktd-6ZlxxR38KSMfk1qpI\",\n \"UpdatedAt_UT\": \"2025-11-19T11:53:24.769Z\",\n \"CreatedAt_UT\": \"2025-11-19T18:53:24.768Z\"\n },\n {\n \"UUID_UT\": \"fc228969-d53b-42c6-84a3-289a2003df9d\",\n \"UserID_UT\": \"CMGVL0CG\",\n \"Token_UT\": \"eXvVNeDNSlex2Jk_KPXcdu:APA91bESL-hrlhwFT-ZhEg_KdoAysCZ3Fp1kQHLAtJIpVFvJztbX0KuPT-JtIi_WVK7J3aKNeUyglIylRq4Ug49Rq0h_aBbFe5QkdbJcQqWhVfRdnj2j2g8\",\n \"UpdatedAt_UT\": \"2025-11-24T07:01:06.671Z\",\n \"CreatedAt_UT\": \"2025-11-24T14:01:06.669Z\"\n },\n {\n \"UUID_UT\": \"cf887280-3895-45a6-b736-af5a4aad0bb9\",\n \"UserID_UT\": \"CMO6DAPX\",\n \"Token_UT\": \"dlqJGBHZT8-g6GPlgMZKTv:APA91bGF4UUShwexmW87uD9zT5bpMm10srfcWqS22Vw7YHywOVbak5hTwPVBvPhXQ5MxL94tGYkFyRqzLZQqkza2MbcTM4FoHY-O-kzT5skUVlQtbeI-ZuY\",\n \"UpdatedAt_UT\": \"2025-10-13T02:45:42.746Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:45:42.746Z\"\n },\n {\n \"UUID_UT\": \"a05c301b-6a19-4814-bad3-2b8e79ebc2c8\",\n \"UserID_UT\": \"CMWYMD7W\",\n \"Token_UT\": \"dYd3ddyNQ72_Lo8BWoh27o:APA91bFOujf9saOFO4b26thXAysCYTv6qj-GROkpPzT3v42axxIvCbRkmWRiTXG3Q6EqaSZ5t7ySVlQ3xOqRRGNY59nqDvZcBqRLswTqoIjY5lw_wHtUlYY\",\n \"UpdatedAt_UT\": \"2025-10-11T02:28:17.319Z\",\n \"CreatedAt_UT\": \"2025-10-11T02:28:17.319Z\"\n },\n {\n \"UUID_UT\": \"b6608881-5491-4b00-9ea2-52913444c8f4\",\n \"UserID_UT\": \"COL2IDZB\",\n \"Token_UT\": \"cqn0EnmMQ1C0GbWjwPAYmr:APA91bHujRZreZno5dSMz0BRl3QkuNpvmpcw1_xBf1KX0AGxNgYFE7ZE5l_7mI6WB3XDatzyce8OX5H9PcvNE7Z8g_DEj9GZyww1zlDTem5FCdEEJb6NbKE\",\n \"UpdatedAt_UT\": \"2025-11-03T21:49:27.202Z\",\n \"CreatedAt_UT\": \"2025-11-04T04:49:27.201Z\"\n },\n {\n \"UUID_UT\": \"8d434816-e3ad-487d-8251-c608cee0207d\",\n \"UserID_UT\": \"CP0RKFD0\",\n \"Token_UT\": \"fzaI9G8ITtuDcXkq4kkWFQ:APA91bGU3ptAMxNJB8IYMeobSUoopKCUpgVM7dxrBYDyPBdLxI4kSjGcI2YLFbWs9C4zpriaAlwSFMZ9bRX9cp7UDD46oSqHCwEjNy4ReHWmRyHvrJHqqhU\",\n \"UpdatedAt_UT\": \"2025-10-23T10:13:13.558Z\",\n \"CreatedAt_UT\": \"2025-10-23T10:13:13.558Z\"\n },\n {\n \"UUID_UT\": \"1d2f6eec-4a9a-4413-900e-79f3f9b54084\",\n \"UserID_UT\": \"CP3TLFN6\",\n \"Token_UT\": \"ciV1DKyeRVGvtVUhStvPYR:APA91bF_-9x91A3fN4DxljSLREZp9ZYVUZMmRLizvsJGIDjCgbRq1paZzfWM55bA23xgCAhnJrmKG_U9_oub1bsYTu0O6WDUytoLMPSNCHSoGnLdsCFbVC4\",\n \"UpdatedAt_UT\": \"2025-11-16T16:22:44.804Z\",\n \"CreatedAt_UT\": \"2025-11-16T23:22:44.803Z\"\n },\n {\n \"UUID_UT\": \"573d7831-cda7-4a43-b175-b7f777141775\",\n \"UserID_UT\": \"CP7QTX2Z\",\n \"Token_UT\": \"c0Z_h5C_TdOW_nQ82mIiCB:APA91bG0UkqhU_RNiIUUKHcIgdZ-FvusJ35P6t-5-eLE_dJwfvwhn9AOyVx9qY9bAhPe2MvHIerOxjOwpSfx7fenrgQeGVjcjOfWDR9NI5VriOibIn09Y4c\",\n \"UpdatedAt_UT\": \"2025-11-12T03:49:18.760Z\",\n \"CreatedAt_UT\": \"2025-11-12T10:49:18.758Z\"\n },\n {\n \"UUID_UT\": \"4c01f1b2-76df-4143-a5fd-6f4026c394bb\",\n \"UserID_UT\": \"CPU27YF1\",\n \"Token_UT\": \"dpUc8hurSYCb63v_mqxy68:APA91bEju4SEi9ntSiLVu7NWiqtA_eBzEwXuJeD03HBuEwy8uEoamYuW5Rq-BHnE8tF0M_CgqBImwESScc75JZiu24s16OWx-PiLiBd-HXagHD97dxckxQ4\",\n \"UpdatedAt_UT\": \"2025-10-13T04:22:21.305Z\",\n \"CreatedAt_UT\": \"2025-10-13T04:22:21.305Z\"\n },\n {\n \"UUID_UT\": \"00c19785-b63d-432d-8b59-9de5af2a88a9\",\n \"UserID_UT\": \"CQ0FL21M\",\n \"Token_UT\": \"c2jA26J6QVSMtAecyak7Dt:APA91bHtlctkYtKghB2acAVevq_NcWMeDIVy4cIzOi6d4Oxf9O8qe-QneK2z8XaBzjfLvvUBeyfYMpJGDpmsNa-sgPoGuW1SJzr2_qbR6quyi2qe5jkLvWs\",\n \"UpdatedAt_UT\": \"2025-11-07T11:41:33.856Z\",\n \"CreatedAt_UT\": \"2025-11-07T18:41:33.855Z\"\n },\n {\n \"UUID_UT\": \"3cdd9d82-50e3-446a-9cea-f9c59c7322e1\",\n \"UserID_UT\": \"CQLGUEJ3\",\n \"Token_UT\": \"c_XDlr4YQduSHjjn2Lfb4F:APA91bHgg2RctvVEnKTGKQkAD5EJM7TygH_HyPCrTVSqOzJSAhKaUvQMACZ4Y_BkmeKJAB6BDKgUsLMXJXgTykEjNZ2a8qHEiYucBocpgMaUW6ovazz9fJc\",\n \"UpdatedAt_UT\": \"2025-10-21T12:06:16.646Z\",\n \"CreatedAt_UT\": \"2025-10-21T12:06:16.646Z\"\n },\n {\n \"UUID_UT\": \"47a8ccfc-904c-435e-a149-e1ff46aa725f\",\n \"UserID_UT\": \"CQSEYBTI\",\n \"Token_UT\": \"ctQGfgoRQ7O4cUE6wFyLv1:APA91bHnQT-_toVnIP0Gv_w07gBoiTLhl6Mvjfaih25Ziz_YBVAECSpQXEwrZ_rPtnQxCxWRo2faSv4Sa6JpctlOg4jufNwWT6flYavQcnMQuz7mY7BRgso\",\n \"UpdatedAt_UT\": \"2025-10-13T02:37:19.401Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:37:19.401Z\"\n },\n {\n \"UUID_UT\": \"59cbed33-92c5-425a-9673-a0738cace9af\",\n \"UserID_UT\": \"CQSFJSBS\",\n \"Token_UT\": \"e_IlGEm6SJO-GW05e__TWU:APA91bF7p1I__hs1V0YpkyU4yGNEiUzY-B3prqsndwxn4KBO-2qSGhq6wOOQDA06O_Zk4XJCSOENRQUTYS_hPQn_i5Kzoer-JvZrfiC0hTxTZNWWWiRDNMI\",\n \"UpdatedAt_UT\": \"2025-10-13T02:43:18.468Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:43:18.468Z\"\n },\n {\n \"UUID_UT\": \"cb6061ae-4d9f-4113-92b6-ab4c87e39c9a\",\n \"UserID_UT\": \"CRWOTJWE\",\n \"Token_UT\": \"fMFJzj1YROyJvg0aCIz3om:APA91bGPAyC99MNZATMymuDIOX6Cq7dvjyi_ChjWwekIN7NU5wtv78nSeBgPOgbdoUMx6l--vBrrIJeD4bVX2_fhnP_S5YlLnIiJKkz-o1dg34GHpgZYTFA\",\n \"UpdatedAt_UT\": \"2025-11-25T04:34:06.592Z\",\n \"CreatedAt_UT\": \"2025-11-25T11:34:06.591Z\"\n },\n {\n \"UUID_UT\": \"ba752eed-df87-4928-ba55-ca73ecb14ba3\",\n \"UserID_UT\": \"CS1I0EUV\",\n \"Token_UT\": \"emJlOix5SfWz760A6ebUM_:APA91bFYvMyqgrPuX4if2Bwu8S4CRF-vcJqdQybbhSTwwpnIk8Sx_Av4CKzquww6j4xL5WX1_WCkGUJy8fk24tMZ5lHxTRT6HrTFvRkwKwTaxFqf8ZQcSDU\",\n \"UpdatedAt_UT\": \"2025-10-18T08:08:02.970Z\",\n \"CreatedAt_UT\": \"2025-10-18T08:08:02.970Z\"\n },\n {\n \"UUID_UT\": \"0086f63b-1100-4527-b61c-698819a7eeb3\",\n \"UserID_UT\": \"CUEVD1HP\",\n \"Token_UT\": \"ftb5rM46S62FIzHPLrrkt9:APA91bFgywFLuwjXMoRBmR_Pq4hPTYJWeRF4bHZCNWPtwwXhJrfJ1AC-5uIKWKg0twVBPp5rkCXO6K82PKz4W3A1LqCOhZB2qYwjUzkyDzueYiHk-ZAYctU\",\n \"UpdatedAt_UT\": \"2025-10-14T02:23:31.201Z\",\n \"CreatedAt_UT\": \"2025-10-14T02:23:31.201Z\"\n },\n {\n \"UUID_UT\": \"6f8f4ac6-ed9e-47e9-934a-8f656d3c51a5\",\n \"UserID_UT\": \"CUNNX33G\",\n \"Token_UT\": \"eMNWATT_RfGAsQ2JsVtFSr:APA91bFq8MgK3qwUycxPWblEO14bYjq_2V_xJidzqvo9pVpRaR1-__BnCHDFw4xjh5pXg8_-8rWv25vfHEWyU-0X_YjL_Hh5fW3HzZDmUzvwfA9Jlwg5YUw\",\n \"UpdatedAt_UT\": \"2025-10-13T02:56:49.260Z\",\n \"CreatedAt_UT\": \"2025-10-13T02:56:49.260Z\"\n },\n {\n \"UUID_UT\": \"d43cbc21-0af7-4255-a608-f96f9655e01b\",\n \"UserID_UT\": \"CUUYXEAX\",\n \"Token_UT\": \"dthFIvWSQ4-JUHLjQmVJMb:APA91bHudXtiwIZBAQDSwNWgkWWouZOIVRZNNxbuXlcrxEwihIu2FOIkKkvbzSYPS0AgfsXJbyS3HrMcXTNvtiH4FEmWxdq8WzxJJ6Lspk5zB5Z75cv_pKs\",\n \"UpdatedAt_UT\": \"2025-10-24T02:02:07.480Z\",\n \"CreatedAt_UT\": \"2025-10-24T02:02:07.480Z\"\n },\n {\n \"UUID_UT\": \"d808a88a-d5c4-41d0-8ab0-0d0b614e3c3d\",\n \"UserID_UT\": \"CVS5MZ20\",\n \"Token_UT\": \"elOMRFMqT82W1gZYAFusqi:APA91bFcHTbmfGc_yLms42d0h70NHwsSuHAMn9JJDep0oAloqstSBPoktdqFEl6qFQ-MNfrCX51g7_nAtqEgq1p0Ytls6NdbuA8z0-NXxYslJYs2EG9AvhI\",\n \"UpdatedAt_UT\": \"2025-10-11T13:57:24.089Z\",\n \"CreatedAt_UT\": \"2025-10-11T13:57:24.089Z\"\n },\n {\n \"UUID_UT\": \"9fcf4897-e2d5-4422-b179-2f799fe6eb7b\",\n \"UserID_UT\": \"CVT2L6LG\",\n \"Token_UT\": \"dwWod1TiQYCkWPmEk3Z5zr:APA91bHOKy3pmwLT-2JXgMN9sMfdwN2kS8BdvJl5eK1nLzxASo0-WuV89H9LwFxRbcWnkmYj4L0X1nrrExAQO1jVCHlE6hR9uU2QVAmbVha5ar-a4K6Pe94\",\n \"UpdatedAt_UT\": \"2025-11-09T07:21:44.042Z\",\n \"CreatedAt_UT\": \"2025-11-09T14:21:44.041Z\"\n },\n {\n \"UUID_UT\": \"8002725a-09bd-40e7-a0c1-3c85b750bc5e\",\n \"UserID_UT\": \"CWDR8090\",\n \"Token_UT\": \"dZiVvwruTl-aUeVazBATTD:APA91bGg4eAfy44WvNsyX8vJJeykg3oRsC6BB4CYdemiXqz2tb6pT5wWRlpgTpXJ-Zd7_9OjNeWeEDXN4t4vdilK73Mp4wGzG4LvV-pM7zaH665ypyL2qqM\",\n \"UpdatedAt_UT\": \"2025-11-03T01:43:06.043Z\",\n \"CreatedAt_UT\": \"2025-11-03T08:43:06.042Z\"\n },\n {\n \"UUID_UT\": \"d39b633e-c167-4742-b5f2-65690ac67680\",\n \"UserID_UT\": \"CWZB2IPB\",\n \"Token_UT\": \"c9YiTlcJTVaiMlkP3KzJY2:APA91bFQku8i1WmZa1KH7dUv_CxFX0vTYEKZJ03DWpYeGgGJqtZfgigNukW_7m2XawJgfneP2nKGsh94YS4JqZ74lCux_9JOuCs9F-ulCqjkDrhy-BUnWrk\",\n \"UpdatedAt_UT\": \"2025-10-14T02:24:46.730Z\",\n \"CreatedAt_UT\": \"2025-10-14T02:24:46.730Z\"\n },\n {\n \"UUID_UT\": \"79cfed57-ae38-496a-901f-3fadd3759196\",\n \"UserID_UT\": \"CX9O0X34\",\n \"Token_UT\": \"cu5NM8BAR2-j4-t-PXEeB1:APA91bFXUQl2DXXj6YkfUjgnSniM2NnFbiuwmpC5DLQ_E5GQUp45UZm_zmHWo-lWK4mvwBFwx666QAnJO-aXmguk6Mt1AA0ZTAqyiybI8KdY_Nx6Ge6NTUo\",\n \"UpdatedAt_UT\": \"2025-11-25T03:43:40.175Z\",\n \"CreatedAt_UT\": \"2025-11-25T10:43:40.174Z\"\n },\n {\n \"UUID_UT\": \"08986e66-5f96-40be-bac7-4a5f11ec64da\",\n \"UserID_UT\": \"CYE7RHZG\",\n \"Token_UT\": \"dTgf1dwTQiSQv1ORrycNCc:APA91bHmaEIDQZPMe7D6OwQHh6KYTdLT5h8iWfDLz4OYuggOAsi8U694smlGACfgAMavU65ZL6oc4x2hc6nv8b-C3lYcVhkNL_hpMqcf2iuSenysywk-wPg\",\n \"UpdatedAt_UT\": \"2025-10-25T02:29:10.943Z\",\n \"CreatedAt_UT\": \"2025-10-25T02:29:10.943Z\"\n },\n {\n \"UUID_UT\": \"d8d17733-2677-4a66-b5d3-f2755aa9774e\",\n \"UserID_UT\": \"CYRGANQV\",\n \"Token_UT\": \"cMqgQCZWR06E8a9OvF29Xn:APA91bEpvcD45LYpGEtgbq1J9V3YaIPBCtie3kO_l2L3bwZGzoFwPRAYWLGwSHEn-sgUsW882z07tLtW4TGw_1i5xURDc1Z3sFjXMHFJcemNw1xkDCbSx2A\",\n \"UpdatedAt_UT\": \"2025-10-19T21:24:19.465Z\",\n \"CreatedAt_UT\": \"2025-10-19T21:24:19.465Z\"\n },\n {\n \"UUID_UT\": \"5270ddca-4050-4bcd-81fd-064cf30c76cf\",\n \"UserID_UT\": \"CYRQ98X7\",\n \"Token_UT\": \"dVR1wS02TpG6gBnuKnrNOJ:APA91bGlIhU_19JdJGyZgC476Rzvxei1chwyrsI0kzC3ljLJ5TGw8iTweZxCt-aZ_14EFUv1GQOLfEEWQNYqssxwGIZreknQhLbpL3A81KZSHVljQScRftI\",\n \"UpdatedAt_UT\": \"2025-10-31T10:51:07.750Z\",\n \"CreatedAt_UT\": \"2025-10-31T17:51:07.749Z\"\n }\n ]\n}" + } + ] + }, + { + "name": "DELETE USERS", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"userID\": \"test\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/delete", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "delete" + ] + } + }, + "response": [ + { + "name": "DELETE USERS", + "originalRequest": { + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"userID\": \"test\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{USER_MANAGEMENT}}/delete", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{USER_MANAGEMENT}}", + "delete" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "71" + }, + { + "key": "ETag", + "value": "W/\"47-LTHAmK31HVx933qBYdl8bwH/0B4\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 13:34:32 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"User deleted successfully!\",\n \"data\": null\n}" + } + ] + } + ] + }, + { + "name": "ADMIN MANAGEMENT", + "item": [ + { + "name": "LOGIN", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"email\": \"admin@csa.id\",\r\n \"password\": \"aadmin1234\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{ADMIN_MANAGEMENT}}/auth", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{ADMIN_MANAGEMENT}}", + "auth" + ] + } + }, + "response": [ + { + "name": "LOGIN", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"email\": \"admin@csa.id\",\r\n \"password\": \"aadmin1234\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{ADMIN_MANAGEMENT}}/auth", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{ADMIN_MANAGEMENT}}", + "auth" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "355" + }, + { + "key": "ETag", + "value": "W/\"163-OxIR3+wwQd7JGTv5Wgs+ZbU3Wv0\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:51:09 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Authenticated!\",\n \"data\": {\n \"admin\": {\n \"id\": \"def9309a-007c-4973-9577-354d40769f42\",\n \"name\": \"ADMIN CSA\",\n \"email\": \"admin@csa.id\"\n },\n \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiJkZWY5MzA5YS0wMDdjLTQ5NzMtOTU3Ny0zNTRkNDA3NjlmNDIiLCJpYXQiOjE3NjQwNTcwNjksImV4cCI6MTc2NDE0MzQ2OX0.p6-ahnmHzxRT849yp6c7ghh17hZVR8wsI2yTruBhZgg\"\n }\n}" + } + ] + }, + { + "name": "REGISTER", + "request": { + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "value", + "value": "{{API_KEY}}", + "type": "string" + }, + { + "key": "key", + "value": "x-api-key", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"ADMIN CSA 2\",\r\n \"email\": \"admin2@csa.id\",\r\n \"password\": \"aadmin1234\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{ADMIN_MANAGEMENT}}/register", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{ADMIN_MANAGEMENT}}", + "register" + ] + } + }, + "response": [ + { + "name": "REGISTER", + "originalRequest": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"username\": \"ADMIN CSA 2\",\r\n \"email\": \"admin2@csa.id\",\r\n \"password\": \"aadmin1234\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/{{ADMIN_MANAGEMENT}}/register", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "{{ADMIN_MANAGEMENT}}", + "register" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "171" + }, + { + "key": "ETag", + "value": "W/\"ab-c/x8A38Va2rGkg8VjfSAo00Gets\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 07:52:36 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Admin registered successfully!\",\n \"data\": {\n \"admin\": {\n \"id\": \"a7cec6ae-aa69-420c-af8f-2582d3230d24\",\n \"name\": \"ADMIN CSA 2\",\n \"email\": \"admin2@csa.id\"\n }\n }\n}" + } + ] + } + ] + }, + { + "name": "OPENAI", + "item": [ + { + "name": "GENERATE RESP", + "request": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "cifosuperapp", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"prompt\": {\r\n \"user_id\": \"USR78910\",\r\n \"recent_activities\": [\r\n {\r\n \"type\": \"login\",\r\n \"platform\": \"Android\",\r\n \"timestamp\": \"2025-10-26T06:42:11Z\"\r\n },\r\n {\r\n \"type\": \"browse\",\r\n \"category\": \"Hotels\",\r\n \"timestamp\": \"2025-10-26T06:45:20Z\"\r\n },\r\n {\r\n \"type\": \"view_item\",\r\n \"item_name\": \"Hotel Trans Luxury Bandung\",\r\n \"price_per_night\": 1450000,\r\n \"timestamp\": \"2025-10-26T06:46:55Z\"\r\n },\r\n {\r\n \"type\": \"check_discount\",\r\n \"discount_code\": \"STAY10\",\r\n \"discount_value\": \"10%\",\r\n \"timestamp\": \"2025-10-26T06:48:12Z\"\r\n },\r\n {\r\n \"type\": \"view_item\",\r\n \"item_name\": \"Hotel Aryaduta Bandung\",\r\n \"price_per_night\": 980000,\r\n \"timestamp\": \"2025-10-26T06:50:34Z\"\r\n },\r\n {\r\n \"type\": \"app_exit\",\r\n \"timestamp\": \"2025-10-26T06:53:10Z\"\r\n }\r\n ]\r\n }\r\n}\r\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/openai-management/test", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "openai-management", + "test" + ] + } + }, + "response": [ + { + "name": "GENERATE RESP", + "originalRequest": { + "method": "POST", + "header": [ + { + "key": "x-api-key", + "value": "cifosuperapp", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"prompt\": {\r\n \"user_id\": \"USR78910\",\r\n \"recent_activities\": [\r\n {\r\n \"type\": \"login\",\r\n \"platform\": \"Android\",\r\n \"timestamp\": \"2025-10-26T06:42:11Z\"\r\n },\r\n {\r\n \"type\": \"browse\",\r\n \"category\": \"Hotels\",\r\n \"timestamp\": \"2025-10-26T06:45:20Z\"\r\n },\r\n {\r\n \"type\": \"view_item\",\r\n \"item_name\": \"Hotel Trans Luxury Bandung\",\r\n \"price_per_night\": 1450000,\r\n \"timestamp\": \"2025-10-26T06:46:55Z\"\r\n },\r\n {\r\n \"type\": \"check_discount\",\r\n \"discount_code\": \"STAY10\",\r\n \"discount_value\": \"10%\",\r\n \"timestamp\": \"2025-10-26T06:48:12Z\"\r\n },\r\n {\r\n \"type\": \"view_item\",\r\n \"item_name\": \"Hotel Aryaduta Bandung\",\r\n \"price_per_night\": 980000,\r\n \"timestamp\": \"2025-10-26T06:50:34Z\"\r\n },\r\n {\r\n \"type\": \"app_exit\",\r\n \"timestamp\": \"2025-10-26T06:53:10Z\"\r\n }\r\n ]\r\n }\r\n}\r\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{BASE_URL}}/openai-management/test", + "host": [ + "{{BASE_URL}}" + ], + "path": [ + "openai-management", + "test" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": null, + "header": [ + { + "key": "X-Powered-By", + "value": "Express" + }, + { + "key": "Vary", + "value": "Origin, Accept-Encoding" + }, + { + "key": "Access-Control-Allow-Credentials", + "value": "true" + }, + { + "key": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "key": "Content-Length", + "value": "399" + }, + { + "key": "ETag", + "value": "W/\"18f-uVIRz+/A15tHe5B//qa/kIXdjdw\"" + }, + { + "key": "Date", + "value": "Tue, 25 Nov 2025 08:02:05 GMT" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Keep-Alive", + "value": "timeout=5" + } + ], + "cookie": [], + "body": "{\n \"status\": \"success\",\n \"message\": \"Test activity created successfully!\",\n \"data\": {\n \"title\": \"AI Response\",\n \"description\": \"```json\\n{\\n \\\"title\\\": \\\"Hotel Bandung Menanti!\\\",\\n \\\"description\\\": \\\"Anda baru saja melihat beberapa hotel di Bandung. Dapatkan diskon 10% dengan kode STAY10 untuk menginap di Hotel Trans Luxury Bandung atau Hotel Aryaduta Bandung!\\\"\\n}\\n```\",\n \"intent\": \"unknown\",\n \"tone\": \"neutral\"\n }\n}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/csa-dashboard/Dockerfile b/csa-dashboard/Dockerfile new file mode 100644 index 0000000..3f37487 --- /dev/null +++ b/csa-dashboard/Dockerfile @@ -0,0 +1,14 @@ +# Build Stage +FROM node:20 AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# Production Image +FROM node:20-alpine +WORKDIR /app +COPY --from=builder /app ./ +EXPOSE 3000 +CMD ["npm", "start"] diff --git a/csa-dashboard/Jenkinsfile b/csa-dashboard/Jenkinsfile new file mode 100644 index 0000000..ed2c952 --- /dev/null +++ b/csa-dashboard/Jenkinsfile @@ -0,0 +1,120 @@ +pipeline { + agent any + + environment { + REGISTRY = "docker.io/syifamaulidya" + IMAGE_NAME = "admin-csa" + GITOPS_REPO = "https://git.winteraccess.id/syifa/admin-csa-gitops.git" + } + + stages { + + stage('Checkout Source Code') { + steps { + checkout scm + } + } + + /* ===================================== + BUILD & PUSH NEXT.JS IMAGE + ====================================== */ + stage('Build & Push Image') { + steps { + script { + withCredentials([usernamePassword( + credentialsId: 'gitops-dockerhub', + usernameVariable: 'DOCKER_USER', + passwordVariable: 'DOCKER_PASS' + )]) { + + sh """ + docker login -u $DOCKER_USER -p $DOCKER_PASS + + echo "Building admin-csa image..." + docker build -t $REGISTRY/$IMAGE_NAME:$BUILD_NUMBER . + + docker push $REGISTRY/$IMAGE_NAME:$BUILD_NUMBER + + docker tag $REGISTRY/$IMAGE_NAME:$BUILD_NUMBER $REGISTRY/$IMAGE_NAME:latest + docker push $REGISTRY/$IMAGE_NAME:latest + """ + } + + env.IMAGE_TAG = "${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}" + } + } + } + + /* ===================================== + UPDATE GITOPS + ====================================== */ + stage('Update GitOps (dev, staging, prod)') { + steps { + script { + + def branches = [ + [name: "dev", overlay: "overlays/dev"], + [name: "staging", overlay: "overlays/staging"], + [name: "production", overlay: "overlays/production"] + ] + + withCredentials([usernamePassword( + credentialsId: 'gitea-token-gitops', + usernameVariable: 'GITEA_USER', + passwordVariable: 'GITEA_PASS' + )]) { + + branches.each { envSet -> + + echo "Updating GitOps branch: ${envSet.name}" + + sh( + script: """ + if ! command -v ./yq &> /dev/null; then + wget -qO ./yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + chmod +x ./yq + fi + + rm -rf gitops + git -c http.sslVerify=false clone -b ${envSet.name} \ + https://$GITEA_USER:$GITEA_PASS@git.winteraccess.id/syifa/admin-csa-gitops.git gitops + + cd gitops + + echo "Updating image tag..." + + ../yq e -i \ + ".spec.template.spec.containers[] |= select(.name == \\"admin-csa\\").image = env(IMAGE_TAG)" \ + ${envSet.overlay}/patch-deployment.yaml + + git config user.name "jenkins" + git config user.email "jenkins@gitops.local" + + git add . + git commit -m "Update admin-csa image to build $BUILD_NUMBER" || echo "No changes" + git push origin ${envSet.name} + + cd .. + rm -rf gitops + """, + mask: true + ) + } + } + } + } + } + } + + post { + success { + echo "GitOps updated successfully!" + } + failure { + echo "Pipeline failed." + } + always { + cleanWs() + } + } +} diff --git a/csa-dashboard/README.md b/csa-dashboard/README.md new file mode 100644 index 0000000..e9015c0 --- /dev/null +++ b/csa-dashboard/README.md @@ -0,0 +1,196 @@ +# Admin CSA - Enterprise Dashboard + +Modern, scalable admin dashboard built with Next.js 15, TypeScript, and shadcn/ui. Auto-generated from Postman collection with complete CRUD operations for all endpoints. +- **Framework:** Next.js 15.1.3 +- **Language:** TypeScript 5 +- **Styling:** Tailwind CSS 3.4 +- **UI Components:** shadcn/ui (Radix UI) +- **State Management:** React Query 5 +- **Form Handling:** react-hook-form 7 +- **Validation:** Zod 3 +- **HTTP Client:** Axios 1.7 +- **Icons:** Lucide React + +## Project Structure + +``` +admin-csa/ +├── app/ # Next.js App Router +│ ├── (dashboard)/ # Protected dashboard routes +│ │ ├── api-management/ +│ │ ├── cms/ +│ │ │ ├── content/ +│ │ │ └── buckets/ +│ │ ├── users/ +│ │ └── openai/ +│ ├── login/ +│ ├── register/ +│ ├── layout.tsx +│ └── globals.css +├── components/ # Reusable components +│ ├── ui/ # shadcn UI components +│ ├── layout/ # Layout components +│ └── data-table/ # DataTable components +├── modules/ # Feature modules +│ ├── admin/ +│ ├── api-management/ +│ ├── cms/ +│ │ ├── content/ +│ │ └── bucket/ +│ ├── users/ +│ └── openai/ +├── providers/ # Context providers +├── lib/ # Utilities +├── config/ # Configuration +└── hooks/ # Custom hooks +``` + +## Getting Started + +### Prerequisites + +- Node.js 18+ +- npm or yarn + +### Installation + +1. Clone the repository: +```bash +git clone +cd admin-csa +``` + +2. Install dependencies: +```bash +npm install +``` + +3. Configure environment variables: +```bash +# .env file is already configured with: +NEXT_PUBLIC_API_BASE_URL=https://api-management.cifo.co.id +NEXT_PUBLIC_API_KEY=cifosuperapp +``` + +4. Run the development server: +```bash +npm run dev +``` + +5. Open [http://localhost:3000](http://localhost:3000) + +### Default Credentials + +``` +Email: admin@csa.id +Password: aadmin1234 +``` + +## Build for Production + +```bash +npm run build +npm start +``` + +## Development + +### Adding a New Module + +1. Create module structure: +``` +modules/ +└── your-module/ + ├── schemas.ts # Zod validation schemas + ├── services.ts # API service functions + └── hooks.ts # React Query hooks +``` + +2. Create pages: +``` +app/(dashboard)/ +└── your-module/ + ├── page.tsx # List view + ├── create/page.tsx # Create form + └── edit/[id]/page.tsx # Edit form +``` + +3. Add route to sidebar in `components/layout/sidebar.tsx` + +### API Integration + +All API calls are centralized in module services: + +```typescript +// modules/your-module/services.ts +import { apiClient } from "@/lib/api-client"; + +export const yourService = { + getAll: async () => { + const response = await apiClient.get("/endpoint"); + return response.data; + }, +}; +``` + +### Form Validation + +Use Zod schemas for type-safe validation: + +```typescript +// modules/your-module/schemas.ts +import { z } from "zod"; + +export const yourSchema = z.object({ + field: z.string().min(1, "Required"), +}); + +export type YourInput = z.infer; +``` + +## Architecture Highlights + +### Modular Structure +Each feature is self-contained with its own schemas, services, and hooks. + +### Type Safety +Full TypeScript coverage with strict mode enabled. + +### Auto-generated from Postman +All endpoints from the Postman collection are automatically mapped to modules. + +### Scalable +Easy to add new modules following the established patterns. + +### Enterprise-Ready +- Clean code architecture +- SOLID principles +- DRY approach +- Maintainable codebase + +## Environment Variables + +```env +NEXT_PUBLIC_API_BASE_URL=https://api-management.cifo.co.id +NEXT_PUBLIC_API_KEY=cifosuperapp +NEXT_PUBLIC_API_MANAGEMENT=api-management +NEXT_PUBLIC_CMS_MANAGEMENT=cms-management +NEXT_PUBLIC_BUCKET_MANAGEMENT=bucket-management +NEXT_PUBLIC_USER_MANAGEMENT=user-management +NEXT_PUBLIC_ADMIN_MANAGEMENT=admin-management +``` + +## Scripts + +- `npm run dev` - Start development server with Turbopack +- `npm run build` - Build for production +- `npm start` - Start production server +- `npm run lint` - Run ESLint + +## License + +MIT + +## Support + +For issues and questions, please open an issue in the repository. diff --git a/csa-dashboard/app/(dashboard)/api-management/page.tsx b/csa-dashboard/app/(dashboard)/api-management/page.tsx new file mode 100644 index 0000000..007150c --- /dev/null +++ b/csa-dashboard/app/(dashboard)/api-management/page.tsx @@ -0,0 +1,262 @@ +"use client"; + +import { useState } from "react"; +import { ColumnDef } from "@tanstack/react-table"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { DataTable } from "@/components/data-table/data-table"; +import { useApiTokens, useCreateApiKey, useDeleteApiKey, useTestSecure } from "@/modules/api-management/hooks"; +import { ApiToken } from "@/modules/api-management/schemas"; +import { useToast } from "@/hooks/use-toast"; +import { Key, Trash, TestTube, MoreHorizontal, Plus, Eye, Copy } from "lucide-react"; +import { formatDateTime } from "@/lib/utils"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +export default function ApiManagementPage() { + const { toast } = useToast(); + const { data, isLoading } = useApiTokens(); + const createMutation = useCreateApiKey(); + const deleteMutation = useDeleteApiKey(); + const { refetch: testSecure } = useTestSecure(); + const [apiKey, setApiKey] = useState(null); + const [selectedToken, setSelectedToken] = useState(null); + const [isDetailOpen, setIsDetailOpen] = useState(false); + const [deleteToken, setDeleteToken] = useState(null); + + const handleCreate = async () => { + try { + const response = await createMutation.mutateAsync(); + setApiKey(response.apiKey || response.token); + toast({ title: "API Key created", description: "New API key generated successfully" }); + } catch (error) { + toast({ title: "Create failed", variant: "destructive" }); + } + }; + + const handleDelete = async () => { + if (!deleteToken) return; + + try { + await deleteMutation.mutateAsync(deleteToken); + toast({ title: "API Key deleted", description: "API token has been deleted successfully" }); + setDeleteToken(null); + } catch (error) { + toast({ title: "Delete failed", variant: "destructive" }); + setDeleteToken(null); + } + }; + + const handleCopy = async (text: string) => { + try { + await navigator.clipboard.writeText(text); + toast({ title: "Copied to clipboard", description: "API key has been copied successfully" }); + } catch (error) { + toast({ title: "Copy failed", variant: "destructive" }); + } + }; + + const handleOpenDetail = (token: ApiToken) => { + setSelectedToken(token); + setIsDetailOpen(true); + }; + + const columns: ColumnDef[] = [ + { + accessorKey: "TokenCredential_AC", + header: "Token", + cell: ({ row }) => ( +
+ {row.original.TokenCredential_AC} +
+ ), + }, + { + accessorKey: "CreatedAt_AC", + header: "Created", + cell: ({ row }) => formatDateTime(row.original.CreatedAt_AC), + }, + { + accessorKey: "UpdatedAt_AC", + header: "Updated", + cell: ({ row }) => formatDateTime(row.original.UpdatedAt_AC), + }, + { + id: "actions", + cell: ({ row }) => ( + + + + + + handleOpenDetail(row.original)}> + + View Details + + setDeleteToken(row.original.TokenCredential_AC)} + className="text-destructive" + > + + Delete + + + + ), + }, + ]; + + if (isLoading) { + return
Loading...
; + } + + const tokens = data?.data?.tokens || []; + + const handleTest = async () => { + try { + await testSecure(); + toast({ title: "Test successful", description: "API connection is working" }); + } catch (error) { + toast({ title: "Test failed", variant: "destructive" }); + } + }; + + return ( +
+
+
+

API Management

+

Manage API keys and tokens

+
+ +
+ + {apiKey && ( + + + New API Token Created + + Copy and save this token securely. You won't be able to see it again. + + + +
+

{apiKey}

+
+
+
+ )} + + + + API Tokens + + Total: {data?.data?.total || 0} tokens + + + + + + + + + + API Testing + Test API connectivity + + + + + + + + + + API Token Details + + View complete API token information + + + {selectedToken && ( +
+
+ +
+
+ {selectedToken.TokenCredential_AC} +
+ +
+
+
+
+ +

{formatDateTime(selectedToken.CreatedAt_AC)}

+
+
+ +

{formatDateTime(selectedToken.UpdatedAt_AC)}

+
+
+
+ )} +
+
+ + !open && setDeleteToken(null)}> + + + Delete API Key + + Are you sure you want to delete this API key? This action cannot be undone and will immediately revoke access for this token. + + + + Cancel + + Delete + + + + +
+ ); +} diff --git a/csa-dashboard/app/(dashboard)/campaigns/page.tsx b/csa-dashboard/app/(dashboard)/campaigns/page.tsx new file mode 100644 index 0000000..5d4aace --- /dev/null +++ b/csa-dashboard/app/(dashboard)/campaigns/page.tsx @@ -0,0 +1,805 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { ColumnDef } from "@tanstack/react-table"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { DataTable } from "@/components/data-table/data-table"; +import { EmptyState } from "@/components/empty-state"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, + DropdownMenuLabel, + DropdownMenuSeparator, +} from "@/components/ui/dropdown-menu"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { useCampaignList, useCancelCampaign, useCampaignReport, useUpdateCampaign, useDeleteCampaign } from "@/modules/campaigns/hooks"; +import { Campaign } from "@/modules/campaigns/schemas"; +import { useToast } from "@/hooks/use-toast"; +import { MoreHorizontal, Plus, Send, Trash, Calendar, Filter, Eye, CheckCircle2, XCircle, Clock, AlertCircle, FileText, TrendingUp, Target, Users, RefreshCw } from "lucide-react"; +import { formatDateTime } from "@/lib/utils"; + +export default function CampaignsPage() { + const router = useRouter(); + const { toast } = useToast(); + const [statusFilter, setStatusFilter] = useState(undefined); + const [isRefetching, setIsRefetching] = useState(false); + const { data, isLoading, refetch } = useCampaignList(statusFilter); + const cancelMutation = useCancelCampaign(); + const updateMutation = useUpdateCampaign(); + const deleteMutation = useDeleteCampaign(); + const [cancelCampaign, setCancelCampaign] = useState<{ id: string; title: string } | null>(null); + const [selectedCampaign, setSelectedCampaign] = useState(null); + const [isDetailOpen, setIsDetailOpen] = useState(false); + const [isEditOpen, setIsEditOpen] = useState(false); + const [editFormData, setEditFormData] = useState<{ title?: string; content?: string; date?: string; status?: "pending" | "completed" | "cancelled" | "failed" }>({}); + const [reportCampaignId, setReportCampaignId] = useState(null); + const [isReportOpen, setIsReportOpen] = useState(false); + + const handleRefetch = async () => { + setIsRefetching(true); + try { + await refetch(); + } finally { + setIsRefetching(false); + } + }; + + const handleCancel = async () => { + if (!cancelCampaign) return; + + try { + await cancelMutation.mutateAsync(cancelCampaign.id); + toast({ + title: "Campaign cancelled", + description: "Campaign has been cancelled successfully", + }); + setCancelCampaign(null); + } catch (error) { + toast({ + title: "Cancel failed", + description: "Failed to cancel campaign", + variant: "destructive", + }); + setCancelCampaign(null); + } + }; + + const handleEdit = async () => { + if (!selectedCampaign || !editFormData.title) return; + + try { + await updateMutation.mutateAsync({ + id: selectedCampaign.UUID_ACP, + data: editFormData, + }); + toast({ + title: "Campaign updated", + description: "Campaign has been updated successfully", + }); + setIsEditOpen(false); + setEditFormData({}); + refetch(); + } catch (error) { + toast({ + title: "Update failed", + description: "Failed to update campaign", + variant: "destructive", + }); + } + }; + + const handleDelete = async (campaignId: string) => { + try { + await deleteMutation.mutateAsync(campaignId); + toast({ + title: "Campaign deleted", + description: "Campaign has been cancelled successfully", + }); + refetch(); + } catch (error) { + toast({ + title: "Delete failed", + description: "Failed to delete campaign", + variant: "destructive", + }); + } + }; + + const getStatusBadge = (status: string | undefined) => { + if (!status) { + return Unknown; + } + const variants: Record = { + pending: "secondary", + completed: "default", + cancelled: "destructive", + failed: "destructive", + }; + return ( + + {status.charAt(0).toUpperCase() + status.slice(1)} + + ); + }; + + const columns: ColumnDef[] = [ + { + accessorKey: "Title_ACP", + header: "Title", + cell: ({ row }) => ( +
{row.original.Title_ACP || "-"}
+ ), + }, + { + accessorKey: "Content_ACP", + header: "Content", + cell: ({ row }) => ( +
+ {row.original.Content_ACP || "-"} +
+ ), + }, + { + accessorKey: "Date_ACP", + header: "Scheduled Date", + cell: ({ row }) => row.original.Date_ACP ? formatDateTime(row.original.Date_ACP) : "-", + }, + { + accessorKey: "Status_ACP", + header: "Status", + cell: ({ row }) => getStatusBadge(row.original.Status_ACP), + }, + { + accessorKey: "TargetUsers_ACP", + header: "Target", + cell: ({ row }) => ( +
{row.original.TargetUsers_ACP}
+ ), + }, + { + accessorKey: "SentCount_ACP", + header: "Sent", + cell: ({ row }) => ( +
{row.original.SentCount_ACP}
+ ), + }, + { + accessorKey: "DeliveryRate_ACP", + header: "Delivery Rate", + cell: ({ row }) => { + const rate = row.original.DeliveryRate_ACP; + return ( +
+ = 90 ? 'text-green-600' : rate >= 70 ? 'text-yellow-600' : 'text-red-600'}`}> + {rate}% + +
+ ); + }, + }, + { + accessorKey: "CreatedAt_ACP", + header: "Created", + cell: ({ row }) => ( +
+ {row.original.CreatedAt_ACP ? formatDateTime(row.original.CreatedAt_ACP) : "-"} +
+ ), + }, + { + id: "actions", + cell: ({ row }) => ( + + + + + + { + setSelectedCampaign(row.original); + setIsDetailOpen(true); + }} + > + + View Details + + { + setReportCampaignId(row.original.UUID_ACP); + setIsReportOpen(true); + }} + > + + View Report + + {row.original.Status_ACP === "pending" && ( + <> + + { + setSelectedCampaign(row.original); + setEditFormData({ + title: row.original.Title_ACP, + content: row.original.Content_ACP, + date: row.original.Date_ACP, + }); + setIsEditOpen(true); + }} + > + + Edit + + setCancelCampaign({ id: row.original.UUID_ACP, title: row.original.Title_ACP })} + className="text-destructive" + > + + Cancel + + + )} + + + ), + }, + ]; + + if (isLoading) { + return
Loading...
; + } + + const campaigns = data?.data || []; + + const filterLabel = statusFilter + ? statusFilter.charAt(0).toUpperCase() + statusFilter.slice(1) + : "All Status"; + + return ( +
+
+
+

Campaign Management

+

+ Manage and schedule notification campaigns +

+
+
+ + + + + + + Filter by Status + + setStatusFilter(undefined)}> + All Status + + setStatusFilter("pending")}> + Pending + + setStatusFilter("completed")}> + Completed + + setStatusFilter("cancelled")}> + Cancelled + + setStatusFilter("failed")}> + Failed + + + + + +
+
+ + {campaigns.length === 0 ? ( + + + +
+ } + /> + ) : ( + + )} + + !open && setCancelCampaign(null)}> + + + Cancel Campaign + + Are you sure you want to cancel the campaign "{cancelCampaign?.title}"? This action cannot be undone. + + + + Keep Campaign + + Cancel Campaign + + + + + + + + + Edit Campaign + + Update campaign details + + + {selectedCampaign && ( +
+
+ + setEditFormData({ ...editFormData, title: e.target.value })} + className="w-full px-3 py-2 border rounded-md border-input bg-background" + placeholder="Campaign title" + /> +
+
+ +