from auth.auth_view import RegisteredAuthorizedView from media_plan.schemas import ( MediaPlanCampaignPartialUpdateResponseSchema, media_plan_campaign_partial_update_schema, media_plan_campaign_partial_update_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 from shared.validators import validate_UUID @doc(tags=['MediaPlanCampaign']) class MediaPlanCampaignView(RegisteredAuthorizedView): media_plan_service = MediaPlanService() validator = ProjectMediaPlanValidator() @doc(description='Update media plan campaign') @use_kwargs(media_plan_campaign_partial_update_schema) @marshal_with(media_plan_campaign_partial_update_response_schema, code=200, description='MediaPlan 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='MediaPlan is not found.') def patch( self, params, project_id: int, media_plan_id: int, campaign_uuid ) -> MediaPlanCampaignPartialUpdateResponseSchema: """Update a campaign. Args: params: MediaPlanCampaignPartialUpdateSchema project_id (int): Project ID. media_plan_id (int): MediaPlan ID. campaign_uuid (str): Campaign UUID. Returns: HTTP 200: If campaign has been updated successfully. Raises: HTTP 401: If user is not authenticated. HTTP 403: If user does not have permission to update campaign. HTTP 404: If project or campaign is not found. """ self.permissions.can_access_project(project_id) self.validator.validate_project_media_plan(project_id, media_plan_id) validate_UUID(campaign_uuid) self.permissions.can_edit_campaign_by_media_plan_id(media_plan_id=media_plan_id, campaign_uuid=campaign_uuid) return self.media_plan_service.update_media_plan_campaign( campaign_uuid=campaign_uuid, campaign_data=params, media_plan_id=media_plan_id, user_id=g.user_id, )