from auth.auth_view import RegisteredAuthorizedView from media_plan.schemas import ( MediaPlanReleaseDetails, media_plan_release_details, media_plan_release_details_update, media_plan_release_details_update_response ) from flask_apispec import marshal_with, doc, use_kwargs from media_plan.services.media_plan_release_service import MediaPlanReleaseDetailsService from media_plan.validators import ProjectMediaPlanValidator @doc(tags=["MediaPlanReleaseDetails"]) class MediaPlanReleaseDetailsView(RegisteredAuthorizedView): media_plan_release_service = MediaPlanReleaseDetailsService() validator = ProjectMediaPlanValidator() @doc(description='Retrieve media plan for review') @marshal_with(media_plan_release_details, code=200, description='JSON with release details.') @marshal_with(schema=None, code=401, description='User is not authenticated.') @marshal_with(schema=None, code=403, description='User does not have access to the project') @marshal_with(schema=None, code=404, description='Media plan is not found.') def get(self, project_id: int, media_plan_id: int) -> MediaPlanReleaseDetails: self.permissions.can_access_project(project_id) self.validator.validate_project_media_plan(project_id, media_plan_id) return self.media_plan_release_service.get_release_details(media_plan_id) @doc(description='Update release details') @use_kwargs(media_plan_release_details_update) @marshal_with(media_plan_release_details_update_response, code=200, description='Release details has been updated successfully.') @marshal_with(schema=None, code=401, description='User is not authenticated.') @marshal_with(schema=None, code=403, description='User does not have access to the project') @marshal_with(schema=None, code=404, description='Media plan is not found.') def patch(self, params, project_id: int, media_plan_id: int): self.permissions.can_access_project(project_id) self.validator.validate_project_media_plan(project_id, media_plan_id) self.permissions.can_update_media_plan_release_details(media_plan_id) return self.media_plan_release_service.update_release_details( project_id, media_plan_id, params )