from flask import Blueprint, request, jsonify from flask_jwt_extended import jwt_required from flasgger.utils import swag_from from models.cameras import Cameras from models.service import Service from models.service_roles import ServiceRole from models.user import db camera_bp = Blueprint('camera', __name__, url_prefix='/camera') @camera_bp.route('/', methods=['POST']) @jwt_required() @swag_from('../docs/camera/create.yml') def create_camera(): data = request.get_json() service_id = data.get('service_id') ambiente_id = data.get('ambiente_id') service_role_id = data.get('service_role_id') name = data.get('name') status = data.get('status') description = data.get('description') url = data.get('url') service_instance_id = data.get('service_instance_id') # 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 a Camera já existe com o mesmo nome para o serviço existing_role = Cameras.query.filter_by(service_id=service_id, name=name).first() if existing_role: return jsonify({'error': 'Camera já existe para este serviço'}), 400 # Cria um nova camera camera = Cameras( service_id=service_id, ambiente_id=ambiente_id, service_role_id = service_role_id, name=name, description=description, status=status, url=url, service_instance_id = service_instance_id, ) # Adiciona e comita no banco de dados db.session.add(camera) db.session.commit() return jsonify({'message': 'Camera criada com sucesso', 'camera_id': camera.id}), 201 @camera_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/camera/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 = Cameras.query.paginate(page=page, per_page=per_page, error_out=False) cameras = pagination.items return jsonify({ 'cameras': [ { 'id': camera.id, 'name': camera.name, 'description': camera.description, 'service_id': camera.service_id, 'ambiente_id': camera.ambiente_id, 'service_role_id': camera.service_role_id, 'status': camera.status, 'url':camera.url, 'service_instance_id':camera.service_instance_id } for camera in cameras ], 'total': pagination.total, 'page': pagination.page, 'per_page': pagination.per_page }), 200 @camera_bp.route('/', methods=['GET']) @jwt_required() @swag_from('../docs/camera/get.yml') def get_service_role(camera_id): camera = Cameras.query.get(camera_id) if not camera: return jsonify({'error': 'Camera não encontrada'}), 404 return jsonify({ 'id': camera.id, 'name': camera.name, 'description': camera.description, 'service_id': camera.service_id, 'ambiente_id': camera.ambiente_id, 'service_role_id': camera.service_role_id, 'status': camera.status, 'url':camera.url, 'service_instance_id' : camera.service_instance_id }), 200 @camera_bp.route('/', methods=['PUT']) @jwt_required() @swag_from('../docs/camera/update.yml') def update_camera(camera_id): data = request.get_json() name = data.get('name') description = data.get('description') status=data.get('status') url = data.get('url') ambiente_id = data.get('ambiente_id') service_instance_id = data.get('service_instance_id') camera = Cameras.query.get(camera_id) if not camera: return jsonify({'error': 'Camera não encontrada'}), 404 # Atualiza os campos fornecidos if name: camera.name = name if description: camera.description = description if status: camera.status = status if url : camera.url = url if ambiente_id : camera.ambiente_id = ambiente_id if service_instance_id: camera.service_instance_id = service_instance_id db.session.commit() return jsonify({'message': 'Camera atualizada com sucesso', 'camera_id': camera.id}), 200 @camera_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/camera/delete.yml') def delete_camera(camera_id): camera = Cameras.query.get(camera_id) if not camera: return jsonify({'error': 'Camera não encontrada'}), 404 db.session.delete(camera) db.session.commit() return jsonify({'message': 'Camera deletada com sucesso'}), 200