diff --git a/app.py b/app.py index 8ac4977..8663a15 100644 --- a/app.py +++ b/app.py @@ -142,4 +142,4 @@ if __name__ == "__main__": with app.app_context(): db.create_all() # Cria as tabelas run_all_seeds() - app.run(debug=True, host="0.0.0.0") + app.run(debug=True, host="0.0.0.0", port=5001) diff --git a/docs/ambiente/create.yml b/docs/ambiente/create.yml index b5ef3c6..e6928ec 100644 --- a/docs/ambiente/create.yml +++ b/docs/ambiente/create.yml @@ -1,8 +1,8 @@ tags: - Ambiente summary: Cria um novo ambiente -security: - - bearerAuth: [] +description: + Essa rota permite criar um ambiente associado ao um serviceRole parameters: - in: body name: body diff --git a/docs/ambiente/delete.yml b/docs/ambiente/delete.yml index 056ae1c..23fdced 100644 --- a/docs/ambiente/delete.yml +++ b/docs/ambiente/delete.yml @@ -2,11 +2,14 @@ tags: - Ambiente summary: "Deleta um ambiente" description: "Remove um ambiente do sistema." +security: + - bearerAuth: [] parameters: - - name: "ambiente_id" - in: "path" + - in: "path" + name: "ambiente_id" required: true - type: "integer" + schema: + type: integer description: "ID do ambiente." responses: 200: diff --git a/docs/camera/create.yml b/docs/camera/create.yml index 6e45ff7..41b5d3d 100644 --- a/docs/camera/create.yml +++ b/docs/camera/create.yml @@ -19,6 +19,14 @@ parameters: type: string description: Descrição da localização ou modelo da camera example: "camera entrada modelo xxx." + url: + type: string + description: url para acessar a camera + example: "http://exemplo." + status: + type: string + description: Estado da camera + example: "Ativo." service_id: type: integer description: ID do serviço associado @@ -48,6 +56,12 @@ responses: description: type: string description: Descrição da camera + status: + type: string + description: Status da camera + url: + type: string + description: url para acessar a camera service_id: type: integer description: ID do serviço associado @@ -62,6 +76,8 @@ responses: id: 1 name: "camera entrada" description: "camera sony entrada." + status: "Ativo" + url: "http://exemplo.com" service_id: 3 ambiente_id: 1 service_role_id: 5 diff --git a/docs/camera/get.yml b/docs/camera/get.yml index 9d90602..8d2fc16 100644 --- a/docs/camera/get.yml +++ b/docs/camera/get.yml @@ -19,6 +19,12 @@ responses: description: type: "string" example: "camera hall principal, modelo xxx." + Status: + type: "string" + example: "status da camera." + url: + type: string + description: url para acessar a camera service_id: type: "integer" example: 1 diff --git a/docs/camera/list.yml b/docs/camera/list.yml index cd319f7..d1629f8 100644 --- a/docs/camera/list.yml +++ b/docs/camera/list.yml @@ -11,6 +11,7 @@ parameters: type: integer default: 1 description: Número da página a ser retornada + status: Status da camera - in: query name: per_page required: false @@ -52,6 +53,12 @@ responses: description: type: string description: Descrição da camera + status: + type: string + description: Status da camera + url: + type: string + description: url para acessar a camera service_id: type: integer description: ID do serviço associado @@ -71,12 +78,17 @@ responses: - id: 1 name: "camera 1" description: "camera hall de entrada." + status: "Ativa" + url: "http://exemplo.com" service_id: 1 ambiente_id: 1 service_role_id: 1 + - id: 2 name: "camera 1" description: "camera estoque." + status: "Inativa" + url: "http://exemplo.com" service_id: 1 ambiente_id: 1 service_role_id: 1 diff --git a/docs/camera/update.yml b/docs/camera/update.yml index b9182d5..d8755bc 100644 --- a/docs/camera/update.yml +++ b/docs/camera/update.yml @@ -20,6 +20,18 @@ parameters: schema: type: "string" description: "Descrição da camera." + - name: "status" + in: "body" + required: false + schema: + type: "string" + description: "Status da camera." + - name: "url" + in: "body" + required: false + schema: + type: "string" + description: "url da camera." responses: 200: description: "Camera atualizada com sucesso" diff --git a/docs/users/create.yml b/docs/users/create.yml index 5fd6466..c3f8d18 100644 --- a/docs/users/create.yml +++ b/docs/users/create.yml @@ -6,7 +6,6 @@ Criar usuário ou subordinado description: > Este endpoint permite criar um usuário ou subordinado vinculado a um usuário responsável. parameters: - - in: body name: body required: true diff --git a/models/cameras.py b/models/cameras.py index 12ba766..3139a89 100644 --- a/models/cameras.py +++ b/models/cameras.py @@ -9,6 +9,8 @@ class Cameras(db.Model): service_role_id = db.Column(db.Integer, db.ForeignKey('service_roles.id'), nullable=False) name = db.Column(db.String(255), nullable=False) description = db.Column(db.Text, nullable=True) + status = db.Column(db.Text, nullable=True) + url = db.Column(db.Text, nullable=True) created_at = db.Column(db.DateTime, default=db.func.current_timestamp()) updated_at = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp()) diff --git a/routes/ambiente.py b/routes/ambiente.py index 5d759bf..8858fdb 100644 --- a/routes/ambiente.py +++ b/routes/ambiente.py @@ -41,3 +41,79 @@ def create_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 diff --git a/routes/cameras.py b/routes/cameras.py index 50e470f..db27f52 100644 --- a/routes/cameras.py +++ b/routes/cameras.py @@ -17,7 +17,9 @@ def create_camera(): 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') # Verifica se o serviço existe service = Service.query.get(service_id) @@ -29,13 +31,16 @@ def create_camera(): if existing_role: return jsonify({'error': 'Camera já existe para este serviço'}), 400 - # Cria um novo ServiceRole + # Cria um nova camera camera = Cameras( service_id=service_id, ambiente_id=ambiente_id, service_role_id = service_role_id, name=name, - description=description + description=description, + status=status, + url=url, + ) # Adiciona e comita no banco de dados @@ -62,7 +67,9 @@ def list_service_roles(): 'description': camera.description, 'service_id': camera.service_id, 'ambiente_id': camera.ambiente_id, - 'service_role_id': camera.service_role_id + 'service_role_id': camera.service_role_id, + 'status': camera.status, + 'url':camera.url, } for camera in cameras ], 'total': pagination.total, @@ -84,7 +91,9 @@ def get_service_role(camera_id): 'description': camera.description, 'service_id': camera.service_id, 'ambiente_id': camera.ambiente_id, - 'service_role_id': camera.service_role_id + 'service_role_id': camera.service_role_id, + 'status': camera.status, + 'url':camera.url, }), 200 @camera_bp.route('/', methods=['PUT']) @@ -94,6 +103,9 @@ 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') camera = Cameras.query.get(camera_id) if not camera: @@ -104,6 +116,12 @@ def update_camera(camera_id): 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 db.session.commit() @@ -112,7 +130,7 @@ def update_camera(camera_id): @camera_bp.route('/', methods=['DELETE']) @jwt_required() @swag_from('../docs/camera/delete.yml') -def delete_service_role(camera_id): +def delete_camera(camera_id): camera = Cameras.query.get(camera_id) if not camera: return jsonify({'error': 'Camera não encontrada'}), 404