Files
date-wizard/README.md
T

128 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Date-Wizard 💕
Eine spielerische Web-App ("Choose Your Own Adventure") zum Planen gemeinsamer Dates – mit mobilem Design, dynamischen Aktivitäten & Terminen sowie einem Go-Microservice zum E-Mail-Versand der Reservierung.
---
## 📁 Projektstruktur
```text
datetest/
├── config/ # Persistente JSON-Konfiguration und Buchungen
│ ├── appsettings.json # Admin-Passwort und optionale Namen
│ ├── activities.json # Aktivitäten
│ ├── dates_available.json # Verfügbare Termine
│ └── dates_booked.json # Strukturierte Buchungen
├── public/ # Statische Webseiten & Assets
│ ├── index.html # Startseite ("Willst du mit mir gehen?")
│ ├── datetime.html/.js # Datumsauswahl (Kalender)
│ ├── activity.html/.js # Aktivitätsauswahl
│ ├── name.html/.js # Namensauswahl ("Wer bist du?")
│ └── checkout.html/.js # Zusammenfassung & Bestätigung
├── main.go # Go-Microservice (HTTP-Server & SMTP E-Mail)
├── go.mod # Go-Moduldefinition
├── Dockerfile # Multi-Stage Dockerfile (Alpine Runtime)
├── docker-compose.yml # Docker-Compose mit Traefik Labels
├── .env.example # Vorlage für Umgebungsvariablen
└── .env # Lokale/Produktive Umgebungsvariablen (nicht ins Git committen)
```
---
## ⚙️ Konfiguration
### 1. E-Mail & Server `.env` anlegen
Kopiere `.env.example` zu `.env`:
```bash
cp .env.example .env
```
Trage in der `.env` deine Server- und SMTP-Zugangsdaten ein:
| Variable | Beschreibung | Beispiel |
| :--- | :--- | :--- |
| `PORT` | HTTP-Port des Go-Servers | `8080` |
| `WEB_DIR` | Verzeichnis der statischen Assets | `public` |
| `SMTP_HOST` | Postausgangsserver (SMTP) | `mail.example.com` |
| `SMTP_PORT` | SMTP-Port (Standard meist 587 oder 465) | `587` |
| `SMTP_USER` | Benutzername / E-Mail für SMTP-Auth | `absender@example.com` |
| `SMTP_PASS` | Passwort des SMTP-Kontos | `secretpassword` |
| `TO_EMAIL` | Ziel-Adresse für eingegangene Date-Anfragen | `ziel@example.com` |
| `FROM_EMAIL` | Absender-Adresse für die Benachrichtigung | `absender@example.com` |
*(Hinweis: Wenn `SMTP_HOST` oder `TO_EMAIL` leer bleiben, läuft der Server im Testmodus ohne E-Mail-Versand.)*
### 2. Einstellungen und Daten
Die persistenten Daten liegen in getrennten JSON-Dateien:
- **`adminPassword`**: Passwort für die Terminverwaltung unter `/admin`. Ändere den Standardwert `change-me`, bevor du die Anwendung veröffentlichst.
- **`activities.json`**: Liste von Objekten mit `name`, `icon` (Unicode Emoji), `type` (`short`, `long` oder `custom`) und optional `disabled` (`true` blendet die Aktivität vorübergehend aus).
- **`dates_available.json`**: Liste von verfügbaren Tagen mit `date` (`YYYY-MM-DD`) und `type` (`short` oder `long`).
- **`dates_booked.json`**: Strukturierte Buchungen mit `bookedAt`, `date`, `dateType`, `name` und den ausgewählten Aktivitäten inklusive Name, Typ und Icon.
- **`names`**: Optional vordefinierte Namen zur Auswahl (ist die Liste leer, wird die Namensseite übersprungen).
Die Termin- und Aktivitätenlisten lassen sich über die passwortgeschützte Verwaltung unter `http://localhost:8080/admin` bearbeiten. Das Passwort bleibt dabei auf dem Server und wird nicht an Besucher ausgeliefert.
Bei Docker Compose wird `/docker/data/date` als ein Volume nach `/app/config` eingebunden. Die vier JSON-Dateien müssen dort vor dem ersten Start vorhanden sein. Du kannst sie aus dem Projektordner initialisieren:
```bash
mkdir -p /docker/data/date
cp config/appsettings.json /docker/data/date/appsettings.json
cp config/activities.json /docker/data/date/activities.json
cp config/dates_available.json /docker/data/date/dates_available.json
cp config/dates_booked.json /docker/data/date/dates_booked.json
```
Wenn bisher `/docker/data/date/booked_dates.json` verwendet wurde, übernimm die alten Buchungsdaten zuerst in `dates_booked.json`. Das neue Format speichert Buchungen als Objekte statt als reine Datumsstrings.
---
## 🚀 Inbetriebnahme
### Option A: Mit Docker Compose (Empfohlen)
1. `.env` wie oben beschrieben anpassen.
2. Container erstellen und starten:
```bash
docker-compose up -d --build
```
3. Die Anwendung ist unter `http://localhost:8080` erreichbar.
#### Traefik / Reverse Proxy
`docker-compose.yml` enthält bereits Traefik-Labels. Passe bei Bedarf die Domain an:
```yaml
- "traefik.http.routers.date-wizard.rule=Host(`date.deine-domain.de`)"
```
---
### Option B: Direkt mit Go (Lokal)
#### Voraussetzungen
- Installed Go SDK (Version 1.22 oder neuer)
1. Abhängigkeiten prüfen & kompilieren:
```bash
go run main.go
```
2. Die Anwendung startet auf dem in `.env` definierten Port (z. B. `http://localhost:8080`).
---
## 📱 Ablauf der Anwendung
1. **Startseite (`index.html`)**: Spielerische Frage mit Ja/Nein-Interaktion.
2. **Datumsauswahl (`datetime.html`)**: Interaktiver Kalender mit Markierung von verfügbaren Tagen (`short`/`long`).
3. **Aktivitätsauswahl (`activity.html`)**: Auswahl passender Aktivitäten je nach verbleibender Zeit am gewählten Tag.
4. **Namensauswahl (`name.html`)**: Abfrage "Wer bist du?".
5. **Checkout & Bestätigung (`checkout.html`)**: Finale Übersicht und Absenden der Reservierung (überträgt Daten an `/api/submit` und löst den E-Mail-Versand aus).