MikaList/game_collection
2024-09-05 11:52:42 +02:00
..
app.py fix: replace Image.ANTIALIAS with Image.LANCZOS in resize_image function to resolve AttributeError 2024-09-03 14:55:24 +02:00
database.py feat: create default admin user when initializing the database 2024-09-02 10:45:58 +02:00
models.py feat: implement password hashing for user authentication and storage 2024-09-02 10:43:07 +02:00
README.md docs: update README to include command for starting the app as a Docker container 2024-09-05 11:52:42 +02:00
requirements.txt feat: add Pillow to requirements.txt for image resizing functionality 2024-09-03 14:52:17 +02:00
user_management.py feat: add endpoint to change user password with validation for current password 2024-09-03 21:11:02 +02:00

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:
      {
        "username": "neuerBenutzer",
        "password": "sicheresPasswort",
        "role": "user"  // optional
      }
      
    • Antwort:
      {
        "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:
      {
        "username": "benutzername",
        "password": "passwort"
      }
      
    • Antwort:
      {
        "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:
      [
        {
          "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:
      {
        "username": "neuerBenutzername",
        "role": "admin",  // optional
        "password": "neuesPasswort"  // optional
      }
      
    • Antwort:
      {
        "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:
      {
        "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:
      {
        "current_password": "aktuellesPasswort",
        "new_password": "neuesPasswort"
      }
      
    • Antwort:
      {
        "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:
      {
        "title": "Spiel Titel",
        "image": "https://example.com/image.jpg"
      }
      
    • Antwort:
      {
        "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:
      [
        {
          "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:
      {
        "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:
      [
        {
          "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:

    git clone <repository-url>
    cd game_collection
    ```bash
    
    
  2. Installiere die Abhängigkeiten:

    pip install -r requirements.txt
    
  3. Starte die Anwendung lokal:

    flask run
    

Anwendung als Docker-Container starten

Um die Anwendung als Docker-Container zu starten, verwenden Sie den folgenden Befehl:

docker compose up

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.