From b1a4e48f4a0d58c6d70023657427e8b70f382280 Mon Sep 17 00:00:00 2001
From: Thais Ferreira
Date: Mon, 31 Mar 2025 12:01:39 -0300
Subject: [PATCH] Mesclagem de arquivos
---
app.py | 2 +
docs/camera/create.yml | 8 +++
docs/camera/get.yml | 3 +
docs/camera/list.yml | 2 +
docs/camera/update.yml | 6 ++
docs/service_instance/get.yml | 99 +++++++++++++++++++++++++++++++
models/cameras.py | 1 +
routes/cameras.py | 7 +++
routes/service_instance.py | 31 ++++++++++
seeds/ambiente_seed.py | 12 ++--
seeds/camera_seed.py | 2 +
seeds/delet.py | 35 +++++++++++
seeds/run_seed.py | 3 +-
seeds/service_instances_seed.py | 6 +-
seeds/service_role_permissions.py | 79 ++++++++++++------------
seeds/service_roles.py | 2 +
seeds/services_seed.py | 1 +
seeds/user_service_roles.py | 2 +-
seeds/users_seed.py | 28 +++++++++
19 files changed, 281 insertions(+), 48 deletions(-)
create mode 100644 docs/service_instance/get.yml
create mode 100644 routes/service_instance.py
create mode 100644 seeds/delet.py
diff --git a/app.py b/app.py
index a773c47..da2e0da 100644
--- a/app.py
+++ b/app.py
@@ -20,6 +20,7 @@ from routes.service import service_bp
from routes.service_roles import service_role_bp
from routes.cameras import camera_bp
from routes.ambiente import ambiente_bp
+from routes.service_instance import service_instance_bp
from routes.reports import employee_bp
import logging
from dotenv import load_dotenv
@@ -119,6 +120,7 @@ def create_app():
app.register_blueprint(user_service_role_bp)
app.register_blueprint(camera_bp)
app.register_blueprint(ambiente_bp)
+ app.register_blueprint(service_instance_bp)
# Testa a conexão com o banco de dados
with app.app_context():
diff --git a/docs/camera/create.yml b/docs/camera/create.yml
index 41b5d3d..78eaabd 100644
--- a/docs/camera/create.yml
+++ b/docs/camera/create.yml
@@ -31,6 +31,10 @@ parameters:
type: integer
description: ID do serviço associado
example: 1
+ service_instance_id:
+ type: integer
+ description: ID da empresa associada
+ example: 1
ambiente_id:
type: integer
description: ID do serviço associado
@@ -65,6 +69,9 @@ responses:
service_id:
type: integer
description: ID do serviço associado
+ service_instance_id:
+ type: integer
+ description: ID da empresa associada
ambiente_id:
type: integer
description: ID do ambiente_id
@@ -81,6 +88,7 @@ responses:
service_id: 3
ambiente_id: 1
service_role_id: 5
+ service_instance_id: 1
400:
description: Requisição inválida (dados incorretos ou ausentes)
content:
diff --git a/docs/camera/get.yml b/docs/camera/get.yml
index 8d2fc16..d6339d5 100644
--- a/docs/camera/get.yml
+++ b/docs/camera/get.yml
@@ -34,6 +34,9 @@ responses:
service_role_id:
type: "integer"
example: 1
+ service_instance_id:
+ type: "integer"
+ example: 1
404:
description: "Função de serviço não encontrada"
schema:
diff --git a/docs/camera/list.yml b/docs/camera/list.yml
index d1629f8..c336f74 100644
--- a/docs/camera/list.yml
+++ b/docs/camera/list.yml
@@ -83,6 +83,7 @@ responses:
service_id: 1
ambiente_id: 1
service_role_id: 1
+ service_instance_id: 1
- id: 2
name: "camera 1"
@@ -92,6 +93,7 @@ responses:
service_id: 1
ambiente_id: 1
service_role_id: 1
+ service_instance_id: 1
401:
description: Token inválido ou ausente
content:
diff --git a/docs/camera/update.yml b/docs/camera/update.yml
index d8755bc..e7c3781 100644
--- a/docs/camera/update.yml
+++ b/docs/camera/update.yml
@@ -32,6 +32,12 @@ parameters:
schema:
type: "string"
description: "url da camera."
+ - name: "service_instance_id"
+ in: "body"
+ required: false
+ schema:
+ type: "integer"
+ description: "empresa associada a camera."
responses:
200:
description: "Camera atualizada com sucesso"
diff --git a/docs/service_instance/get.yml b/docs/service_instance/get.yml
new file mode 100644
index 0000000..51352c8
--- /dev/null
+++ b/docs/service_instance/get.yml
@@ -0,0 +1,99 @@
+tags:
+ - Service Instance
+summary: Lista todas as Empresas.
+security:
+ - bearerAuth: []
+parameters:
+ - in: query
+ name: page
+ required: false
+ schema:
+ type: integer
+ default: 1
+ description: Número da página a ser retornada
+ status: Status da empresa
+ - in: query
+ name: per_page
+ required: false
+ schema:
+ type: integer
+ default: 10
+ description: Número de funções de serviço por página
+responses:
+ 200:
+ description: Lista de cameras com informações de paginação
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ total:
+ type: integer
+ description: Número total de funções de serviço
+ pages:
+ type: integer
+ description: Número total de páginas
+ current_page:
+ type: integer
+ description: Página atual
+ per_page:
+ type: integer
+ description: Número de itens por página
+ roles:
+ type: array
+ items:
+ type: object
+ properties:
+ id:
+ type: integer
+ description: ID da empresa
+ name:
+ type: string
+ description: Nome da empresa
+ description:
+ type: string
+ description: Descrição da empresa
+ service_id:
+ type: integer
+ description: ID do serviço associado
+
+ examples:
+ application/json:
+ total: 2
+ pages: 1
+ current_page: 1
+ per_page: 10
+ roles:
+ - id: 1
+ name: "Farmacia"
+ description: "farmacia 1"
+ service_id: 1
+
+ - id: 2
+ name: "Farmacia 2"
+ description: "Farmacia 2"
+ service_id: 1
+ 401:
+ description: Token inválido ou ausente
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ error:
+ type: string
+ examples:
+ application/json:
+ error: "Token inválido ou ausente"
+ 404:
+ description: Nenhuma camera encontrada
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ error:
+ type: string
+ examples:
+ application/json:
+ error: "Nenhuma camera encontrada"
diff --git a/models/cameras.py b/models/cameras.py
index 3139a89..8760152 100644
--- a/models/cameras.py
+++ b/models/cameras.py
@@ -6,6 +6,7 @@ class Cameras(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
service_id = db.Column(db.Integer, db.ForeignKey('service.id'), nullable=False)
ambiente_id = db.Column(db.Integer, db.ForeignKey('ambiente.id'), nullable=False)
+ service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=False)
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)
diff --git a/routes/cameras.py b/routes/cameras.py
index db27f52..6946f89 100644
--- a/routes/cameras.py
+++ b/routes/cameras.py
@@ -20,6 +20,7 @@ def create_camera():
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)
@@ -40,6 +41,7 @@ def create_camera():
description=description,
status=status,
url=url,
+ service_instance_id = service_instance_id,
)
@@ -70,6 +72,7 @@ def list_service_roles():
'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,
@@ -94,6 +97,7 @@ def get_service_role(camera_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'])
@@ -106,6 +110,7 @@ def update_camera(camera_id):
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:
@@ -122,6 +127,8 @@ def update_camera(camera_id):
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()
diff --git a/routes/service_instance.py b/routes/service_instance.py
new file mode 100644
index 0000000..d61e96e
--- /dev/null
+++ b/routes/service_instance.py
@@ -0,0 +1,31 @@
+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
+
+service_instance_bp = Blueprint('service_instance', __name__, url_prefix='/service_instance')
+
+@service_instance_bp.route('/', methods=['GET'])
+@jwt_required()
+@swag_from('../docs/service_instance/list.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
diff --git a/seeds/ambiente_seed.py b/seeds/ambiente_seed.py
index e01c1d2..3106413 100644
--- a/seeds/ambiente_seed.py
+++ b/seeds/ambiente_seed.py
@@ -5,18 +5,20 @@ def seed_ambiente():
ambientes = [
# Ambiente 1
{
- "service_id": 4,
+ "service_id": 1,
"service_role_id":4,
"name": "Entrada",
- "description": " Hall de Entrada, apresenta 3 cameras."
+ "description": " Hall de Entrada, apresenta 3 cameras.",
+ "status":"Active"
},
# Ambiente 2
{
- "service_id": 4,
+ "service_id": 1,
"service_role_id":4,
"name": "Estoque",
- "description": "Estoque, apresenta 3 cameras."
+ "description": "Estoque, apresenta 3 cameras.",
+ "status":"Active"
},
]
for ambiente_data in ambientes:
@@ -34,7 +36,9 @@ def seed_ambiente():
name=ambiente_data["name"],
description=ambiente_data["description"]
)
+ print("antes do banco")
db.session.add(ambiente)
+ print("adiconei no banco")
# Commit a transação para salvar os dados no banco
db.session.commit()
diff --git a/seeds/camera_seed.py b/seeds/camera_seed.py
index ce59af0..95f4da5 100644
--- a/seeds/camera_seed.py
+++ b/seeds/camera_seed.py
@@ -10,6 +10,7 @@ def seed_cameras():
"service_role_id":3,
"name": "Camera Hall de Entrada",
"description": "Camera 1 Hall de entrada, modelo XXX.",
+ "url":"http://testecameraentrada",
"status":"Active"
},
@@ -20,6 +21,7 @@ def seed_cameras():
"service_role_id":3,
"name": "Camera Estoque",
"description": "Camera 1 Estoque, modelo XXX.",
+ "url":"http://testecamerestoque",
"status":"Active"
},
]
diff --git a/seeds/delet.py b/seeds/delet.py
new file mode 100644
index 0000000..d31aa76
--- /dev/null
+++ b/seeds/delet.py
@@ -0,0 +1,35 @@
+import sys
+import os
+from flask import Flask
+
+from dotenv import load_dotenv
+
+# Carrega variáveis do .env
+load_dotenv()
+
+# Adiciona o diretório raiz do projeto ao sys.path
+sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+from extensions import db
+app = Flask(__name__)
+
+# Configuração do banco de dados usando o .env
+app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL')
+app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
+
+# Inicializa o db
+db.init_app(app)
+
+def clear_all_tables():
+ try:
+ with app.app_context():
+ meta = db.metadata
+ for table in reversed(meta.sorted_tables):
+ print(f"Apagando dados da tabela: {table.name}")
+ # Comando para excluir os dados
+ result = db.session.execute(table.delete())
+ db.session.commit()
+ print(f"✅ Dados apagados da tabela {table.name}")
+ except Exception as e:
+ print(f"Erro ao apagar dados: {e}")
+
+clear_all_tables()
diff --git a/seeds/run_seed.py b/seeds/run_seed.py
index 9b8c6ae..129b8a3 100644
--- a/seeds/run_seed.py
+++ b/seeds/run_seed.py
@@ -30,9 +30,10 @@ def run_all_seeds():
seed_contacts()
seed_user_service_roles()
seed_licenses()
- seed_cameras()
seed_ambiente()
reports_seed()
+ seed_cameras()
+
print("Seeds executados com sucesso!")
except Exception as e:
db.session.rollback()
diff --git a/seeds/service_instances_seed.py b/seeds/service_instances_seed.py
index 084dea1..f53960c 100644
--- a/seeds/service_instances_seed.py
+++ b/seeds/service_instances_seed.py
@@ -21,9 +21,9 @@ def seed_service_instances():
# Verifica se as instâncias de serviço já existem, caso contrário, cria
instances_data = [
- {"service_id": service_1.id, "name": "Farmácia 1", "description": "Instância para Farmácia 1"},
- #{"service_id": service_1.id, "name": "Escola Beta", "description": "Instância para Escola Beta"},
- #{"service_id": service_2.id, "name": "Campus Principal", "description": "Controle de Acesso Campus"},
+ {"service_id": service_1.id, "name": "Drograsil", "description": "Instância para Farmácia Drogasil"},
+ {"service_id": service_1.id, "name": "Fogo de Chão", "description": "Instância para Escola Fogo de Chão"},
+ {"service_id": service_1.id, "name": "Sabin", "description": "Instancia para Farmacia Sabin"},
]
for instance_data in instances_data:
diff --git a/seeds/service_role_permissions.py b/seeds/service_role_permissions.py
index 6bcbe0c..be2904c 100644
--- a/seeds/service_role_permissions.py
+++ b/seeds/service_role_permissions.py
@@ -6,11 +6,12 @@ from models.user import User
from extensions import db
def seed_service_role_permissions():
- user = User.query.first() # Obtém o primeiro usuário para fins de exemplo
+ users = User.query.filter(User.id.in_([1, 3, 5])).all() # Alterado para considerar usuarios admins
+
service_instance = ServiceInstance.query.first() # Obtém a primeira instância de serviço
# Verifica se há um usuário e uma instância de serviço
- if user and service_instance:
+ if users and service_instance:
# Define as permissões que você deseja atribuir
permissions = [
{'name': "Read Access", 'description': "Permission to read data", 'type': 'read'},
@@ -18,49 +19,49 @@ def seed_service_role_permissions():
{'name': "Edit Access", 'description': "Permission to edit data", 'type': 'edit'},
{'name': "Delete Access", 'description': "Permission to delete data", 'type': 'delete'},
]
+ for user in users:
+ # Itera sobre todos os service roles (1 a 10)
+ for service_role_id in range(1, 11): # Para cada role de 1 até 10
+ service_role = ServiceRole.query.get(service_role_id)
+ if not service_role:
+ print(f"ServiceRole com id {service_role_id} não encontrado.")
+ continue # Se o service_role não existir, pula
- # Itera sobre todos os service roles (1 a 10)
- for service_role_id in range(1, 11): # Para cada role de 1 até 10
- service_role = ServiceRole.query.get(service_role_id)
- if not service_role:
- print(f"ServiceRole com id {service_role_id} não encontrado.")
- continue # Se o service_role não existir, pula
+ # Para cada permissão definida, associa ao service role
+ for perm in permissions:
+ # Verifica se a permissão já existe no banco de dados
+ existing_permission = Permission.query.filter_by(name=perm['name']).first()
+ if not existing_permission:
+ # Se a permissão não existir, cria e adiciona ao banco
+ permission = Permission(name=perm['name'], description=perm['description'])
+ db.session.add(permission)
+ db.session.commit()
+ print(f"Permissão '{perm['name']}' criada com sucesso.")
+ else:
+ permission = existing_permission
- # Para cada permissão definida, associa ao service role
- for perm in permissions:
- # Verifica se a permissão já existe no banco de dados
- existing_permission = Permission.query.filter_by(name=perm['name']).first()
- if not existing_permission:
- # Se a permissão não existir, cria e adiciona ao banco
- permission = Permission(name=perm['name'], description=perm['description'])
- db.session.add(permission)
- db.session.commit()
- print(f"Permissão '{perm['name']}' criada com sucesso.")
- else:
- permission = existing_permission
-
- # Verifica se a permissão de papel de serviço já existe
- existing_permission_role = ServiceRolePermission.query.filter_by(
- service_role_id=service_role.id,
- service_instance_id=service_instance.id,
- permission_id=permission.id,
- user_id=user.id
- ).first()
-
- if not existing_permission_role:
- # Se a permissão de papel de serviço não existir, cria e adiciona ao banco
- service_role_permission = ServiceRolePermission(
+ # Verifica se a permissão de papel de serviço já existe
+ existing_permission_role = ServiceRolePermission.query.filter_by(
service_role_id=service_role.id,
service_instance_id=service_instance.id,
permission_id=permission.id,
- permission_type=perm['type'], # Definindo o tipo de permissão (read, write, etc.)
user_id=user.id
- )
- db.session.add(service_role_permission)
- db.session.commit()
- print(f"Permissão de papel de serviço '{perm['name']}' atribuída com sucesso para o role '{service_role.name}'.")
- else:
- print(f"Permissão de papel de serviço '{perm['name']}' já atribuída para o role '{service_role.name}'.")
+ ).first()
+
+ if not existing_permission_role:
+ # Se a permissão de papel de serviço não existir, cria e adiciona ao banco
+ service_role_permission = ServiceRolePermission(
+ service_role_id=service_role.id,
+ service_instance_id=service_instance.id,
+ permission_id=permission.id,
+ permission_type=perm['type'], # Definindo o tipo de permissão (read, write, etc.)
+ user_id=user.id
+ )
+ db.session.add(service_role_permission)
+ db.session.commit()
+ print(f"Permissão de papel de serviço '{perm['name']}' atribuída com sucesso para o role '{service_role.name}'.")
+ else:
+ print(f"Permissão de papel de serviço '{perm['name']}' já atribuída para o role '{service_role.name}'.")
else:
print("Usuário ou instância de serviço não encontrados.")
diff --git a/seeds/service_roles.py b/seeds/service_roles.py
index d32a2a8..ff7fcf2 100644
--- a/seeds/service_roles.py
+++ b/seeds/service_roles.py
@@ -3,6 +3,7 @@ from models.service_roles import ServiceRole
def seed_service_roles():
roles = [
+ #-------------------- Farmacia 1 ----------------------------------------
# Colaboradores Internos Role: Gestão de câmeras
{
"service_id": 1,
@@ -58,6 +59,7 @@ def seed_service_roles():
"name": "Admin",
"description": "Coordenador de plataforma."
},
+
]
# Verificar se o role já existe antes de criar
diff --git a/seeds/services_seed.py b/seeds/services_seed.py
index e22fec6..248d4a6 100644
--- a/seeds/services_seed.py
+++ b/seeds/services_seed.py
@@ -5,6 +5,7 @@ def seed_services():
services = [
#{"name": "Chamada Escolar Pro", "description": "Sistema de gestão para escolas"},
{"name": "Controle de Acesso", "description": "Gestão de acessos virtuais"},
+ {"name": "Controle de Camera", "description": "Gestão de Camera"}
]
for service_data in services:
diff --git a/seeds/user_service_roles.py b/seeds/user_service_roles.py
index 9e19cf6..4601f6a 100644
--- a/seeds/user_service_roles.py
+++ b/seeds/user_service_roles.py
@@ -7,7 +7,7 @@ def seed_user_service_roles():
service_instance_id = 1 # Exemplo: instância de serviço para associar os papéis
# Criar até 10 service_role_ids para o usuário 1 na instância 1
- for service_role_id in range(1, 11): # Gerando service_role_id de 1 até 10
+ for service_role_id in range(1, 9): # Gerando service_role_id de 1 até 10
user_role = UserServiceRole(
user_id=user_id,
service_instance_id=service_instance_id,
diff --git a/seeds/users_seed.py b/seeds/users_seed.py
index 16169bc..ef31dc1 100644
--- a/seeds/users_seed.py
+++ b/seeds/users_seed.py
@@ -5,6 +5,7 @@ from sqlalchemy.exc import IntegrityError
def seed_users():
# Lista de usuários para criar
users_data = [
+ #---login farmacia 1-----
{
"username": "admin",
"email": "admin@exemplo.com",
@@ -17,6 +18,33 @@ def seed_users():
"phone": "987654321",
"password": "senha456"
},
+ #-----login farmacia 2--------
+ {
+ "username": "fogo_admin",
+ "email": "fogodechaoadmin@exemplo.com",
+ "phone": "983749265",
+ "password": "senha123"
+ },
+ {
+ "username": "fogo_user_2",
+ "email": "fogodechaouser2@exemplo.com",
+ "phone": "983084637",
+ "password": "senha456"
+ },
+ #----------login farmacia 3----------
+ {
+ "username": "sabin_admin",
+ "email": "sabinadmin@exemplo.com",
+ "phone": "983749265",
+ "password": "senha123"
+ },
+ {
+ "username": "sabin_user_2",
+ "email": "sabinuser2@exemplo.com",
+ "phone": "983086725",
+ "password": "senha456"
+ },
+
]
users_added = False # Flag para verificar se algum usuário foi adicionado