# MiniHeld / FamilienQuest Backend

Dies ist die erste produktionsnahe Backend-Basis fuer MiniHeld. Alle API- und Webseiten-Dateien liegen im Verzeichnis `Backend`.

## Inhalt

- MySQL-Schema: `database/schema.sql`
- PDO-Konfiguration: `config/config.php`
- Gemeinsame Includes: `includes/`
- REST-API: `api/`
- Eltern-Webbereich: `public/`

## Einrichtung

1. MySQL-Datenbank `db_336569_19` auswaehlen und Schema importieren:

   ```bash
   mysql -u root -p db_336569_19 < Backend/database/schema.sql
   ```

2. Datenbankzugang in `Backend/config/config.php` anpassen:

   ```php
   const DB_HOST = '127.0.0.1';
   const DB_PORT = '3306';
   const DB_NAME = 'db_336569_19';
   const DB_USER = 'root';
   const DB_PASS = '';
   ```

3. Webserver-Document-Root auf `Backend/public` setzen.

   Fuer lokale Entwicklung:

   ```bash
   php -S localhost:8080 -t Backend/public
   ```

4. Eltern-Webbereich im Browser oeffnen:

   ```text
   http://localhost:8080
   ```

## REST-API

Die API erwartet und liefert JSON. Erfolgreiche Antworten folgen diesem Muster:

```json
{
  "success": true,
  "message": "Mission wurde erfolgreich bestaetigt.",
  "data": {}
}
```

Fehler folgen diesem Muster:

```json
{
  "success": false,
  "message": "Du hast keine Berechtigung fuer diese Aktion.",
  "data": {}
}
```

## Vorhandene Endpunkte

Auth:

- `POST /api/register.php`
- `POST /api/login.php`
- `POST /api/logout.php`
- `POST /api/child_login.php`

Kinder:

- `GET /api/children/list.php`
- `POST /api/children/create.php`
- `POST /api/children/update.php`
- `POST /api/children/delete.php`

Missionen:

- `GET /api/tasks/list.php`
- `POST /api/tasks/create.php`
- `POST /api/tasks/update.php`
- `POST /api/tasks/delete.php`
- `POST /api/tasks/submit.php`
- `GET /api/tasks/reviews.php`
- `POST /api/tasks/review.php`

Schatzkammer:

- `GET /api/shop/list.php`
- `POST /api/shop/create_item.php`
- `POST /api/shop/update_item.php`
- `POST /api/shop/delete_item.php`
- `POST /api/shop/request_purchase.php`
- `POST /api/shop/review_purchase.php`

Punkte und EXP:

- `GET /api/points/history.php`
- `POST /api/points/manual_add.php`
- `GET /api/exp/history.php`

Level:

- `GET /api/levels/list.php`

Benachrichtigungen:

- `GET /api/notifications/list.php`
- `POST /api/notifications/mark_read.php`

Dashboards:

- `GET /api/dashboard/parent.php`
- `GET /api/dashboard/child.php`

## Sicherheitsentscheidungen im MVP

- Elternpasswoerter werden mit `password_hash()` gespeichert.
- Kinder-PINs werden ebenfalls gehasht.
- Alle Datenbankzugriffe laufen ueber PDO Prepared Statements.
- Eltern-Endpunkte pruefen die Session und greifen nur auf eigene Kinddaten zu.
- Kinder-Endpunkte verwenden den Kinderlogin und erlauben keine Elternaktionen.
- Punkte- und EXP-Aenderungen werden in Transaktionstabellen historisiert.
- Shop-Kaeufe ziehen Punkte erst nach Elternfreigabe ab.

## Naechste Phase

Als naechstes sollten die Eltern-Webseiten fuer Missionen, Pruefbereich und Schatzkammer ergaenzt werden. Danach kann die Flutter-App gegen die vorhandenen API-Endpunkte aufgebaut werden.
