from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.service import Service from models.service_roles import ServiceRole from models.ambiente import Ambiente from models.user import db ambiente_bp = Blueprint('ambiente', __name__, url_prefix='/ambiente') @ambiente_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/ambiente/create.yml') def create_ambiente(): data = request.get_json() service_id = data.get('service_id') service_role_id = data.get('service_role_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 ambiente já existe com o mesmo nome. 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 ambiente = Ambiente( service_id=service_id, service_role_id = service_role_id, name=name, description=description ) # Adiciona e comita no banco de dados db.session.add(ambiente) db.session.commit() return jsonify({'message': 'ambiente criado com sucesso', 'ambiente_id': ambiente.id}), 201 @ambiente_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/ambiente/list.yml') def list_ambiente(): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) pagination = Ambiente.query.paginate(page=page, per_page=per_page, error_out=False) ambientes = pagination.items return jsonify({ 'ambiente': [ { 'id': ambiente.id, 'name': ambiente.name, 'description': ambiente.description, 'service_id': ambiente.service_id, 'service_role_id': ambiente.service_role_id } for ambiente in ambientes ], 'total': pagination.total, 'page': pagination.page, 'per_page': pagination.per_page }), 200 @ambiente_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/ambiente/get.yml') def get_ambiente(ambiente_id): ambiente = Ambiente.query.get(ambiente_id) if not ambiente: return jsonify({'error': 'Camera não encontrada'}), 404 return jsonify({ 'id': ambiente.id, 'name': ambiente.name, 'description': ambiente.description, 'service_id': ambiente.service_id, 'service_role_id': ambiente.service_role_id }), 200 @ambiente_bp.route('/', methods=['PUT']) @jwt_required() @swag_from('../docs/ambiente/update.yml') def update_camera(ambiente_id): data = request.get_json() name = data.get('name') description = data.get('description') ambiente = Ambiente.query.get(ambiente_id) if not ambiente: return jsonify({'error': 'Camera não encontrada'}), 404 # Atualiza os campos fornecidos if name: ambiente.name = name if description: ambiente.description = description db.session.commit() return jsonify({'message': 'Ambiente atualizada com sucesso', 'ambiente_id': ambiente.id}), 200 @ambiente_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/ambiente/delete.yml') def delete_ambiente(ambiente_id): ambiente = Ambiente.query.get(ambiente_id) if not ambiente: return jsonify({'error': 'Ambiente não encontrada'}), 404 db.session.delete(ambiente) db.session.commit() return jsonify({'message': 'Ambiente deletada com sucesso'}), 200