from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.service_roles import ServiceRole from models.service import Service from models.user import db service_role_bp = Blueprint('service_role', __name__, url_prefix='/service_roles') @service_role_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/service_roles/create.yml') def create_service_role(): data = request.get_json() service_id = data.get('service_id') name = data.get('name') description = data.get('description') # Verifica se o serviço existe service = Service.query.get(service_id) if not service: return jsonify({'error': 'Serviço não encontrado'}), 404 # Verifica se o ServiceRole já existe com o mesmo nome para o serviço existing_role = ServiceRole.query.filter_by(service_id=service_id, name=name).first() if existing_role: return jsonify({'error': 'Função de serviço já existe para este serviço'}), 400 # Cria um novo ServiceRole service_role = ServiceRole( service_id=service_id, name=name, description=description ) # Adiciona e comita no banco de dados db.session.add(service_role) db.session.commit() return jsonify({'message': 'Função de serviço criada com sucesso', 'role_id': service_role.id}), 201 @service_role_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/service_roles/list.yml') def list_service_roles(): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) pagination = ServiceRole.query.paginate(page=page, per_page=per_page, error_out=False) roles = pagination.items return jsonify({ 'roles': [ { 'id': role.id, 'name': role.name, 'description': role.description, 'service_id': role.service_id } for role in roles ], 'total': pagination.total, 'page': pagination.page, 'per_page': pagination.per_page }), 200 @service_role_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/service_roles/get.yml') def get_service_role(role_id): role = ServiceRole.query.get(role_id) if not role: return jsonify({'error': 'Função de serviço não encontrada'}), 404 return jsonify({ 'id': role.id, 'name': role.name, 'description': role.description, 'service_id': role.service_id }), 200 @service_role_bp.route('/', methods=['PUT']) @jwt_required() @swag_from('../docs/service_roles/update.yml') def update_service_role(role_id): data = request.get_json() name = data.get('name') description = data.get('description') role = ServiceRole.query.get(role_id) if not role: return jsonify({'error': 'Função de serviço não encontrada'}), 404 # Atualiza os campos fornecidos if name: role.name = name if description: role.description = description db.session.commit() return jsonify({'message': 'Função de serviço atualizada com sucesso', 'role_id': role.id}), 200 @service_role_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/service_roles/delete.yml') def delete_service_role(role_id): role = ServiceRole.query.get(role_id) if not role: return jsonify({'error': 'Função de serviço não encontrada'}), 404 db.session.delete(role) db.session.commit() return jsonify({'message': 'Função de serviço deletada com sucesso'}), 200