# Gitea Setup für Florale Emotion Ticket-System

## Überblick

Dieses Dokument beschreibt die Einrichtung von Gitea als Ticket-System für Florale Emotion. Gitea wird verwendet, um Kundenanfragen automatisch als Issues zu verwalten und dem Team (Veronika und Corinna) eine strukturierte Arbeitsweise zu ermöglichen.

## Gitea Installation

### Voraussetzungen
- Linux Server (Ubuntu/Debian empfohlen)
- Docker und Docker Compose
- Domain oder Subdomain (z.B. tickets.florale-emotion.de)
- SSL-Zertifikat

### Installation mit Docker Compose

```yaml
# docker-compose.yml
version: "3.8"

services:
  gitea:
    image: gitea/gitea:latest
    container_name: florale-emotion-gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea_password
    restart: always
    networks:
      - gitea
    volumes:
      - gitea_data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea_password
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - postgres_data:/var/lib/postgresql/data

networks:
  gitea:
    external: false

volumes:
  gitea_data:
  postgres_data:
```

### Erste Einrichtung

1. **Gitea starten:**
```bash
docker-compose up -d
```

2. **Initial Setup über Web-Interface:**
   - Öffne http://your-domain:3000
   - Wähle PostgreSQL als Datenbank
   - Erstelle Admin-Account

3. **SSL einrichten (mit nginx):**
```nginx
server {
    listen 443 ssl http2;
    server_name tickets.florale-emotion.de;
    
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

## Benutzer-Setup

### Admin-Account
- **Username:** admin
- **E-Mail:** admin@florale-emotion.de
- **Rolle:** Site Administrator

### Team-Accounts

#### Veronika
```bash
# Über Gitea Admin Panel erstellen
Username: veronika
E-Mail: veronika@florale-emotion.de
Rolle: User (mit Admin-Rechten für florale-emotion Organisation)
```

#### Corinna
```bash
# Über Gitea Admin Panel erstellen
Username: corinna  
E-Mail: corinna@florale-emotion.de
Rolle: User (mit Admin-Rechten für florale-emotion Organisation)
```

### Organisation erstellen

1. **Organisation "florale-emotion" erstellen:**
   - Name: florale-emotion
   - Beschreibung: Florale Emotion - Blumen für besondere Momente
   - Sichtbarkeit: Privat

2. **Team-Mitglieder hinzufügen:**
   - Veronika: Owner
   - Corinna: Owner

## Repository Setup

### Tickets Repository

```bash
# Repository erstellen
Name: tickets
Beschreibung: Kundenanfragen und Ticket-Management
Sichtbarkeit: Privat
Template: Leer
README: Ja
.gitignore: Keine
Lizenz: Keine
```

### Issue Templates

#### 1. Kundenanfrage Template
```markdown
<!-- .gitea/issue_template/kundenanfrage.md -->
---
name: Kundenanfrage
about: Template für neue Kundenanfragen
title: 'Neue Anfrage: [EVENT_TYPE] - [CUSTOMER_NAME]'
labels: 'kunde-anfrage'
assignees: 'veronika, corinna'
---

## Kundeninformationen
- **Name:** 
- **E-Mail:** 
- **Telefon:** 
- **Eingegangen am:** 

## Event-Details
- **Art des Events:** 
- **Gewünschtes Datum:** 
- **Anzahl Gäste:** 
- **Budget:** 
- **Ort:** 

## Nachricht
<!-- Kundennachricht hier einfügen -->

## Nächste Schritte
- [ ] Erstberatung terminieren
- [ ] Angebot erstellen
- [ ] Kunde kontaktieren

## Notizen
<!-- Interne Notizen hier -->
```

#### 2. Hochzeit Template
```markdown
<!-- .gitea/issue_template/hochzeit.md -->
---
name: Hochzeitsanfrage
about: Spezifisches Template für Hochzeitsanfragen
title: 'Hochzeit: [BRIDE_NAME] & [GROOM_NAME] - [DATE]'
labels: 'hochzeit, kunde-anfrage'
assignees: 'veronika'
---

## Brautpaar
- **Braut:** 
- **Bräutigam:** 
- **Hochzeitsdatum:** 
- **Location:** 

## Gewünschte Services
- [ ] Brautstrauß
- [ ] Anstecker
- [ ] Kirchenschmuck
- [ ] Tischdekorationen
- [ ] Traubogen
- [ ] Autoschmuck

## Stil & Farben
- **Farbschema:** 
- **Stil:** 
- **Lieblings-Blumen:** 

## Budget & Timeline
- **Budget:** 
- **Beratungstermin:** 
- **Deadline:** 

## Checkliste
- [ ] Erstberatung
- [ ] Angebot erstellt
- [ ] Auftrag bestätigt
- [ ] Materialien bestellt
- [ ] Arrangements erstellt
- [ ] Lieferung/Aufbau
- [ ] Nachbetreuung
```

### Labels Setup

```bash
# Standard Labels
kunde-anfrage (blau) - Neue Kundenanfrage
hochzeit (rosa) - Hochzeitsbezogen
beerdigung (grau) - Trauerfloristik
corporate (grün) - Firmenevent
privat (gelb) - Private Feier

# Status Labels  
neu (rot) - Neue Anfrage
in-bearbeitung (orange) - Wird bearbeitet
angebot-erstellt (blau) - Angebot gesendet
bestätigt (grün) - Auftrag bestätigt
abgeschlossen (dunkelgrün) - Erfolgreich abgeschlossen
storniert (grau) - Storniert

# Priorität
hoch (rot) - Hohe Priorität
mittel (gelb) - Mittlere Priorität  
niedrig (grün) - Niedrige Priorität

