{/* Top full-width section */}
{/* Content section below */}
-
+ {
+ recommendations.length > 0 ?
+
+
Recommendations:
+
+
+ :
+
+ }
+
);
};
-export default SelectMovies;
\ No newline at end of file
+export default SelectMovies;
diff --git a/mediabridge/api/app.py b/mediabridge/api/app.py
index 6d6e4b2..a327e93 100644
--- a/mediabridge/api/app.py
+++ b/mediabridge/api/app.py
@@ -8,6 +8,7 @@
from mediabridge.config.backend import ENV_TO_CONFIG
from mediabridge.db.tables import Base
+from mediabridge.recommender.make_recommendation import recommend
typer_app = typer.Typer()
db = SQLAlchemy(model_class=Base)
@@ -51,6 +52,36 @@ def search_movies() -> tuple[Response, int]:
movies_list = [row._asdict() for row in movies]
return jsonify(movies_list), 200
+ @app.route("/api/v1/movie/
")
+ def get_movie_by_id(movie_id):
+ with db.engine.connect() as conn:
+ movie = conn.execute(
+ text("SELECT * FROM movie_title WHERE id = :id"),
+ {"id": movie_id},
+ ).fetchone()
+ if not movie:
+ return jsonify({"error": "Movie not found"}), 404
+ return jsonify(dict(movie._mapping)), 200
+
+ @app.route("/api/v1/movie/recommend", methods=["GET"]) # type: ignore
+ def recommend_movies() -> tuple[Response, int]:
+ movies = request.args.getlist("movies[]", type=int)
+ if not movies:
+ return jsonify(
+ {
+ "error": "Query parameter 'movies[]' is required and must be a list of integers."
+ }
+ ), 400
+ if not all(isinstance(m, int) for m in movies):
+ return jsonify({"error": "'movies' must be a list of integers."}), 400
+
+ try:
+ rec_ids = recommend()
+ except Exception as e:
+ return jsonify({"error": f"Recommendation failed: {str(e)}"}), 500
+
+ return jsonify({"recommendations": list(rec_ids)}), 200
+
return app
diff --git a/mediabridge/engine/recommendation_engine.py b/mediabridge/engine/recommendation_engine.py
index 1489696..f09fb25 100644
--- a/mediabridge/engine/recommendation_engine.py
+++ b/mediabridge/engine/recommendation_engine.py
@@ -23,7 +23,7 @@ def get_movie_id(self, title: str) -> str:
movies = self.db["movies"]
movie = movies.find_one({"title": title})
assert movie, title
- return f"{movie.get("netflix_id")}"
+ return f"{movie.get('netflix_id')}"
def get_movie_title(self, netflix_id: str) -> str:
movies = self.db["movies"]
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..67896af
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6 @@
+{
+ "name": "MediaBridge",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {}
+}