meta {
  name: 6. Ações em Massa (Bulk)
  type: http
  seq: 6
}

post {
  url: {{baseUrl}}/api/contacts/bulk
  body: json
  auth: none
}

body:json {
  {
    "action": "addTags",
    "ids": ["{{contactId}}"],
    "payload": { "tags": ["vip"] }
  }
}

docs {
  Requer sessão. Schema `bulkUpdateContactsSchema` — union discriminada por `action`:
  - `{"action": "delete", "ids": string[] (min 1)}` — apaga os contatos de verdade (`Contact.deleteMany`).
  - `{"action": "addTags", "ids": string[] (min 1), "payload": {"tags": string[] (min 1, cada item trim+min1)}}` — faz MERGE nas tags existentes (soma, não substitui).
  - `{"action": "addToList", "ids": string[] (min 1), "payload": {"listId": string (min 1)}}` — adiciona à lista, sem checar se `listId` existe ou pertence ao usuário logado.

  Este request usa `addTags` por padrão. Para testar as outras, troque o corpo por um destes:
  ```
  { "action": "delete", "ids": ["{{contactId}}"] }
  { "action": "addToList", "ids": ["{{contactId}}"], "payload": { "listId": "{{contactListId}}" } }
  ```

  ⚠️ Validação usa `.parse()` → body malformado ou `action` desconhecida → **500**, não 400.

  Sucesso: 200, `{"affected": number}`. Só em `delete` o número reflete a contagem real do Prisma; em `addTags`/`addToList` é sempre `ids.length`, mesmo que algum id não exista.
}
