Source code for eclypse.builders.application.deathstarbench.media_service.rest_services.movie_info
"""REST endpoints for aggregated movie information."""
from eclypse.remote.communication import rest
from eclypse.remote.service import RESTService
from eclypse.utils import format_log_kv
[docs]
class MovieInfoService(RESTService):
"""Aggregate movie metadata and reviews."""
[docs]
@rest.endpoint("/details", "GET")
async def details(self, movie_id: str, movie_title: str, **_):
"""Return a combined view of cast, plot, and stored reviews."""
self.logger.info(
"Received request | "
+ format_log_kv(movie_id=movie_id, movie_title=movie_title)
)
cast = await self.rest.get("CastInfoService/cast", movie_id=movie_id)
self.logger.info(
"Received response | "
+ format_log_kv(source="CastInfoService", body=cast.body)
)
plot = await self.rest.get("PlotService/plot", movie_id=movie_id)
self.logger.info(
"Received response | " + format_log_kv(source="PlotService", body=plot.body)
)
reviews = await self.rest.get("MovieReviewService/read", movie_id=movie_id)
self.logger.info(
"Received response | "
+ format_log_kv(source="MovieReviewService", body=reviews.body)
)
return 200, {
"movie_id": movie_id,
"movie_title": movie_title,
"cast": cast.body["cast"],
"plot": plot.body["plot"],
"reviews": reviews.body["reviews"],
}