Mesclagem de arquivos

This commit is contained in:
Thais Ferreira 2025-03-31 12:01:39 -03:00
parent 3d6821682b
commit b1a4e48f4a
19 changed files with 281 additions and 48 deletions

2
app.py
View File

@ -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():

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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"

View File

@ -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"

View File

@ -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)

View File

@ -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('/<int:camera_id>', 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()

View File

@ -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

View File

@ -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()

View File

@ -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"
},
]

35
seeds/delet.py Normal file
View File

@ -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()

View File

@ -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()

View File

@ -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:

View File

@ -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.")

View File

@ -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

View File

@ -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:

View File

@ -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,

View File

@ -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