Commit 60c94c21 authored by Gemini's avatar Gemini Committed by Jakob Moser
Browse files

feat(Backend): Serve frontend static files from Flask

This commit updates the Flask backend to serve static files (HTML, CSS, JS) for the frontend application.

- Added routes to serve 'index.html' from the 'frontend' directory at the root path ('/').
- Added a catch-all route to serve other static files (e.g., '.css', '.mjs') from the 'frontend' directory.
- Defined FRONTEND_FOLDER path for clarity.
parent 11b76fe2
Loading
Loading
Loading
Loading
+35 −11
Original line number Diff line number Diff line
from flask import Flask, jsonify
from flask import Flask, jsonify, send_from_directory
import csv
import os

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

# WICHTIG: Ersetze 'deine_songs.csv' mit dem tatsächlichen Pfad zu deiner CSV-Datei
# Es wird davon ausgegangen, dass die CSV-Datei im selben Verzeichnis wie simple_backend.py liegt.
SONGS_CSV_FILE = 'deine_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
    
    if not os.path.exists(SONGS_CSV_FILE):
        print(f"FEHLER: CSV-Datei nicht gefunden unter: {SONGS_CSV_FILE}")
    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(SONGS_CSV_FILE, mode='r', encoding='utf-8-sig') as infile: # utf-8-sig für BOM-Handling
        with open(csv_file_path, mode='r', 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 = {
@@ -36,23 +46,37 @@ def load_and_prepare_songs():
    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:
        # Versuche erneut zu laden, falls beim ersten Mal etwas schiefging
        # oder die Datei später hinzugefügt wurde (einfache Entwicklungs-Hilfe)
        print("Keine Songdaten im Speicher, versuche erneut zu laden...")
        load_and_prepare_songs() 
    
    if not songs_data: # Immer noch keine Daten
    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.mjs, 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: # Starte Server nur, wenn Songs geladen wurden
        app.run(debug=True, port=5001) # Port ist frei wählbar
    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.")