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

116 lines
3.6 KiB
Python

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