Commit d6264019 authored by Jakob Moser's avatar Jakob Moser
Browse files

Remove simple_backend (logic has been incorporated into karaokatalog.ui)

parent 3540cb9f
Loading
Loading
Loading
Loading

simple_backend.py

deleted100644 → 0
+0 −92
Original line number Diff line number Diff line
import csv
import os

from flask import Flask, jsonify, send_from_directory

app = Flask(__name__, static_folder="frontend")  # static_folder auf 'frontend' setzen

# Es wird davon ausgegangen, dass die CSV-Datei im selben Verzeichnis wie simple_backend.py liegt.
SONGS_CSV_FILE = "songs.csv"
songs_data = []

# Definiere den Pfad zum Frontend-Ordner relativ zum Skriptverzeichnis
# __file__ ist der Pfad zum aktuellen Skript (simple_backend.py)
# os.path.dirname(__file__) ist das Verzeichnis, in dem das Skript liegt
# os.path.join(...) erstellt einen plattformunabhängigen Pfad
FRONTEND_FOLDER = os.path.join(os.path.dirname(__file__), "frontend")


def load_and_prepare_songs():
    global songs_data
    songs_data = []  # Zurücksetzen für den Fall, dass die Funktion mehrmals aufgerufen wird

    csv_file_path = os.path.join(os.path.dirname(__file__), SONGS_CSV_FILE)

    if not os.path.exists(csv_file_path):
        print(f"FEHLER: CSV-Datei nicht gefunden unter: {csv_file_path}")
        return

    try:
        with open(
            csv_file_path, encoding="utf-8-sig"
        ) as infile:  # utf-8-sig für BOM-Handling
            reader = csv.DictReader(infile)
            for i, row in enumerate(reader):
                song_entry = {
                    "id": f"s{i + 1}",  # Eindeutige ID generieren
                    "title": row.get("TITLE", "").strip(),
                    "artist": row.get("ARTIST", "").strip(),
                    "genre": row.get("GENRE", "").strip(),
                    "year": None,  # Standardmäßig None
                }
                year_str = row.get("YEAR", "").strip()
                if year_str.isdigit():
                    song_entry["year"] = int(year_str)

                songs_data.append(song_entry)
        print(f"{len(songs_data)} Songs erfolgreich geladen und vorbereitet.")
    except Exception as e:
        print(f"Fehler beim Lesen oder Verarbeiten der CSV-Datei: {e}")


# API-Endpunkt zum Abrufen der Song-Daten
@app.route("/api/songs", methods=["GET"])
def get_songs():
    if not songs_data:
        print("Keine Songdaten im Speicher, versuche erneut zu laden...")
        load_and_prepare_songs()

    if not songs_data:
        return jsonify(
            {
                "error": "Songdaten konnten nicht geladen werden oder Datei nicht vorhanden."
            }
        ), 500

    return jsonify(songs_data)


# Route zum Ausliefern der index.html für den Root-Pfad
@app.route("/", methods=["GET"])
def serve_index():
    # send_from_directory benötigt den Ordner und den Dateinamen
    return send_from_directory(FRONTEND_FOLDER, "index.html")


# Route zum Ausliefern aller anderen statischen Dateien aus dem frontend-Ordner
# z.B. /style.css, /app.js, etc.
@app.route("/<path:filename>")
def serve_static_files(filename):
    return send_from_directory(FRONTEND_FOLDER, filename)


if __name__ == "__main__":
    load_and_prepare_songs()  # Lade Songs beim Start des Servers
    if songs_data:
        # debug=True ist gut für die Entwicklung, für Produktion auf False setzen
        app.run(debug=True, port=5001)
    else:
        print("Backend startet nicht, da keine Songdaten geladen werden konnten.")
        print(
            f"Bitte stelle sicher, dass die Datei '{SONGS_CSV_FILE}' im selben Verzeichnis wie das Skript liegt oder passe den Pfad an."
        )