# 🏋️‍♂️ Trainings- und Anwesenheitsverwaltung API  

Dies ist eine REST-API zur Verwaltung von Trainingseinheiten, Anwesenheiten und Geräteplänen für Sportabteilungen.  
Die API basiert auf **Node.js**, **Express** und **PostgreSQL**.  

## 🚀 Installation  

1. **Repository klonen:**  

   ```sh
   git clone <REPO-URL>
   cd trainings-api
   ```

2. **Abhängigkeiten installieren:**

   ```sh
    npm install
    ```

3. **Datenbank konfigurieren:**

Datei .env aus .env_default erstellen und die PostgreSQL-Verbindungsdaten und Mailzugangsdaten hinterlegen:
    ```sh
    cp .env_default .env
    ```

1. **Server starten**

   ```sh
    npm start
    ```

## 📌 API-Endpunkte

### 🔐 Authentifizierung & Middleware

Alle Endpunkte sind durch JWT gesichert.

requireAuth → Benutzer muss eingeloggt sein.
requireAdmin → Benutzer benötigt Admin-Rechte.

### 📋 Mitgliederverwaltung

GET /member/:id?
📌 Gibt Mitgliederinformationen zurück

/member → Liste aller Mitglieder  
/member/:id → Einzelnes Mitglied  
PUT /member/:id?  
📌 Fügt Mitglieder hinzu oder aktualisiert sie  

Ohne id → Neues Mitglied  
Mit id → Mitglied aktualisieren  
DELETE /member/:id  
📌 Löscht ein Mitglied (Admin erforderlich)  

### 📅 Trainingsverwaltung

GET /:abteilung/trainings/:jahr?/:kw?  
📌 Liefert Trainingsinformationen  

/trainings → Alle Trainings einer Abteilung  
/trainings/:jahr → Alle Trainings eines Jahres  
/trainings/:jahr/:kw → Training einer bestimmten KW  
POST /:abteilung/trainings/:jahr/:kw  
📌 Erstellt ein neues Training mit Geräteplan  

Wenn zwei Trainings dieselben Geräte hatten, wird hochgezählt.  
Falls das letzte Gerät 10 war, geht es auf 1.  
📋 Anwesenheitsverwaltung  
GET /:abteilung/anwesend/:id  
📌 Liefert Anwesenheiten für ein Training  

POST /:abteilung/anwesend/:id  
📌 Setzt Anwesenheiten  

inriege → Alle Mitglieder, die anwesend sein könnten  
anw → Mitglieder, die tatsächlich anwesend sind  
✅ Automatische Korrekturen:  

Falls Mitglied in anw ist, aber nicht in DB → Hinzufügen  
Falls Mitglied in anw fehlt, aber in DB → Löschen  

## 🛠 Technologie-Stack

Backend: Node.js, Express.js  
Datenbank: PostgreSQL  
Authentifizierung: JWT  

## 🛠 Entwickler-Tools

### 📜 Linter & Formatierung

```sh
npm run lint
npm run format
```

### 📦 Abhängigkeiten aktualisieren

```sh
npm update
```

## 🏗 Zukünftige Erweiterungen

📊 Statistiken & Berichte  
📱 Mobile App-Integration  
📧 E-Mail-Benachrichtigungen  

## 📬 Kontakt

mailto:admin@boergmann.it  
💬 Falls du Fragen hast, erstelle ein Issue oder kontaktiere mich! 🚀
