# 📍 Onde o QR Code é Guardado

## 📋 Resumo

Documentação sobre **onde e como** o QR code do estabelecimento é armazenado.

---

## 💾 Armazenamento Atual

### **1. Banco de Dados (PostgreSQL/MySQL)**

O QR code é armazenado como uma **string/texto** na coluna `qr_code` da tabela `establishments`.

#### **Estrutura da Tabela:**
```sql
CREATE TABLE establishments (
    establishment_id SERIAL PRIMARY KEY,  -- ou est_id VARCHAR(64)
    name TEXT NOT NULL,
    type TEXT,
    -- ... outros campos ...
    qr_code VARCHAR(100) UNIQUE,  -- ← QR CODE ARMAZENADO AQUI
    -- ... outros campos ...
);
```

#### **Localização no Banco:**
- **Tabela:** `establishments`
- **Coluna:** `qr_code`
- **Tipo:** `VARCHAR(100)` ou `TEXT`
- **Constraint:** `UNIQUE` (garante que cada QR code é único)
- **Valor:** String formatada (ex: `MAKTUBIA_LOJA_5_A1B2C3D4`)

---

## 🔍 Exemplo de Dados

### **Registro na Tabela `establishments`:**

```sql
SELECT establishment_id, name, qr_code FROM establishments WHERE establishment_id = 5;

-- Resultado:
establishment_id | name                | qr_code
-----------------|---------------------|--------------------------
5               | Restaurante Sabor   | MAKTUBIA_LOJA_5_A1B2C3D4
```

---

## 📂 Onde Fica o QR Code

### **1. Banco de Dados (PostgreSQL/MySQL)**

✅ **QR Code String:** Armazenado na coluna `qr_code` da tabela `establishments`

**Acesso via API:**
```bash
GET /api/establishments/5

# Resposta inclui:
{
  "id": 5,
  "name": "Restaurante Sabor",
  "qrCode": "MAKTUBIA_LOJA_5_A1B2C3D4",  ← QR CODE AQUI
  ...
}
```

---

## ❌ Imagem Física do QR Code

**IMPORTANTE:** Atualmente, **NÃO é gerada uma imagem física** do QR code (arquivo PNG, JPG, etc.).

### **O que existe:**
- ✅ **String do QR code** no banco de dados (`qr_code`)
- ✅ **Função de geração** de string (`generateQRCode()`)
- ✅ **Validação de formato** (`isValidQRCodeFormat()`)
- ✅ **Extração de ID** (`extractEstablishmentId()`)

### **O que NÃO existe:**
- ❌ **Geração de imagem** QR code (PNG, JPG, SVG)
- ❌ **Armazenamento de arquivo** de imagem
- ❌ **Upload/download** de imagem QR code
- ❌ **Diretório de imagens** QR code

---

## 🔧 Se Precisar Gerar Imagem do QR Code

### **Opção 1: Gerar Imagem quando Necessário (On-Demand)**

Gerar a imagem QR code quando o frontend solicitar:

```javascript
// Exemplo usando biblioteca 'qrcode'
const QRCode = require('qrcode');
const path = require('path');

async function generateQRCodeImage(qrCodeString, establishmentId) {
    const qrCodeImagePath = path.join('uploads', 'qr-codes', `qr_${establishmentId}.png`);
    
    await QRCode.toFile(qrCodeImagePath, qrCodeString, {
        errorCorrectionLevel: 'H',
        type: 'png',
        width: 300
    });
    
    return `/api/uploads/qr-codes/qr_${establishmentId}.png`;
}
```

### **Opção 2: Gerar Imagem ao Criar Estabelecimento**

Gerar e salvar a imagem automaticamente quando criar o estabelecimento:

```javascript
// No createEstablishment
const qrCodeString = generateQRCode(realEstablishmentId, type || 'Loja');

// Gerar imagem
const qrCodeImageUrl = await generateQRCodeImage(qrCodeString, realEstablishmentId);

// Salvar URL da imagem no banco (nova coluna: qr_code_image_url)
await Establishment.update(realEstablishmentId, {
    qr_code: qrCodeString,
    qr_code_image_url: qrCodeImageUrl
});
```

---

## 📊 Estrutura Atual vs. Proposta (Com Imagem)

### **Atual (SOMENTE STRING):**
```
estabelecimentos
├── establishment_id: 5
├── name: "Restaurante Sabor"
├── qr_code: "MAKTUBIA_LOJA_5_A1B2C3D4"  ← Apenas string
└── ...
```

### **Proposta (COM IMAGEM):**
```
estabelecimentos
├── establishment_id: 5
├── name: "Restaurante Sabor"
├── qr_code: "MAKTUBIA_LOJA_5_A1B2C3D4"  ← String
├── qr_code_image_url: "/api/uploads/qr-codes/qr_5.png"  ← URL da imagem
└── ...

uploads/
└── qr-codes/
    ├── qr_5.png  ← Arquivo de imagem
    ├── qr_10.png
    └── ...
```

---

## 🔍 Como Acessar o QR Code

### **1. Via API:**

```bash
# Buscar estabelecimento e obter QR code string
GET /api/establishments/5

# Resposta:
{
  "id": 5,
  "name": "Restaurante Sabor",
  "qrCode": "MAKTUBIA_LOJA_5_A1B2C3D4"
}
```

### **2. Via Banco de Dados:**

```sql
SELECT qr_code FROM establishments WHERE establishment_id = 5;
```

### **3. Para Gerar Imagem do QR Code (se necessário):**

O frontend pode usar uma biblioteca como `qrcode.js` ou `qrcode.react` para gerar a imagem visualmente:

```javascript
import QRCode from 'qrcode.react';

<QRCode value="MAKTUBIA_LOJA_5_A1B2C3D4" size={200} />
```

---

## ✅ Resumo

| Item | Status | Localização |
|------|--------|-------------|
| **String QR Code** | ✅ Armazenada | `establishments.qr_code` (banco de dados) |
| **Imagem QR Code** | ❌ Não gerada | - |
| **Arquivo Físico** | ❌ Não existe | - |
| **URL de Imagem** | ❌ Não existe | - |

---

## 📝 Nota Importante

Atualmente, o sistema armazena apenas a **string do QR code** no banco de dados. Para gerar uma **imagem visual** do QR code:

1. **Opção 1:** Frontend gera a imagem usando a string (`qrcode.react`, `qrcode.js`, etc.)
2. **Opção 2:** Backend gera e salva a imagem quando criar o estabelecimento
3. **Opção 3:** Backend gera a imagem sob demanda (endpoint `/api/establishments/:id/qr-code-image`)

---

## 🎯 Recomendação

Se você precisa de uma **imagem física** do QR code:

1. Instalar biblioteca de geração de QR code: `npm install qrcode`
2. Criar endpoint para gerar imagem: `GET /api/establishments/:id/qr-code-image`
3. Gerar imagem sob demanda ou ao criar estabelecimento
4. Salvar em `/uploads/qr-codes/` ou similar
5. Adicionar coluna `qr_code_image_url` na tabela `establishments` (opcional)

Quer que eu implemente a geração de imagem do QR code?




