# MuslimOS / EhliSünnet App: Datenstruktur

Die App speichert Daten in `/DATA/AppData/muslimos/data/db.json`.

## Top-Level Abschnitte

- `tahajjud`: tägliche Tahajjud-Einträge mit `rakats`, `time`, `note`
- `sunnah`: täglich erledigte Sünnet-/Nafile-Namaz-Keys
- `evrad`: tägliche Evrad mit `short` und `long`
- `hifz`: Kuran-Hifz-Fortschritt (Sure → Anzahl Wiederholungen)
- `prayers`: täglich abgehakte Fard-Gebete — `{ "YYYY-MM-DD": ["fajr","dhuhr","asr","maghrib","isha"] }`
- `prayerTimesCache`: gecachte Gebetszeiten — `{ date: "YYYY-MM-DD", timings: { Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha } }`

## Sünnet- und Nafile-Namaz-Liste

Statisch definiert in `/DATA/AppData/muslimos/app/public/app.js`:

### Müekked Sünnetler (stark empfohlen)

| Key | Name | Zeitpunkt | Rekât |
|-----|------|-----------|-------|
| sabah | Sabah sünneti | vor Fajr-Fard | 2 |
| ogle_once | Öğle ilk sünneti | vor Dhuhr-Fard | 4 |
| ogle_son | Öğle son sünneti | nach Dhuhr-Fard | 2 |
| aksam | Akşam sünneti | nach Maghrib-Fard | 2 |
| yatsi_son | Yatsı son sünneti | nach Ishaa-Fard | 2 |

### Gayr-i Müekked

| Key | Name | Zeitpunkt | Rekât |
|-----|------|-----------|-------|
| ikindi | İkindi sünneti | vor Asr-Fard | 4 |
| yatsi_once | Yatsı ilk sünneti | vor Ishaa-Fard | 4 |

### Nafile Namazlar

| Key | Name | Zeitpunkt | Rekât |
|-----|------|-----------|-------|
| kusluk | Kuşluk (Duhâ) | nach Sonnenaufgang | 2–8 |
| evvabin | Evvâbîn | nach Maghrib | 6 |
| israk | İşrak | nach Sonnenaufgang | 2 |
| tahiyyat | Tahiyyetü'l-mescid | beim Betreten einer Moschee | 2 |

## Beispiel: Nafile-Zeitplan ermitteln

1. Aktuelle Gebetszeiten für Wien via Aladhan-API holen:
   ```bash
   curl -s "https://api.aladhan.com/v1/timingsByAddress/$(date +%d-%m-%Y)?address=Vienna,Austria&method=13&school=hanafi" | python3 -m json.tool
   ```
2. Kuşluk/Duhâ ab ca. 15–20 Minuten nach Sonnenaufgang bis kurz vor Dhuhr.
3. İşrak unmittelbar nach Sonnenaufgang.
4. Tahiyyetü'l-mescid beim Betreten einer Moschee.
5. Evvâbîn nach Maghrib, vor Ishaa.

## Dateipfade

- App-Code: `/DATA/AppData/muslimos/app/`
- Datenbank: `/DATA/AppData/muslimos/data/db.json`
- Compose: `/DATA/.casaos/apps/muslimos/docker-compose.yml` (root-protected, use sudo)

## Compose-Details

```yaml
name: muslimos
services:
  muslimos:
    container_name: muslimos
    image: node:22-alpine
    ports:
      - "8099:3000"
    volumes:
      - /DATA/AppData/muslimos/app:/app
      - /DATA/AppData/muslimos/data:/app/data
```

## API-Endpoints (vollständig)

| Endpoint | Method | Beschreibung |
|---|---|---|
| `/api/data` | GET | Gesamter publicState (tahajjud, sunnah, evrad, hifz, prayers, prayerTimes, config) |
| `/api/session` | GET/POST | PIN-Status prüfen / PIN verifizieren |
| `/api/tahajjud` | POST | Teheccüt speichern/löschen |
| `/api/sunnah` | POST | Sünnet/Nafile toggeln |
| `/api/evrad` | POST | Evrad-Auswahl (short/long) |
| `/api/hifz` | POST | Hifz-Fortschritt pro Sure |
| `/api/prayers` | POST | Fard-Gebet toggeln (`{date, key, prayed}`) |
| `/api/prayer-times` | GET | Gebetszeiten für Wien (Aladhan, Diyanet, OneSeventh) — täglich gecached |
| `/api/pin` | POST | PIN setzen/ändern/entfernen |

## Gebetszeiten-API (Aladhan)

- **URL:** `https://api.aladhan.com/v1/timingsByCity/<DD-MM-YYYY>?city=Vienna&country=Austria&method=13&latitudeAdjustmentMethod=2`
- **Methode 13:** Diyanet (türkische Berechnung)
- **latitudeAdjustmentMethod=2:** OneSeventh-Nacht-Regel — notwendig für hohe Breiten (Wien ~48°N), wo im Sommer keine echte astronomische Dämmerung eintritt
- **Pitfall:** API antwortet auf `/v1/timingsByCity` (ohne Datum) mit 302-Redirect → immer mit Datum aufrufen
- **User-Agent-Header** mitsenden, sonst kann die API blocken
