122 lines
4.7 KiB
Python
122 lines
4.7 KiB
Python
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('/<int:user_service_role_id>', 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('/<int:user_service_role_id>', 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('/<int:user_service_role_id>', 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
|