diff --git a/src/api/routes.py b/src/api/routes.py index 5cdce8d..2b8e3a3 100644 --- a/src/api/routes.py +++ b/src/api/routes.py @@ -20,6 +20,7 @@ ALLOWED_EXTENSIONS = {'csv'} user_csvs = {} + @lru_cache(maxsize=1000) def get_poster_url(movie_name, movie_year): movie = tmdb_service.search_movie(movie_name, movie_year) @@ -29,23 +30,24 @@ def get_poster_url(movie_name, movie_year): return posters[0] return None + @api_bp.route('/movies', methods=['GET']) def get_movies(): user_id = session.get('user_id') # Récupérer l'ID de l'utilisateur de la session - + if user_id not in user_csvs: return jsonify({'movies': [], 'message': 'No movies found. Please upload a CSV file.'}), 200 - + # Lire le DataFrame à partir du cache csv_content = user_csvs[user_id] - + try: # Si csv_content est une chaîne, il n'est pas nécessaire de décoder if isinstance(csv_content, bytes): df = pd.read_csv(io.StringIO(csv_content.decode('utf-8'))) else: df = pd.read_csv(io.StringIO(csv_content)) - + # Reste de votre code pour la pagination et le traitement... page = int(request.args.get('page', 1)) limit = int(request.args.get('limit', 10)) @@ -66,12 +68,12 @@ def get_movies(): 'id': start_index + i + 1, 'Watched Date': movie['Watched Date'], 'Name': movie['Name'], - 'Year': movie['Year'], + 'Year': movie['Year'], 'Poster': get_poster_url(movie['Name'], movie['Year']), } for i, movie in enumerate(movies) ] - + return jsonify({ 'movies': movies_with_posters, 'total': total_movies, @@ -81,27 +83,29 @@ def get_movies(): except Exception as e: print(f"Error in get_movies: {str(e)}") return jsonify({'error': 'An error occurred while fetching movies'}), 500 - + + @api_bp.route('/posters//', methods=['GET']) def get_movie_posters(movie_name, movie_year): - tmdb_service = TMDBService() - + movie = tmdb_service.search_movie(movie_name, movie_year) - + if movie: posters = tmdb_service.get_movie_posters(movie['id']) return jsonify({'posters': posters}) else: return jsonify({'error': 'Movie not found'}), 404 - + + def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS - + + @api_bp.route('/upload-csv', methods=['POST']) def upload_csv(): user_id = session.get('user_id') - + if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 file = request.files['file'] @@ -110,7 +114,7 @@ def upload_csv(): if file and allowed_file(file.filename): content = file.read() user_csvs[user_id] = content - + try: df = pd.read_csv(io.StringIO(content.decode('utf-8'))) df = df.rename(columns={ @@ -118,18 +122,19 @@ def upload_csv(): 'Name': 'Name', 'Year': 'Year' }) - + user_csvs[user_id] = df.to_csv(index=False) - + return jsonify({'success': True, 'message': 'File uploaded and processed successfully'}), 200 except Exception as e: return jsonify({'error': f'Error processing file: {str(e)}'}), 500 return jsonify({'error': 'File type not allowed'}), 400 + @api_bp.route('/check-csv', methods=['GET']) def check_csv(): user_id = session.get('user_id') - + try: if user_id in user_csvs: return jsonify({'fileExists': True}), 200 @@ -139,10 +144,11 @@ def check_csv(): print(f"Error in check_csv: {str(e)}") return jsonify({'error': 'An error occurred while checking the CSV file'}), 500 + @api_bp.route('/delete-csv', methods=['DELETE']) def delete_csv(): user_id = session.get('user_id') - + try: if user_id in user_csvs: del user_csvs[user_id] @@ -159,22 +165,25 @@ def download_posters(): try: data = request.get_json() selected_posters = data.get('posters', []) - + if not selected_posters: return jsonify({'error': 'No posters selected'}), 400 - + zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file: # Télécharger chaque poster for poster in selected_posters: movie_id = poster['movieId'] poster_id = poster['posterId'] - poster_url = f"https://image.tmdb.org/t/p/w500{poster_id}" + watched_date = poster.get('watchedDate', 'unknown-date') + + poster_url = f"https://image.tmdb.org/t/p/original{poster_id}" try: response = requests.get(poster_url) if response.status_code == 200: - zip_file.writestr(f"{movie_id}.jpg", response.content) + file_name = f"{watched_date}_{movie_id}.jpg" + zip_file.writestr(file_name, response.content) else: print(f"Failed to download poster for movie ID {movie_id}") except Exception as e: