Commit 11b76fe2 authored by Gemini's avatar Gemini Committed by Jakob Moser
Browse files

feat(Backend): Initial Flask app to serve song data from CSV

This commit introduces a minimal Flask backend that:
- Reads song data from a specified CSV file on startup.
- Generates a unique ID for each song.
- Converts song attributes (TITLE, ARTIST, GENRE, YEAR) to a structured format.
- Exposes all song data via a GET request to the '/api/songs' endpoint as JSON.
- Includes basic error handling for file not found and CSV processing issues.
parent 4917298a
Loading
Loading
Loading
Loading

simple_backend.py

0 → 100644
+58 −0
Original line number Diff line number Diff line
from flask import Flask, jsonify
import csv
import os

app = Flask(__name__)

# WICHTIG: Ersetze 'deine_songs.csv' mit dem tatsächlichen Pfad zu deiner CSV-Datei
SONGS_CSV_FILE = 'deine_songs.csv'
songs_data = []

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}")
        return

    try:
        with open(SONGS_CSV_FILE, 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 = {
                    '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}")

@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
        return jsonify({"error": "Songdaten konnten nicht geladen werden oder Datei nicht vorhanden."}), 500
        
    return jsonify(songs_data)

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
    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.")
 No newline at end of file