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