{
  "info": {
    "_postman_id": "a7c3e2b1-4d5f-6e7a-8b9c-0d1e2f3a4b5c",
    "name": "MemoryMag — Admin Panel APIs",
    "description": "All routes mounted under `{{baseUrl}}/api/v1/admin/`.\n\n**Headers**\n- Most routes: `Authtoken: Bearer <jwt>` (same as app auth).\n- **Albums, Users, Reports** subfolders require a user with **role: `admin`** (uses `adminMiddleware`).\n- **Content**, **Redis**, and **Customer Support** use `authMiddleware` only (any authenticated user per current backend).\n\nSet collection variables `baseUrl` and `adminAuthToken`. For non-admin routes you can use any valid user token in `adminAuthToken` if you prefer.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "baseUrl", "value": "http://localhost:3050" },
    { "key": "adminAuthToken", "value": "" },
    { "key": "albumId", "value": "" },
    { "key": "userId", "value": "" },
    { "key": "reportId", "value": "" }
  ],
  "item": [
    {
      "name": "Content (auth)",
      "description": "`authMiddleware` — any logged-in user token works.",
      "item": [
        {
          "name": "Create or update content",
          "description": "`type`: aboutus | privacy-policy | how-to-use | help-platform | instructions-platform | terms-and-condition",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"aboutus\",\n  \"content\": \"Minimum ten characters of CMS body text here.\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/content/create"
          }
        },
        {
          "name": "List all content",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/content/list"
          }
        },
        {
          "name": "Update content",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"aboutus\",\n  \"content\": \"Updated body with at least ten characters.\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/content/update"
          }
        }
      ]
    },
    {
      "name": "Customer support (auth)",
      "item": [
        {
          "name": "Create customer support inquiry",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fullName\": \"Jane Doe\",\n  \"email\": \"jane@example.com\",\n  \"description\": \"I need help with my account.\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/customer-support"
          }
        }
      ]
    },
    {
      "name": "Redis (auth)",
      "description": "Operational / infra endpoints.",
      "item": [
        {
          "name": "Redis health",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/redis/health"
          }
        },
        {
          "name": "Redis stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/redis/stats"
          }
        },
        {
          "name": "Cache stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/redis/cache/stats"
          }
        },
        {
          "name": "Sessions stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/redis/sessions/stats"
          }
        },
        {
          "name": "Jobs stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/redis/jobs/stats"
          }
        },
        {
          "name": "Clear cache",
          "description": "Omit body or omit `pattern` to clear all cache (see controller).",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pattern\": \"optional:key:pattern:*\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/redis/cache/clear"
          }
        },
        {
          "name": "Cleanup expired sessions",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pattern\": \"*\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/redis/sessions/cleanup"
          }
        },
        {
          "name": "Cleanup old jobs",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"queueName\": \"video-processing\",\n  \"maxAge\": 24\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/redis/jobs/cleanup"
          }
        },
        {
          "name": "Toggle job queue",
          "description": "`action`: pause | resume",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"queueName\": \"video-processing\",\n  \"action\": \"pause\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/redis/jobs/toggle"
          }
        }
      ]
    },
    {
      "name": "Albums (admin role)",
      "description": "`adminMiddleware` — JWT user must have role `admin`.",
      "item": [
        {
          "name": "Album stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/albums/stats"
          }
        },
        {
          "name": "List albums",
          "description": "Optional query: search, userId, isBlocked (true|false), isDeleted (true|false), page, limit",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/albums/list?page=1&limit=20"
          }
        },
        {
          "name": "Get album by ID",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/albums/{{albumId}}"
          }
        },
        {
          "name": "Update album moderation",
          "description": "At least one of `isBlocked`, `isDeleted` (boolean).",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"isBlocked\": false,\n  \"isDeleted\": false\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/albums/{{albumId}}/moderation"
          }
        }
      ]
    },
    {
      "name": "Users (admin role)",
      "item": [
        {
          "name": "User stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/users/stats"
          }
        },
        {
          "name": "List users",
          "description": "Optional query: search, role (admin|user), isVerified (true|false)",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/users/list?page=1&limit=20"
          }
        },
        {
          "name": "Get user by ID",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/users/{{userId}}"
          }
        },
        {
          "name": "Update user",
          "description": "At least one of `role` (admin|user), `isVerified` (boolean). Cannot demote self from admin if sole admin.",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"isVerified\": true\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/users/{{userId}}"
          }
        }
      ]
    },
    {
      "name": "Reports (admin role)",
      "description": "Album reports (`Report` model).",
      "item": [
        {
          "name": "Report stats",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/reports/stats"
          }
        },
        {
          "name": "List reports",
          "description": "Optional query: status (Pending|Reviewed|Resolved), albumId",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/reports/list?page=1&limit=20"
          }
        },
        {
          "name": "Get report by ID",
          "request": {
            "method": "GET",
            "header": [{ "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" }],
            "url": "{{baseUrl}}/api/v1/admin/reports/{{reportId}}"
          }
        },
        {
          "name": "Update report status",
          "description": "`status`: Pending | Reviewed | Resolved",
          "request": {
            "method": "PATCH",
            "header": [
              { "key": "Authtoken", "value": "Bearer {{adminAuthToken}}", "type": "text" },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"Reviewed\"\n}"
            },
            "url": "{{baseUrl}}/api/v1/admin/reports/{{reportId}}/status"
          }
        }
      ]
    }
  ]
}
