front_ponto_eletronico/routes/service_instance.py
2025-04-28 19:33:52 -03:00

86 lines
3.1 KiB
Python

from flask import Blueprint, request, jsonify
from flask_jwt_extended import jwt_required
from flasgger.utils import swag_from
from models.service_instance import ServiceInstance
from models.service import Service
from models.user import db
service_instance_bp = Blueprint('service_instance', __name__, url_prefix='/service_instance')
@service_instance_bp.route('/', methods=['POST'])
@jwt_required()
@swag_from('../docs/service_instance/create.yml')
def create_service_instance():
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
# Cria um novo ServiceInstance
service_instance = ServiceInstance(
service_id=service_id,
name=name,
description=description
)
# Adiciona e comita no banco de dados
db.session.add(service_instance)
db.session.commit()
return jsonify({'message': 'Instância de serviço criada com sucesso', 'service_instance_id': service_instance.id}), 201
@service_instance_bp.route('/', methods=['GET'])
@jwt_required()
@swag_from('../docs/service_instance/get.yml')
def list_ambiente():
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
pagination = ServiceInstance.query.paginate(page=page, per_page=per_page, error_out=False)
service_instances = pagination.items
return jsonify({
'service_instance': [
{
'id': service_instance.id,
'name': service_instance.name,
'description': service_instance.description,
'service_id': service_instance.service_id
} for service_instance in service_instances
],
'total': pagination.total,
'page': pagination.page,
'per_page': pagination.per_page
}), 200
@service_instance_bp.route('/get-id-by-name/<string:nome>', methods=['GET'])
@jwt_required()
@swag_from('../docs/service_instance/get_id_by_name.yml')
def get_service_instance_id_by_name(nome):
if not nome:
return jsonify({'error': 'Nome não fornecido'}), 400
service_instance = ServiceInstance.query.filter_by(name=nome).first()
if not service_instance:
return jsonify({'error': 'Instância de serviço não encontrada'}), 404
return jsonify({'id': service_instance.id}), 200
@service_instance_bp.route('/<int:service_instance_id>', methods=['DELETE'])
@jwt_required()
@swag_from('../docs/service_instance/delete.yml')
def delete_service_instance(service_instance_id):
service_instance = ServiceInstance.query.get(service_instance_id)
if not service_instance:
return jsonify({'error': 'Instância de serviço não encontrada'}), 404
db.session.delete(service_instance)
db.session.commit()
return jsonify({'message': 'Instância de serviço excluída com sucesso'}), 200