149 lines
4.8 KiB
Python
149 lines
4.8 KiB
Python
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('/<int:camera_id>', 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('/<int:camera_id>', 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('/<int:camera_id>', 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
|