# Tipos de Campanhas Padrão Maktubia Loyalty

## 📋 Lista dos 8 Tipos Padrão

1. **RewardType_Auto** - Oferta Automática
2. **RewardType_Draw** - Sorteio
3. **RewardType_Exchange** - Troca
4. **RewardType_Quiz** - Questões
5. **RewardType_Referral** - Indicação
6. **RewardType_Challenge** - Desafio
7. **RewardType_Party** - Votação
8. **RewardType_Voucher** - Cabaz Digital / Benefício Corporativo

## 🔧 Mudanças Implementadas

### 1. Schema de Validação (`utils/campaignSchema.js`)

- **Campo `type` agora é OBRIGATÓRIO** na criação de campanhas
- Aceita apenas os 8 tipos padrão listados acima
- Na atualização, o campo `type` é opcional (mas se fornecido, deve ser um dos 7 tipos válidos)

### 2. Utilitário de Tipos (`utils/campaignTypes.js`)

Novo arquivo criado com:
- Constantes para cada tipo de campanha
- Labels (nomes amigáveis) em português
- Descrições de cada tipo
- Funções auxiliares:
  - `isValidCampaignType(type)` - Valida se um tipo é válido
  - `getCampaignTypeLabel(type)` - Retorna o label do tipo
  - `getCampaignTypeDescription(type)` - Retorna a descrição do tipo
  - `getAllCampaignTypes()` - Lista todos os tipos disponíveis

### 3. Modelo de Campanhas (`models/CampaignsModel.js`)

- Validação do tipo de campanha antes de inserir no banco
- Se o tipo não for fornecido ou for inválido, usa `RewardType_Auto` como padrão

### 4. Controller de Campanhas (`controllers/campaignsController.js`)

- Função `formatCampaign` agora inclui:
  - `typeLabel`: Nome amigável do tipo (ex: "Oferta Automática")
  - `typeDescription`: Descrição do tipo
- Novo endpoint: `GET /api/campaigns/types` - Lista todos os tipos disponíveis

### 5. Rotas (`routes/campaignsRoutes.js`)

- Nova rota: `GET /api/campaigns/types` - Lista tipos de campanha disponíveis

## 📡 Endpoints

### Listar Tipos de Campanha

**GET /api/campaigns/types**

**Resposta:**
```json
{
  "success": true,
  "data": [
    {
      "value": "RewardType_Auto",
      "label": "Oferta Automática",
      "description": "Ganha automaticamente pontos ao aderir à campanha"
    },
    {
      "value": "RewardType_Draw",
      "label": "Sorteio",
      "description": "Cada compra acima de um valor dá-te uma chance de ganhar prémios"
    },
    {
      "value": "RewardType_Exchange",
      "label": "Troca",
      "description": "Troca os teus pontos por produtos, serviços ou descontos"
    },
    {
      "value": "RewardType_Quiz",
      "label": "Questões",
      "description": "Responde às perguntas no app e ganha pontos por cada resposta certa"
    },
    {
      "value": "RewardType_Referral",
      "label": "Indicação",
      "description": "Convida amigos a registarem-se e ganha pontos por cada um"
    },
    {
      "value": "RewardType_Challenge",
      "label": "Desafio",
      "description": "Completa desafios e ganha pontos e prémios especiais"
    },
    {
      "value": "RewardType_Party",
      "label": "Votação",
      "description": "Vota e participa em eventos sociais, ganha pontos por participar"
    },
    {
      "value": "RewardType_Voucher",
      "label": "Cabaz Digital / Benefício Corporativo",
      "description": "Recebe vouchers digitais ou benefícios corporativos como recompensa"
    }
  ]
}
```

### Criar Campanha

**POST /api/campaigns**

**Body (exemplo):**
```json
{
  "type": "RewardType_Auto",
  "campaign_name": "Boas-Vindas Mimos",
  "sponsor_name": "Restaurante Mimos",
  "establishment_id": 321,
  "total_points_limit": 10000,
  "valid_from": "2025-11-10T00:00:00Z",
  "valid_until": "2025-11-20T23:59:59Z",
  "status": "Activo"
}
```

**Resposta (exemplo):**
```json
{
  "success": true,
  "data": {
    "id": "...",
    "type": "RewardType_Auto",
    "typeLabel": "Oferta Automática",
    "typeDescription": "Ganha automaticamente pontos ao aderir à campanha",
    "campaignName": "Boas-Vindas Mimos",
    ...
  }
}
```

## ⚠️ Notas Importantes

1. **Campo `type` é OBRIGATÓRIO** na criação de novas campanhas
2. **Tipos antigos** (como `points`, `points_per_spend`, `visit_based`, etc.) **não são mais aceitos** em novas campanhas
3. **Campanhas existentes** com tipos antigos continuarão funcionando, mas devem ser migradas para os novos tipos
4. **Tipo padrão**: Se não especificado ou inválido, o sistema usa `RewardType_Auto` (Oferta Automática)

## 🔄 Migração de Tipos Antigos

Para migrar campanhas existentes com tipos antigos para os novos tipos:

- `points` ou `points_per_spend` → `RewardType_Auto` ou `RewardType_Challenge`
- `visit_based` → `RewardType_Challenge`
- `reward_redemption` → `RewardType_Exchange`
- `buy_get` → `RewardType_Exchange`
- `vip_treatment` → `RewardType_Auto`

## 📝 Exemplos de Uso

### Exemplo 1: Oferta Automática (RewardType_Auto)
```json
{
  "type": "RewardType_Auto",
  "campaign_name": "Boas-Vindas Mimos",
  "sponsor_name": "Restaurante Mimos",
  "total_points_limit": 10000,
  "valid_until": "2025-11-20T23:59:59Z"
}
```

### Exemplo 2: Sorteio (RewardType_Draw)
```json
{
  "type": "RewardType_Draw",
  "campaign_name": "Sorteio Mimos da Semana",
  "sponsor_name": "Restaurante Mimos",
  "min_spend": 500,
  "valid_until": "2025-11-20T23:59:59Z"
}
```

### Exemplo 3: Troca (RewardType_Exchange)
```json
{
  "type": "RewardType_Exchange",
  "campaign_name": "Pontos que Viram Sabores",
  "sponsor_name": "Restaurante Mimos",
  "reward_points_cost": 1000,
  "reward_description": "Sobremesa grátis",
  "valid_until": "2025-11-20T23:59:59Z"
}
```

