{
  "name": "06 - AI Mashup Request Pipeline",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "mashup-requested",
        "responseMode": "onReceived"
      },
      "name": "Webhook: mashup.requested",
      "type": "n8n-nodes-base.webhook",
      "position": [
        250,
        300
      ],
      "id": "node-trigger"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT t1.r2_url_processed as track_a_url, t1.bpm as track_a_bpm, t1.key as track_a_key, t2.r2_url_processed as track_b_url, t2.bpm as track_b_bpm, t2.key as track_b_key FROM tracks t1, tracks t2 WHERE t1.id = '{{ $json.track_a_id }}' AND t2.id = '{{ $json.track_b_id }}'"
      },
      "name": "Neon: Get Track Data",
      "type": "n8n-nodes-base.postgres",
      "position": [
        500,
        300
      ],
      "id": "node-get-tracks"
    },
    {
      "parameters": {
        "url": "={{ $env.DJ_SERVICE_URL }}/mash",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "track_a_url",
              "value": "={{ $json.track_a_url }}"
            },
            {
              "name": "track_b_url",
              "value": "={{ $json.track_b_url }}"
            },
            {
              "name": "track_a_bpm",
              "value": "={{ $json.track_a_bpm }}"
            },
            {
              "name": "track_b_bpm",
              "value": "={{ $json.track_b_bpm }}"
            },
            {
              "name": "stem_routing",
              "value": "={{ $json.stem_routing || 'vocals_a_beat_b' }}"
            },
            {
              "name": "output_format",
              "value": "mp3_320"
            }
          ]
        },
        "options": {
          "timeout": 180000
        }
      },
      "name": "dj-service: Generate Mashup",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        750,
        300
      ],
      "id": "node-mashup"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO tracks (id, creator_id, title, vibe_packet, r2_url_processed, stems) VALUES (gen_random_uuid(), '{{ $json.requester_id }}', 'Mashup: {{ $json.track_a_title }} x {{ $json.track_b_title }}', '{{ JSON.stringify($json.vibe_packet) }}'::jsonb, '{{ $json.mashup_url }}', '{}'::jsonb) RETURNING id"
      },
      "name": "Neon: Store Mashup Track",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1000,
        300
      ],
      "id": "node-store-mashup"
    },
    {
      "parameters": {
        "url": "={{ $env.BRAIN_URL }}/events/core",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "event",
              "value": "mashup.completed"
            },
            {
              "name": "payload",
              "value": "={{ { mashup_track_id: $json.id, requester_id: $json.requester_id, source_tracks: [$json.track_a_id, $json.track_b_id] } }}"
            }
          ]
        }
      },
      "name": "Brain: Emit mashup.completed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1250,
        300
      ],
      "id": "node-emit"
    },
    {
      "parameters": {
        "url": "={{ $env.BRAIN_URL }}/events/core",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "event",
              "value": "discovery.new_track"
            },
            {
              "name": "payload",
              "value": "={{ { track_id: $json.id, source: 'mashup', push_to_feed: true } }}"
            }
          ]
        }
      },
      "name": "Brain: Push to Discovery Feed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1500,
        300
      ],
      "id": "node-discovery"
    }
  ],
  "connections": {
    "Webhook: mashup.requested": {
      "main": [
        [
          {
            "node": "Neon: Get Track Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Neon: Get Track Data": {
      "main": [
        [
          {
            "node": "dj-service: Generate Mashup",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dj-service: Generate Mashup": {
      "main": [
        [
          {
            "node": "Neon: Store Mashup Track",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Neon: Store Mashup Track": {
      "main": [
        [
          {
            "node": "Brain: Emit mashup.completed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brain: Emit mashup.completed": {
      "main": [
        [
          {
            "node": "Brain: Push to Discovery Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    "disco-bass",
    "mashup",
    "dj"
  ]
}