from auth.auth_view import RegisteredAuthorizedView from media_plan.schemas import ( MediaPlanCampaignsBulkActionResponseSchema, media_plan_campaign_bulk_action_schema, media_plan_campaign_bulk_action_response_schema ) from media_plan.services.media_plan_service import MediaPlanService from flask import g from flask_apispec import marshal_with, use_kwargs, doc from media_plan.validators import ProjectMediaPlanValidator @doc(tags=['MediaPlanCampaignsBulkAction']) class MediaPlanCampaignsBulkActionView(RegisteredAuthorizedView): media_plan_service = MediaPlanService() validator = ProjectMediaPlanValidator() @doc(description='Media plan bulk action') @use_kwargs(media_plan_campaign_bulk_action_schema) @marshal_with(media_plan_campaign_bulk_action_response_schema, code=201, description='JSON with phases.') @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') def post(self, params, project_id: int, media_plan_id: int) -> MediaPlanCampaignsBulkActionResponseSchema: self.permissions.can_update_media_plan(project_id) self.validator.validate_project_media_plan(project_id, media_plan_id) self.permissions.can_create_campaign_by_media_plan_id(media_plan_id, params) return self.media_plan_service.bulk_action(media_plan_id, params, g.user_id)