99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
from flask import Blueprint, request, jsonify
|
|
from flask_jwt_extended import jwt_required
|
|
from flasgger.utils import swag_from
|
|
from models.permission import Permission, db
|
|
|
|
permission_bp = Blueprint('permission', __name__, url_prefix='/permissions')
|
|
|
|
@permission_bp.route('/', methods=['POST'])
|
|
@jwt_required()
|
|
@swag_from('../docs/permissions/create.yml') # Adiciona a documentação do Swagger
|
|
def create_permission():
|
|
data = request.get_json()
|
|
name = data.get('name')
|
|
description = data.get('description')
|
|
|
|
# Verifica se a permissão já existe
|
|
if Permission.query.filter_by(name=name).first():
|
|
return jsonify({'error': 'Permissão já existe'}), 400
|
|
|
|
# Cria a permissão
|
|
permission = Permission(name=name, description=description)
|
|
|
|
# Adiciona e comita no banco de dados
|
|
db.session.add(permission)
|
|
db.session.commit()
|
|
|
|
return jsonify({'message': 'Permissão criada com sucesso'}), 201
|
|
|
|
|
|
|
|
|
|
@permission_bp.route('/', methods=['GET'])
|
|
@jwt_required()
|
|
@swag_from('../docs/permissions/list.yml') # Adiciona a documentação do Swagger
|
|
def list_permissions():
|
|
page = request.args.get('page', 1, type=int)
|
|
per_page = request.args.get('per_page', 10, type=int)
|
|
permission_id = request.args.get('permission_id', type=int)
|
|
|
|
query = Permission.query
|
|
|
|
# Caso o cliente deseje filtrar pelo ID da permissão
|
|
if permission_id:
|
|
query = query.filter_by(id=permission_id)
|
|
|
|
# Paginação dos resultados
|
|
permissions_paginated = query.paginate(page=page, per_page=per_page, error_out=False)
|
|
|
|
return jsonify({
|
|
'permissions': [
|
|
{
|
|
'id': p.id,
|
|
'name': p.name,
|
|
'description': p.description
|
|
} for p in permissions_paginated.items
|
|
]
|
|
}), 200
|
|
|
|
|
|
|
|
|
|
@permission_bp.route('/<int:permission_id>', methods=['PUT'])
|
|
@jwt_required()
|
|
@swag_from('../docs/permissions/update.yml') # Adiciona a documentação do Swagger
|
|
def update_permission(permission_id):
|
|
data = request.get_json()
|
|
|
|
# Busca a permissão pelo ID
|
|
permission = Permission.query.get(permission_id)
|
|
|
|
if not permission: # Verifica se a permissão existe
|
|
return jsonify({'msg': 'Permissão não encontrada.'}), 404
|
|
|
|
# Atualiza os dados da permissão
|
|
permission.name = data.get('name', permission.name)
|
|
permission.description = data.get('description', permission.description)
|
|
|
|
db.session.commit()
|
|
|
|
return jsonify({'msg': 'Permissão atualizada com sucesso.'}), 200
|
|
|
|
|
|
|
|
|
|
@permission_bp.route('/<int:permission_id>', methods=['DELETE'])
|
|
@jwt_required()
|
|
@swag_from('../docs/permissions/delete.yml') # Adiciona a documentação do Swagger
|
|
def delete_permission(permission_id):
|
|
permission = Permission.query.get(permission_id)
|
|
|
|
if not permission: # Verifica se a permissão existe
|
|
return jsonify({'msg': 'Permissão não encontrada.'}), 404
|
|
|
|
# Deleta a permissão
|
|
db.session.delete(permission)
|
|
db.session.commit()
|
|
|
|
return jsonify({'msg': 'Permissão excluída com sucesso.'}), 200
|