from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from extensions import db from models.service_role_permission import ServiceRolePermission from models.user_service_role import UserServiceRole # Importa o modelo UserServiceRole user_service_role_bp = Blueprint('user_service_role', __name__, url_prefix='/user_service_roles') # Endpoint para criar um UserServiceRole @user_service_role_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/user_service_roles/create.yml') def create_user_service_role(): data = request.get_json() # Cria um novo UserServiceRole user_service_role = UserServiceRole( user_id=data['user_id'], service_instance_id=data['service_instance_id'], service_role_id=data['service_role_id'] ) db.session.add(user_service_role) db.session.commit() # Adiciona as permissões à tabela service_role_permissions permissions = data.get('permissions', []) for permission_data in permissions: permission = ServiceRolePermission( service_role_id=user_service_role.service_role_id, service_instance_id=user_service_role.service_instance_id, permission_id=permission_data['permission_id'], permission_type=permission_data['permission_type'], user_id=user_service_role.user_id ) db.session.add(permission) db.session.commit() return jsonify({ 'message': 'UserServiceRole criado com sucesso', 'id': user_service_role.id }), 201 # Endpoint para listar todos os UserServiceRoles com paginação @user_service_role_bp.route('/', methods=['GET']) @jwt_required() #@swag_from('../docs/user_service_roles/list.yml') def list_user_service_roles(): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) pagination = UserServiceRole.query.paginate(page=page, per_page=per_page, error_out=False) user_service_roles = pagination.items return jsonify({ 'user_service_roles': [ { 'id': user_service_role.id, 'user_id': user_service_role.user_id, 'service_instance_id': user_service_role.service_instance_id, 'service_role_id': user_service_role.service_role_id, 'created_at': user_service_role.created_at, 'updated_at': user_service_role.updated_at } for user_service_role in user_service_roles ], 'total': pagination.total, 'page': pagination.page, 'per_page': pagination.per_page }), 200 # Endpoint para buscar um UserServiceRole pelo ID @user_service_role_bp.route('/', methods=['GET']) @jwt_required() #@swag_from('../docs/user_service_roles/get_by_id.yml') def get_user_service_role(user_service_role_id): user_service_role = UserServiceRole.query.get_or_404(user_service_role_id) return jsonify({ 'id': user_service_role.id, 'user_id': user_service_role.user_id, 'service_instance_id': user_service_role.service_instance_id, 'service_role_id': user_service_role.service_role_id, 'created_at': user_service_role.created_at, 'updated_at': user_service_role.updated_at }), 200 # Endpoint para atualizar um UserServiceRole @user_service_role_bp.route('/', methods=['PUT']) @jwt_required() #@swag_from('../docs/user_service_roles/update.yml') def update_user_service_role(user_service_role_id): data = request.get_json() user_service_role = UserServiceRole.query.get_or_404(user_service_role_id) # Atualiza os campos fornecidos if 'user_id' in data and data['user_id'] != user_service_role.user_id: user_service_role.user_id = data['user_id'] if 'service_instance_id' in data and data['service_instance_id'] != user_service_role.service_instance_id: user_service_role.service_instance_id = data['service_instance_id'] if 'service_role_id' in data and data['service_role_id'] != user_service_role.service_role_id: user_service_role.service_role_id = data['service_role_id'] db.session.commit() return jsonify({'message': 'UserServiceRole atualizado com sucesso'}), 200 # Endpoint para excluir um UserServiceRole @user_service_role_bp.route('/', methods=['DELETE']) @jwt_required() #@swag_from('../docs/user_service_roles/delete.yml') def delete_user_service_role(user_service_role_id): user_service_role = UserServiceRole.query.get_or_404(user_service_role_id) db.session.delete(user_service_role) db.session.commit() return jsonify({'message': 'UserServiceRole excluído com sucesso'}), 200