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('/', 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('/', 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