# Team
veronika (lila) - Veronika zugewiesen
corinna (türkis) - Corinna zugewiesen
```

### Milestones

```bash
# Quartalsweise Milestones
Q1 2024 - Erstes Quartal 2024
Q2 2024 - Zweites Quartal 2024
Q3 2024 - Drittes Quartal 2024
Q4 2024 - Viertes Quartal 2024

# Event-spezifische Milestones
Hochzeitssaison 2024 - Mai bis September
Weihnachtsgeschäft 2024 - November bis Dezember
```

## API Integration

### API Token erstellen

1. **Persönlichen Access Token generieren:**
   - Gitea → Settings → Applications → Generate New Token
   - Name: "Website Integration"
   - Scopes: repo, write:issue

2. **Token in Backend konfigurieren:**
```javascript
// backend/.env
GITEA_URL=https://tickets.florale-emotion.de
GITEA_TOKEN=your_generated_token_here
```

### Automatische Issue-Erstellung

Das Backend erstellt automatisch Issues aus Website-Anfragen:

```javascript
// Beispiel Issue-Erstellung
const issue = {
  title: `Neue Anfrage: ${eventType} - ${firstName} ${lastName}`,
  body: issueBody,
  labels: ['kunde-anfrage', eventType.toLowerCase()],
  assignees: ['veronika', 'corinna']
};
```

## Workflow

### 1. Kundenanfrage eingeht
- Automatisches Issue wird erstellt
- E-Mail-Benachrichtigung an Team
- Status: "neu"

### 2. Erste Bearbeitung
- Team-Mitglied nimmt Issue an
- Status ändern zu "in-bearbeitung"
- Erstberatung terminieren

### 3. Angebot erstellen
- Angebot als Kommentar hinzufügen
- Status ändern zu "angebot-erstellt"
- Kunde kontaktieren

### 4. Auftrag bestätigt
- Status ändern zu "bestätigt"
- Milestone zuweisen
- Detailplanung beginnen

### 5. Projekt abgeschlossen
- Status ändern zu "abgeschlossen"
- Issue schließen
- Kundenfeedback einholen

## E-Mail-Benachrichtigungen

### Gitea E-Mail Setup

```ini
# app.ini Konfiguration
[mailer]
ENABLED = true
HOST = smtp.mailbox.org:587
FROM = tickets@florale-emotion.de
USER = tickets@florale-emotion.de
PASSWD = your_email_password
SKIP_VERIFY = false
USE_SENDMAIL = false
SENDMAIL_PATH = sendmail
SENDMAIL_ARGS = 
SENDMAIL_TIMEOUT = 5m
```

### Benachrichtigungs-Einstellungen

- **Neue Issues:** Sofortige Benachrichtigung
- **Kommentare:** Sofortige Benachrichtigung  
- **Status-Änderungen:** Sofortige Benachrichtigung
- **Zuweisungen:** Sofortige Benachrichtigung

## Backup & Wartung

### Automatisches Backup

```bash
#!/bin/bash
# backup-gitea.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/gitea"

# Gitea Daten sichern
docker exec florale-emotion-gitea gitea dump -c /data/gitea/conf/app.ini

# Backup verschieben
mv gitea-dump-*.zip $BACKUP_DIR/gitea-backup-$DATE.zip

# Alte Backups löschen (älter als 30 Tage)
find $BACKUP_DIR -name "gitea-backup-*.zip" -mtime +30 -delete
```

### Cron Job einrichten

```bash
# Täglich um 2 Uhr morgens
0 2 * * * /path/to/backup-gitea.sh
```

## Monitoring

### Gitea Health Check

```bash
#!/bin/bash
# health-check.sh

GITEA_URL="https://tickets.florale-emotion.de"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $GITEA_URL)

if [ $STATUS -eq 200 ]; then
    echo "Gitea is running"
else
    echo "Gitea is down - Status: $STATUS"
    # Benachrichtigung senden
fi
```

### Log Monitoring

```bash
# Gitea Logs überwachen
docker logs -f florale-emotion-gitea

# Wichtige Log-Events
grep -i error /var/log/gitea/gitea.log
grep -i "failed login" /var/log/gitea/gitea.log
```

## Sicherheit

### Sicherheits-Einstellungen

1. **Starke Passwörter:** Mindestens 12 Zeichen
2. **2FA aktivieren:** Für alle Admin-Accounts
3. **IP-Whitelist:** Nur bekannte IPs erlauben
4. **Regular Updates:** Gitea regelmäßig aktualisieren
5. **SSL/TLS:** Immer verschlüsselte Verbindungen

### Firewall-Regeln

```bash
# UFW Firewall
ufw allow 22/tcp    # SSH
ufw allow 80/tcp    # HTTP (Redirect)
ufw allow 443/tcp   # HTTPS
ufw deny 3000/tcp   # Gitea direkt blockieren
```

## Troubleshooting

### Häufige Probleme

#### 1. Gitea startet nicht
```bash
# Logs prüfen
docker logs florale-emotion-gitea

# Container neu starten
docker-compose restart gitea
```

#### 2. Datenbank-Verbindung fehlgeschlagen
```bash
# PostgreSQL Status prüfen
docker logs florale-emotion-gitea-db

# Datenbank neu starten
docker-compose restart db
```

#### 3. E-Mail-Versand funktioniert nicht
```bash
# SMTP-Einstellungen prüfen
# app.ini Konfiguration überprüfen
# Firewall-Regeln für Port 587 prüfen
```

### Support-Kontakte

- **Gitea Dokumentation:** https://docs.gitea.io/
- **Community Forum:** https://discourse.gitea.io/
- **GitHub Issues:** https://github.com/go-gitea/gitea/issues