front_ponto_eletronico/routes/permissions.py
2025-03-17 15:00:51 -03:00

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