# 🎯 Sistema CRUD Completo de Campanhas

## ✅ Funcionalidades Implementadas

### 1. **Visualizar Campanhas** ✅

#### **Buscar todas as campanhas**
```http
GET /api/campaigns?page=1&limit=10&active=true
Authorization: Bearer <token>
```

**Permissões:**
- ✅ **Admin**: Vê todas as campanhas
- ✅ **Merchant**: Vê campanhas públicas + campanhas das suas lojas
- ✅ **User**: Vê apenas campanhas públicas

**Resposta:**
```json
{
  "success": true,
  "data": [
    {
      "campaign_id": 1,
      "campaign_number": "CAMP-20241106-0001",
      "campaign_name": "Campanha X",
      "sponsor_name": "Merchant 1",
      "establishment_id": 1,
      "status": "Activo",
      "valid_from": "2024-11-01T00:00:00Z",
      "valid_until": "2024-12-31T23:59:59Z",
      ...
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 50,
    "pages": 5
  }
}
```

---

#### **Buscar campanha por ID**
```http
GET /api/campaigns/:id
Authorization: Bearer <token>
```

**Permissões:**
- ✅ **Qualquer usuário autenticado** pode visualizar campanhas

**Resposta:**
```json
{
  "success": true,
  "data": {
    "campaign_id": 1,
    "campaign_number": "CAMP-20241106-0001",
    "campaign_name": "Campanha X",
    "sponsor_name": "Merchant 1",
    "establishment_id": 1,
    "status": "Activo",
    ...
  }
}
```

---

#### **Buscar campanhas de um estabelecimento**
```http
GET /api/campaigns/establishment/:establishmentId?page=1&limit=10&active=true
Authorization: Bearer <token>
```

**Permissões:**
- ✅ **Admin**: Vê todas as campanhas do estabelecimento
- ✅ **Merchant**: Vê campanhas do estabelecimento se tiver acesso
- ✅ **User**: Vê campanhas públicas do estabelecimento

---

### 2. **Editar Campanhas** ✅

#### **Atualizar campanha**
```http
PUT /api/campaigns/:id
Authorization: Bearer <token>
Content-Type: application/json

{
  "campaign_name": "Campanha Atualizada",
  "sponsor_name": "Novo Sponsor",
  "status": "Activo",
  "valid_from": "2024-11-01T00:00:00Z",
  "valid_until": "2024-12-31T23:59:59Z",
  ...
}
```

**Permissões:**
- ✅ **Admin**: Pode editar qualquer campanha
- ✅ **Merchant**: Pode editar apenas campanhas que criou
- ❌ **User**: Não pode editar campanhas

**Validações:**
- ✅ Validação de transição de status
- ✅ Validação de unicidade do nome (se mudar)
- ✅ Validação de permissões (pontos personalizados)

**Resposta:**
```json
{
  "success": true,
  "data": {
    "campaign_id": 1,
    "campaign_name": "Campanha Atualizada",
    ...
  },
  "message": "Campanha atualizada com sucesso"
}
```

---

### 3. **Deletar Campanhas** ✅

#### **Deletar campanha**
```http
DELETE /api/campaigns/:id
Authorization: Bearer <token>
```

**Permissões:**
- ✅ **Admin**: Pode deletar qualquer campanha
- ✅ **Merchant**: Pode deletar apenas campanhas que criou
- ❌ **User**: Não pode deletar campanhas

**Resposta:**
```json
{
  "success": true,
  "message": "Campanha deletada com sucesso"
}
```

---

## 🔐 Regras de Permissão

### **Admin**
- ✅ Pode visualizar todas as campanhas
- ✅ Pode criar campanhas em qualquer estabelecimento
- ✅ Pode editar qualquer campanha
- ✅ Pode deletar qualquer campanha
- ✅ Pode alterar status de qualquer campanha

### **Merchant**
- ✅ Pode visualizar campanhas públicas + campanhas das suas lojas
- ✅ Pode criar campanhas nos estabelecimentos onde tem acesso
- ✅ Pode editar apenas campanhas que criou
- ✅ Pode deletar apenas campanhas que criou
- ✅ Pode alterar status apenas de campanhas que criou
- ⚠️ Precisa de permissão `can_create_campaigns` para criar
- ⚠️ Precisa de permissão `can_set_custom_points` para definir pontos personalizados

### **User (Cliente)**
- ✅ Pode visualizar campanhas públicas
- ❌ Não pode criar campanhas
- ❌ Não pode editar campanhas
- ❌ Não pode deletar campanhas
- ❌ Não pode alterar status de campanhas

---

## 📋 Endpoints Disponíveis

### **Visualização**
- `GET /api/campaigns` - Listar todas as campanhas
- `GET /api/campaigns/:id` - Buscar campanha por ID
- `GET /api/campaigns/establishment/:establishmentId` - Buscar campanhas de um estabelecimento

### **Criação**
- `POST /api/campaigns` - Criar nova campanha

### **Edição**
- `PUT /api/campaigns/:id` - Atualizar campanha
- `POST /api/campaigns/:id/status` - Alterar status da campanha
- `POST /api/campaigns/:id/activate` - Ativar campanha (legado)
- `POST /api/campaigns/:id/deactivate` - Desativar campanha (legado)

### **Exclusão**
- `DELETE /api/campaigns/:id` - Deletar campanha

---

## ✅ Status da Implementação

- ✅ **Visualizar**: Implementado e funcionando
- ✅ **Editar**: Implementado e funcionando
- ✅ **Deletar**: Implementado e funcionando (agora merchants também podem deletar suas campanhas)
- ✅ **Validações**: Implementadas
- ✅ **Permissões**: Implementadas corretamente

---

## 🎯 Exemplos de Uso

### **1. Merchant visualiza suas campanhas**
```bash
curl -X GET "http://localhost:8000/api/campaigns" \
  -H "Authorization: Bearer <token>"
```

### **2. Merchant edita sua campanha**
```bash
curl -X PUT "http://localhost:8000/api/campaigns/1" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_name": "Campanha Atualizada",
    "status": "Activo"
  }'
```

### **3. Merchant deleta sua campanha**
```bash
curl -X DELETE "http://localhost:8000/api/campaigns/1" \
  -H "Authorization: Bearer <token>"
```

### **4. Admin deleta qualquer campanha**
```bash
curl -X DELETE "http://localhost:8000/api/campaigns/1" \
  -H "Authorization: Bearer <admin_token>"
```

---

## 📝 Notas Importantes

1. **Permissões**: Merchants só podem gerenciar campanhas que criaram
2. **Validações**: Sistema valida transições de status e unicidade de nomes
3. **Auditoria**: Todas as operações são registradas nos logs
4. **Segurança**: Validação de permissões em todas as operações









