{
  "info": {
    "name": "UJS – Universal JSON Storage (REST v1)",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Postman-Collection für die REST-API v1.\n\n**Variablen setzen:**\n- `base_url` → z. B. `https://vault.nexus.rm.de`\n- `token` → dein Bearer-Token\n- `module_slug` → z. B. `invoices`\n- `entry_id` / `hist_id` / `attachment_id` / `share_id` / `customer_no` → je nach Request"
  },
  "variable": [
    { "key": "base_url",    "value": "https://dev.rm.de/UJS_universal_json_storage" },
    { "key": "token",       "value": "DEIN_BEARER_TOKEN_HIER" },
    { "key": "module_slug", "value": "test" },
    { "key": "entry_id",    "value": "1" },
    { "key": "hist_id",     "value": "1" },
    { "key": "attachment_id","value": "1" },
    { "key": "share_id",    "value": "1" },
    { "key": "customer_no", "value": "K-1001" },
    { "key": "external_id", "value": "N-001" }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{token}}", "type": "string" }]
  },
  "item": [
    {
      "name": "Meta",
      "item": [
        { "name": "Ping",  "request": { "method":"GET", "url":"{{base_url}}/api/v1/ping", "auth": { "type": "noauth" } } },
        { "name": "Whoami","request": { "method":"GET", "url":"{{base_url}}/api/v1/whoami" } }
      ]
    },
    {
      "name": "Entries",
      "item": [
        { "name":"List", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries?limit=20&order=desc" }},

        { "name":"Create (store)", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{\n  \"type\": \"note\",\n  \"customer_no\": \"{{customer_no}}\",\n  \"tags\": [\"wichtig\"],\n  \"data\": { \"titel\": \"Testnotiz\", \"prio\": 1 }\n}"} } },

        { "name":"Bulk Store", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/bulk",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{\n  \"transactional\": false,\n  \"items\": [\n    { \"type\":\"note\", \"customer_no\":\"K-1\", \"data\":{\"titel\":\"A\"} },\n    { \"type\":\"note\", \"customer_no\":\"K-2\", \"data\":{\"titel\":\"B\"} }\n  ]\n}"} } },

        { "name":"Query (body filter)", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/query",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{\n  \"type\": \"note\",\n  \"limit\": 20,\n  \"q\": {\n    \"data.prio\": { \"gte\": 1 },\n    \"data.titel\": { \"like\": \"%test%\" }\n  }\n}"} } },

        { "name":"Get by ID", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}" }},

        { "name":"Get by external_id", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/by-external/{{external_id}}" }},

        { "name":"Upsert by external_id", "request":{ "method":"PUT",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/by-external/{{external_id}}",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{\n  \"type\": \"note\",\n  \"customer_no\": \"{{customer_no}}\",\n  \"data\": { \"nr\": \"{{external_id}}\", \"titel\": \"Upsert-Test\" }\n}"} } },

        { "name":"Update (PUT, If-Match)", "request":{ "method":"PUT",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}",
            "header":[
              {"key":"Content-Type","value":"application/json"},
              {"key":"If-Match","value":"\"v1\"","description":"Optimistic Locking: aktuelle Version angeben"}
            ],
            "body":{"mode":"raw","raw":"{\n  \"data\": { \"titel\": \"Geändert\" },\n  \"tags\": [\"bearbeitet\"]\n}"} } },

        { "name":"Delete", "request":{ "method":"DELETE",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}" }},

        { "name":"Restore (undelete)", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/restore" }},

        { "name":"Restore Version", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/restore/{{hist_id}}" }},

        { "name":"History", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/history?limit=50" }}
      ]
    },
    {
      "name": "Tags",
      "item": [
        { "name":"Set Tags", "request":{ "method":"PUT",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/tags",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{ \"tags\": [\"a\",\"b\",\"c\"] }"} } }
      ]
    },
    {
      "name": "Links",
      "item": [
        { "name":"List Links", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/links" }},
        { "name":"Add Link", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/links",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{ \"rel\":\"related\", \"target_slug\":\"invoices\", \"target_id\":42 }"} } },
        { "name":"Remove Link", "request":{ "method":"DELETE",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/links",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{ \"rel\":\"related\", \"target_slug\":\"invoices\", \"target_id\":42 }"} } }
      ]
    },
    {
      "name": "Attachments",
      "item": [
        { "name":"List", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/attachments" }},
        { "name":"Upload (multipart)", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/attachments",
            "body":{"mode":"formdata","formdata":[{"key":"file","type":"file","src":""}]} } },
        { "name":"Download", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/attachments/{{attachment_id}}" }},
        { "name":"Delete", "request":{ "method":"DELETE",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/attachments/{{attachment_id}}" }}
      ]
    },
    {
      "name": "Shares",
      "item": [
        { "name":"List", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/shares" }},
        { "name":"Create", "request":{ "method":"POST",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/entries/{{entry_id}}/shares",
            "header":[{"key":"Content-Type","value":"application/json"}],
            "body":{"mode":"raw","raw":"{\n  \"expires_at\": \"2026-12-31 23:59:59\",\n  \"max_views\": 100,\n  \"show_history\": false,\n  \"allowed_ips\": \"\"\n}"} } },
        { "name":"Delete", "request":{ "method":"DELETE",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/shares/{{share_id}}" }}
      ]
    },
    {
      "name": "Aggregation / Export",
      "item": [
        { "name":"Aggregate", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/aggregate?agg=sum&field=summen.brutto&group_by=customer_no" }},
        { "name":"Export JSONL", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/export.jsonl" }},
        { "name":"Export CSV", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/modules/{{module_slug}}/export.csv" }}
      ]
    },
    {
      "name": "DSGVO",
      "item": [
        { "name":"Export per customer_no", "request":{ "method":"GET",
            "url":"{{base_url}}/api/v1/dsgvo/{{customer_no}}" }},
        { "name":"Delete per customer_no", "request":{ "method":"DELETE",
            "url":"{{base_url}}/api/v1/dsgvo/{{customer_no}}?also_history=0" }}
      ]
    }
  ]
}
