MikaList/game_collection/README.md

181 lines
5.5 KiB
Markdown

# Game Collection API
Dies ist eine Flask-basierte API zur Verwaltung einer Sammlung von Spielen. Die API ermöglicht das Hinzufügen, Abrufen, Bearbeiten und Löschen von Spielen sowie die Benutzerverwaltung.
## Endpunkte
### Benutzerverwaltung
- **POST /users**: Erstellt einen neuen Benutzer. Dieser Endpunkt ist nur für Administratoren zugänglich. Der Benutzer muss einen Benutzernamen und ein Passwort angeben. Der Administrator kann auch die Rolle des neuen Benutzers festlegen (entweder 'user' oder 'admin').
- **Gesendete Daten**:
```json
{
"username": "neuerBenutzer",
"password": "sicheresPasswort",
"role": "user" // optional
}
```
- **Antwort**:
```json
{
"message": "User created!"
}
```
- **POST /users/login**: Meldet einen Benutzer an und gibt ein JWT-Token zurück. Der Benutzer muss seinen Benutzernamen und sein Passwort angeben. Bei erfolgreicher Anmeldung wird ein Token generiert, das für zukünftige Anfragen verwendet werden kann.
- **Gesendete Daten**:
```json
{
"username": "benutzername",
"password": "passwort"
}
```
- **Antwort**:
```json
{
"message": "Login successful!",
"token": "jwt_token",
"role": "user" // oder "admin"
}
```
- **GET /users**: Gibt eine Liste aller Benutzer zurück. Dieser Endpunkt ist nur für Administratoren zugänglich. Die Antwort enthält Informationen wie Benutzer-ID, Benutzernamen, Rolle und das Datum der letzten Anmeldung.
- **Antwort**:
```json
[
{
"id": 1,
"username": "admin",
"role": "admin",
"last_login": "2023-10-01 12:00:00"
},
...
]
```
- **PUT /users/<int:user_id>**: Aktualisiert die Informationen eines Benutzers. Nur Administratoren können diesen Endpunkt verwenden. Der Administrator kann den Benutzernamen, die Rolle und das Passwort des Benutzers aktualisieren.
- **Gesendete Daten**:
```json
{
"username": "neuerBenutzername",
"role": "admin", // optional
"password": "neuesPasswort" // optional
}
```
- **Antwort**:
```json
{
"message": "User updated!"
}
```
- **DELETE /users/<int:user_id>**: Löscht einen Benutzer. Dieser Endpunkt ist nur für Administratoren zugänglich. Der Administrator muss die Benutzer-ID angeben, um den Benutzer zu löschen.
- **Antwort**:
```json
{
"message": "User deleted!"
}
```
- **PUT /users/change_password**: Ändert das Passwort des angemeldeten Benutzers. Der Benutzer muss sein aktuelles Passwort und das neue Passwort angeben. Wenn das aktuelle Passwort korrekt ist, wird das Passwort des Benutzers aktualisiert.
- **Gesendete Daten**:
```json
{
"current_password": "aktuellesPasswort",
"new_password": "neuesPasswort"
}
```
- **Antwort**:
```json
{
"message": "Password changed successfully!"
}
```
### Spieleverwaltung
- **POST /games**: Fügt ein neues Spiel zur Sammlung hinzu. Der Benutzer muss ein Bild-URL und den Titel des Spiels angeben. Die API lädt das Bild herunter, speichert es lokal und erstellt einen neuen Spieleintrag in der Datenbank. Der Benutzer, der das Spiel hinzufügt, wird als Käufer festgelegt.
- **Gesendete Daten**:
```json
{
"title": "Spiel Titel",
"image": "https://example.com/image.jpg"
}
```
- **Antwort**:
```json
{
"message": "Game added!"
}
```
- **GET /games**: Gibt eine Liste aller Spiele in der Sammlung zurück. Der Benutzer muss authentifiziert sein. Die Antwort enthält Informationen zu jedem Spiel, einschließlich Titel, Bild (als Base64-kodiert), Kaufdatum, Käufer und ob das Spiel im Besitz des Benutzers ist.
- **Antwort**:
```json
[
{
"id": 1,
"image": "base64_encoded_image",
"title": "Spiel Titel",
"date": "2023-10-01",
"buyer": "benutzername",
"owned": true
},
...
]
```
- **DELETE /games/<int:game_id>**: Löscht ein Spiel aus der Sammlung. Der Benutzer muss authentifiziert sein und die Spiele-ID angeben. Wenn das Spiel gefunden wird, wird es aus der Datenbank und vom Dateisystem gelöscht.
- **Antwort**:
```json
{
"message": "Game deleted!"
}
```
- **GET /games/search**: Sucht nach Spielen basierend auf einem Suchbegriff. Der Benutzer muss authentifiziert sein. Der Suchbegriff wird als Abfrageparameter übergeben. Die API sendet eine Anfrage an eine externe Website, um Spiele zu finden, die dem Suchbegriff entsprechen, und gibt die Ergebnisse zurück.
- **Antwort**:
```json
[
{
"title": "Spiel Titel",
"link": "https://example.com/game",
"image_link": "https://example.com/image.jpg",
"release_date": "2023-10-01",
"price": "$59.99",
"rating": "5/5"
},
...
]
```
## Installation
1. Klone das Repository:
```bash
git clone <repository-url>
cd game_collection
```
2. Installiere die Abhängigkeiten:
```bash
pip install -r requirements.txt
```
3. Starte die Anwendung:
```bash
flask run
```
## Datenbank
Die Anwendung verwendet SQLite zur Speicherung von Benutzern und Spielen. Die Datenbank wird beim ersten Start der Anwendung automatisch erstellt.
## Sicherheit
Die API verwendet JWT für die Authentifizierung. Stelle sicher, dass du einen geheimen Schlüssel in deiner Umgebung festlegst, um die Token zu signieren.
## Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.