from flask import g from artists.services.artists_validator import ArtistsValidator from auth.auth_view import RegisteredAuthorizedView from labels.labels_permissions_service import LabelPermissionsService from flask_apispec import marshal_with, doc, use_kwargs from labels.schemas import label_artist_team_request_model, label_users_artist_team_request_model from users.services.users_validator import UsersValidator from utils.exceptions import Forbidden @doc(tags=['LabelPermissions']) class LabelPermissionsArtistTeamsView(RegisteredAuthorizedView): label_permissions_service = LabelPermissionsService() artists_validator = ArtistsValidator() users_validator = UsersValidator() @doc(description='Delete user from multiple artist teams') @use_kwargs(label_artist_team_request_model, location='query') @marshal_with(None, code=204, description='User deleted from artist teams successfully.') @marshal_with(None, code=401, description='User is not authenticated.') @marshal_with(None, code=403, description='User does not have access to the label or not admin.') @marshal_with(None, code=404, description='Label is not found.') def delete(self, params, label_id: int, user_id: int): self.users_validator.validate_request_user_admin() self.users_validator.validate_label_exist(label_id) self.users_validator.validate_user_exist(user_id) self.users_validator.validate_user_has_label(user_id, label_id) self.permissions.can_access_label(label_id) self.artists_validator.validate_user_have_artist_team_user_for_artists_in_label( user_id, label_id, params.artistId ) self.label_permissions_service.delete_user_from_artist_team(label_id, user_id, params.artistId) return self.no_content() @doc(description='Create artist team user and artist teams is needed') @use_kwargs(label_artist_team_request_model) @marshal_with(schema=None, code=204, description='Artist teams for user created.') @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 label or not admin.') @marshal_with(schema=None, code=404, description='Label or user is not found.') def post(self, params, label_id: int, user_id: int): self.users_validator.validate_request_user_admin() self.users_validator.validate_label_exist(label_id) self.users_validator.validate_user_exist(user_id) self.users_validator.validate_user_has_label(user_id, label_id) self.permissions.can_access_label(label_id) self.artists_validator.validate_all_artists_from_label_by_external_id(label_id, params.artistId) self.artists_validator.validate_user_not_have_artist_team_user_for_artists_in_label( user_id, label_id, params.artistId ) self.label_permissions_service.add_user_to_artist_teams(label_id, user_id, params.artistId) return self.no_content() @doc(tags=['LabelPermissions']) class LabelPermissionsUsersArtistTeamsView(RegisteredAuthorizedView): label_permissions_service = LabelPermissionsService() artists_validator = ArtistsValidator() users_validator = UsersValidator() @doc(description='Delete artist from multiple artist teams users') @use_kwargs(label_users_artist_team_request_model, location='query') @marshal_with(None, code=204, description='User deleted from artist teams successfully.') @marshal_with(None, code=401, description='User is not authenticated.') @marshal_with(None, code=403, description='User does not have access to the label or not admin.') @marshal_with(None, code=404, description='Label or artist is not found.') def delete(self, params, label_id: int, artist_external_id: str): self.users_validator.validate_label_exist(label_id) self.permissions.can_access_label(label_id) self.artists_validator.validate_all_artists_from_label_by_external_id(label_id, [artist_external_id]) self.artists_validator.validate_request_user_admin_or_artist_team_editor(label_id, artist_external_id) self.users_validator.validate_users_exists_and_from_label(label_id, params.userId) self.artists_validator.validate_artist_have_team_for_users_in_label( artist_external_id, label_id, params.userId ) self.label_permissions_service.delete_users_from_artist_teams(label_id, params.userId, artist_external_id) return self.no_content() @doc(description='Create artist team user and artist teams is needed') @use_kwargs(label_users_artist_team_request_model) @marshal_with(schema=None, code=204, description='Artist teams for users created.') @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 label or not admin.') @marshal_with(schema=None, code=404, description='Label or artist is not found.') def post(self, params, label_id: int, artist_external_id: str): self.users_validator.validate_label_exist(label_id) self.permissions.can_access_label(label_id) self.artists_validator.validate_all_artists_from_label_by_external_id(label_id, [artist_external_id]) self.artists_validator.validate_request_user_admin_or_artist_team_editor(label_id, artist_external_id) self.users_validator.validate_users_exists_and_from_label(label_id, params.userId) self.artists_validator.validate_artist_not_have_team_for_users_in_label( artist_external_id, label_id, params.userId ) self.label_permissions_service.add_users_to_artist_teams(label_id, params.userId, artist_external_id) return self.no_content()