# Automatische E-Mail-Synchronisation

Die automatische E-Mail-Synchronisation ruft regelmäßig E-Mails von allen konfigurierten Standorten ab und erstellt automatisch Buchungen aus Ninjaforms-Anfragen.

## Cron Endpoint

**URL:** `/api/cron/email-sync`  
**Methode:** `GET`  
**Authentifizierung:** Bearer Token (CRON_SECRET)

### Beispiel-Aufruf

```bash
curl -X GET https://your-domain.com/api/cron/email-sync \
  -H "Authorization: Bearer YOUR_CRON_SECRET"
```

### Antwort

```json
{
  "totalLocations": 5,
  "totalEmails": 12,
  "totalBookings": 8,
  "results": [
    {
      "locationId": "...",
      "locationName": "Lübeck",
      "success": true,
      "newEmails": 3,
      "newBookings": 2,
      "errors": []
    }
  ]
}
```

## Einrichtung

### 1. Umgebungsvariable setzen

Füge in `.env` hinzu:

```
CRON_SECRET="your-secure-random-string-here"
```

Generiere einen sicheren Zufallsstring:

```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```

### 2. Vercel Cron Jobs (empfohlen für Vercel Hosting)

Erstelle `vercel.json`:

```json
{
  "crons": [
    {
      "path": "/api/cron/email-sync",
      "schedule": "*/15 * * * *"
    }
  ]
}
```

Dies führt die Synchronisation alle 15 Minuten aus.

**Wichtig:** Vercel Cron Jobs senden automatisch den `Authorization` Header mit dem in den Vercel Environment Variables gespeicherten `CRON_SECRET`.

Deployment:
1. Gehe zu Vercel Dashboard → Settings → Environment Variables
2. Füge `CRON_SECRET` mit deinem generierten Wert hinzu
3. Deploy das Projekt

### 3. Externe Cron Services

#### Cron-job.org

1. Registriere dich bei https://cron-job.org
2. Erstelle einen neuen Cronjob:
   - **URL:** `https://your-domain.com/api/cron/email-sync`
   - **Schedule:** `*/15 * * * *` (alle 15 Minuten)
   - **Headers:** 
     - `Authorization: Bearer YOUR_CRON_SECRET`
3. Aktiviere den Job

#### EasyCron

1. Registriere dich bei https://www.easycron.com
2. Erstelle einen neuen Cron Job:
   - **URL:** `https://your-domain.com/api/cron/email-sync`
   - **Cron Expression:** `*/15 * * * *`
   - **HTTP Header:** `Authorization: Bearer YOUR_CRON_SECRET`
3. Aktiviere den Job

### 4. Eigener Server (systemd Timer)

Erstelle `/etc/systemd/system/savethemoment-sync.service`:

```ini
[Unit]
Description=SaveTheMoment Email Sync
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -X GET https://your-domain.com/api/cron/email-sync -H "Authorization: Bearer YOUR_CRON_SECRET"
```

Erstelle `/etc/systemd/system/savethemoment-sync.timer`:

```ini
[Unit]
Description=Run SaveTheMoment Email Sync every 15 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=15min

[Install]
WantedBy=timers.target
```

Aktiviere den Timer:

```bash
sudo systemctl daemon-reload
sudo systemctl enable savethemoment-sync.timer
sudo systemctl start savethemoment-sync.timer
```

Status prüfen:

```bash
sudo systemctl status savethemoment-sync.timer
sudo journalctl -u savethemoment-sync.service
```

## Manuelle Synchronisation

Admins können jederzeit eine manuelle Synchronisation auslösen:

1. Gehe zu **Dashboard → Standorte**
2. Klicke bei einem Standort auf **"E-Mails abrufen"**
3. Die Synchronisation läuft sofort und zeigt das Ergebnis an

## Zeitpläne

Empfohlene Synchronisationsintervalle:

- **Hochsaison:** Alle 10-15 Minuten
- **Normalbetrieb:** Alle 30 Minuten
- **Ruhige Zeit:** Jede Stunde

## Fehlerbehandlung

Der Cron-Endpoint:
- Loggt alle Fehler in der Console
- Synchronisiert alle Standorte unabhängig voneinander
- Setzt die Synchronisation fort, auch wenn ein Standort fehlschlägt
- Gibt detaillierte Fehlerinformationen zurück

## Überwachung

Überwache die Logs:

```bash
# Vercel
vercel logs --follow

# Next.js Development
npm run dev

# Production (PM2)
pm2 logs atlas
```

## Sicherheit

- Der `CRON_SECRET` muss geheim bleiben
- Verwende einen starken, zufälligen String (min. 32 Zeichen)
- Speichere das Secret niemals im Code-Repository
- Rotiere das Secret regelmäßig (z.B. alle 90 Tage)
