ultima versao api

This commit is contained in:
ka-lucas 2025-04-28 19:33:52 -03:00
parent a76c3bb758
commit 207430ba05
9 changed files with 222 additions and 15 deletions

View File

@ -0,0 +1,33 @@
get:
tags:
- ServiceInstance
summary: Buscar ID da instância de serviço pelo nome
description: Retorna o ID de uma instância de serviço com base no nome fornecido na URL.
parameters:
- name: nome
in: path
required: true
schema:
type: string
description: Nome da instância de serviço.
responses:
200:
description: ID da instância de serviço retornado com sucesso.
content:
application/json:
schema:
type: object
properties:
id:
type: integer
example: 1
404:
description: Instância de serviço não encontrada.
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Instância de serviço não encontrada

View File

@ -5,12 +5,15 @@ class Address(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
street = db.Column(db.String(255), nullable=False) # Rua
number = db.Column(db.String(20), nullable=True) # Número
complement = db.Column(db.String(255), nullable=True) # Complemento
neighborhood = db.Column(db.String(100), nullable=False) # Bairro
city = db.Column(db.String(100), nullable=False) # Cidade
state = db.Column(db.String(100), nullable=False) # Estado
zip_code = db.Column(db.String(20), nullable=False) # CEP
country = db.Column(db.String(100), nullable=False) # País
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) # Relacionamento com o usuário
address_type_id = db.Column(db.Integer, db.ForeignKey('address_type.id'), nullable=False) # Tipo de endereço
address_type_id = db.Column(db.Integer, db.ForeignKey('address_type.id'), nullable=True) # Tipo de endereço
address_type = db.relationship('AddressType', backref='addresses') # Relacionamento com AddressType

View File

@ -6,6 +6,7 @@ class Ambiente(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
service_id = db.Column(db.Integer, db.ForeignKey('service.id'), nullable=False)
service_role_id = db.Column(db.Integer, db.ForeignKey('service_roles.id'), nullable=False)
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=True)
name = db.Column(db.String(255), nullable=False)
description = db.Column(db.Text, nullable=True)
created_at = db.Column(db.DateTime, default=db.func.current_timestamp())

View File

@ -5,12 +5,23 @@ class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
#dados basicos
username = db.Column(db.String(80), unique=True, nullable=True)
birth_date = db.Column(db.Date, nullable=True)
cpf = db.Column(db.String(11), unique=True, nullable=True)
pis = db.Column(db.String(11), unique=True, nullable=True)
rg = db.Column(db.String(20), unique=True, nullable=True)
cod_interno = db.Column(db.String(20), unique=True, nullable=True)
cargo = db.Column(db.String(80), nullable=True)
#contato
email = db.Column(db.String(120), unique=True, nullable=False)
email_secondary = db.Column(db.String(120), unique=True, nullable=True) # Campo de e-mail secundário
phone = db.Column(db.BigInteger(),nullable=True) # Campo de telefone
phone_secondary = db.Column(db.BigInteger(), nullable=True) # Campo de telefone secundário
password = db.Column(db.String(256), nullable=False)
profile_image = db.Column(db.String(255), nullable=True)
birth_date = db.Column(db.Date, nullable=True)
status = db.Column(db.String(120), nullable=True, default="ativo")
@ -21,6 +32,12 @@ class User(db.Model):
#relacionamento service_instance
service_instance_id = db.Column(db.Integer, db.ForeignKey('service_instance.id'), nullable=True)
#relacionamento company
company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=True)
#holiday
holiday_id = db.Column(db.Integer, db.ForeignKey('holiday.id'), nullable=True)
# Relacionamento hierárquico
parent_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)
children = db.relationship("User", backref=db.backref('parent', remote_side=[id]), lazy=True)

View File

@ -33,7 +33,10 @@ def create_address(user_id):
zip_code=data['zip_code'],
country=data['country'],
user_id=user.id,
address_type_id=data['address_type_id']
address_type_id=data['address_type_id'],
number=data.get('number'), # Número é opcional
complement=data.get('complement'), # Complemento é opcional
neighborhood=data.get('neighborhood') # Bairro é opcional
)
db.session.add(new_address)
@ -48,6 +51,9 @@ def create_address(user_id):
'state': new_address.state,
'zip_code': new_address.zip_code,
'country': new_address.country,
'number': new_address.number,
'complement': new_address.complement,
'neighborhood': new_address.neighborhood,
'address_type': new_address.address_type.name
}
}), 201
@ -73,6 +79,9 @@ def get_addresses_by_user_id(user_id):
'state': address.state,
'zip_code': address.zip_code,
'country': address.country,
'number': address.number,
'complement': address.complement,
'neighborhood': address.neighborhood,
'address_type': address.address_type.name
} for address in addresses
]
@ -99,6 +108,12 @@ def update_address(user_id, address_id):
address.zip_code = data['zip_code']
if 'country' in data:
address.country = data['country']
if 'number' in data:
address.number = data['number']
if 'complement' in data:
address.complement = data['complement']
if 'neighborhood' in data:
address.neighborhood = data['neighborhood']
if 'address_type_id' in data:
address_type = AddressType.query.get(data['address_type_id'])
if not address_type:
@ -116,6 +131,9 @@ def update_address(user_id, address_id):
'state': address.state,
'zip_code': address.zip_code,
'country': address.country,
'number': address.number,
'complement': address.complement,
'neighborhood': address.neighborhood,
'address_type': address.address_type.name
}
}), 200

View File

@ -3,6 +3,7 @@ from flask_jwt_extended import jwt_required
from flasgger.utils import swag_from
from models.service import Service
from models.service_roles import ServiceRole
from models.service_instance import ServiceInstance
from models.ambiente import Ambiente
from models.user import db
@ -17,6 +18,7 @@ def create_ambiente():
service_role_id = data.get('service_role_id')
name = data.get('name')
description = data.get('description')
service_instance_id = data.get('service_instance_id')
# Verifica se o serviço existe
#service = Service.query.get(service_id)
@ -33,7 +35,8 @@ def create_ambiente():
service_id=service_id,
service_role_id = service_role_id,
name=name,
description=description
description=description,
service_instance_id=service_instance_id
)
# Adiciona e comita no banco de dados
@ -59,7 +62,8 @@ def list_ambiente():
'name': ambiente.name,
'description': ambiente.description,
'service_id': ambiente.service_id,
'service_role_id': ambiente.service_role_id
'service_role_id': ambiente.service_role_id,
'service_instance_id': ambiente.service_instance_id,
} for ambiente in ambientes
],
'total': pagination.total,
@ -80,7 +84,8 @@ def get_ambiente(ambiente_id):
'name': ambiente.name,
'description': ambiente.description,
'service_id': ambiente.service_id,
'service_role_id': ambiente.service_role_id
'service_role_id': ambiente.service_role_id,
'service_instance_id': ambiente.service_instance_id,
}), 200
@ambiente_bp.route('/<int:ambiente_id>', methods=['PUT'])
@ -99,7 +104,7 @@ def update_camera(ambiente_id):
if name:
ambiente.name = name
if description:
ambiente.description = description
ambiente.description = description
db.session.commit()

View File

@ -16,7 +16,7 @@ def create_company():
data = request.get_json()
name = data.get('name')
fantasy_name = data.get('fantasy_name')
type = data.get('tipo')
type = data.get('type')
cnpj = data.get('cnpj')
#contato
email = data.get('email')

View File

@ -3,9 +3,38 @@ from flask_jwt_extended import jwt_required
from flasgger.utils import swag_from
from models.service_instance import ServiceInstance
from models.service import Service
from models.user import db
service_instance_bp = Blueprint('service_instance', __name__, url_prefix='/service_instance')
@service_instance_bp.route('/', methods=['POST'])
@jwt_required()
@swag_from('../docs/service_instance/create.yml')
def create_service_instance():
data = request.get_json()
service_id = data.get('service_id')
name = data.get('name')
description = data.get('description')
# Verifica se o serviço existe
service = Service.query.get(service_id)
if not service:
return jsonify({'error': 'Serviço não encontrado'}), 404
# Cria um novo ServiceInstance
service_instance = ServiceInstance(
service_id=service_id,
name=name,
description=description
)
# Adiciona e comita no banco de dados
db.session.add(service_instance)
db.session.commit()
return jsonify({'message': 'Instância de serviço criada com sucesso', 'service_instance_id': service_instance.id}), 201
@service_instance_bp.route('/', methods=['GET'])
@jwt_required()
@swag_from('../docs/service_instance/get.yml')
@ -29,3 +58,29 @@ def list_ambiente():
'page': pagination.page,
'per_page': pagination.per_page
}), 200
@service_instance_bp.route('/get-id-by-name/<string:nome>', methods=['GET'])
@jwt_required()
@swag_from('../docs/service_instance/get_id_by_name.yml')
def get_service_instance_id_by_name(nome):
if not nome:
return jsonify({'error': 'Nome não fornecido'}), 400
service_instance = ServiceInstance.query.filter_by(name=nome).first()
if not service_instance:
return jsonify({'error': 'Instância de serviço não encontrada'}), 404
return jsonify({'id': service_instance.id}), 200
@service_instance_bp.route('/<int:service_instance_id>', methods=['DELETE'])
@jwt_required()
@swag_from('../docs/service_instance/delete.yml')
def delete_service_instance(service_instance_id):
service_instance = ServiceInstance.query.get(service_instance_id)
if not service_instance:
return jsonify({'error': 'Instância de serviço não encontrada'}), 404
db.session.delete(service_instance)
db.session.commit()
return jsonify({'message': 'Instância de serviço excluída com sucesso'}), 200

View File

@ -20,14 +20,25 @@ def create_user():
data = request.get_json()
username = data.get('username')
password = data.get('password')
email = data.get('email')
phone = data.get('phone')
profile_image = data.get('profile_image')
birth_date = data.get('birth_date')
parent_id = data.get('parent_id')
service_instance_id = data.get('service_instance_id')
status = data.get('status')
cargo = data.get('cargo')
cpf = data.get('cpf')
pis = data.get('pis')
rg = data.get('rg')
cod_interno = data.get('cod_interno')
# Contato
email = data.get('email')
phone = data.get('phone')
email_secondary = data.get('email_secondary')
phone_secondary = data.get('phone_secondary')
# Verifica se o usuário já existe
existing_user = User.query.filter_by(username=username).first()
@ -43,7 +54,16 @@ def create_user():
birth_date=birth_date,
parent_id=parent_id,
service_instance_id=service_instance_id,
status=status
status=status,
cpf=cpf,
pis=pis,
rg=rg,
cod_interno=cod_interno,
email_secondary=email_secondary,
phone_secondary=phone_secondary,
cargo = cargo,
)
user.set_password(password)
@ -73,6 +93,13 @@ def create_subordinate(logged_user_id):
birth_date = data.get('birth_date')
service_instance_id = data.get('service_instance_id')
status = data.get('status')
cpf = data.get('cpf')
pis = data.get('pis')
rg = data.get('rg')
cod_interno = data.get('cod_interno')
email_secondary = data.get('email_secondary')
phone_secondary = data.get('phone_secondary')
cargo = data.get('cargo')
existing_user = User.query.filter_by(username=username).first()
if existing_user:
@ -86,7 +113,14 @@ def create_subordinate(logged_user_id):
birth_date=birth_date,
parent_id=parent_id,
service_instance_id=service_instance_id,
status=status
status=status,
cpf=cpf,
pis=pis,
rg=rg,
cod_interno=cod_interno,
email_secondary=email_secondary,
phone_secondary=phone_secondary,
cargo=cargo,
)
subordinate.set_password(password)
@ -116,7 +150,15 @@ def list_hierarchy(user_id):
'birth_date':child.birth_date,
'phone':child.phone,
'service_instance_id':child.service_instance_id,
'status':child.status
'status':child.status,
'cpf': child.cpf,
'pis': child.pis,
'rg': child.rg,
'cod_interno': child.cod_interno,
'email_secondary': child.email_secondary,
'phone_secondary': child.phone_secondary,
'cargo': child.cargo,
})
# Verifica recursivamente os filhos (subordinados dos subordinados)
flat_list.extend(flatten_hierarchy(child))
@ -148,7 +190,15 @@ def list_hierarchy_by_id():
'phone':user.phone,
'subordinates': [build_hierarchy(sub) for sub in user.children],
'service_instance_id':user.service_instance_id,
'status':user.status
'status':user.status,
'cpf': user.cpf,
'pis': user.pis,
'rg': user.rg,
'cod_interno': user.cod_interno,
'email_secondary': user.email_secondary,
'phone_secondary': user.phone_secondary,
'cargo': user.cargo,
}
@ -194,6 +244,20 @@ def update_user(user_id):
if 'status' in data:
user.status = data['status']
if 'cpf' in data:
user.cpf = data['cpf']
if 'pis' in data:
user.pis = data['pis']
if 'rg' in data:
user.rg = data['rg']
if 'cod_interno' in data:
user.cod_interno = data['cod_interno']
if 'email_secondary' in data:
user.email_secondary = data['email_secondary']
if 'phone_secondary' in data:
user.phone_secondary = data['phone_secondary']
if 'cargo' in data:
user.cargo = data['cargo']
db.session.commit()
return jsonify({'message': 'Usuário atualizado com sucesso'}), 200
@ -268,6 +332,14 @@ def get_user(user_id):
'parent_id': user.parent_id,
'birth_date':user.birth_date,
'phone':user.phone,
'cpf': user.cpf,
'pis': user.pis,
'rg': user.rg,
'cod_interno': user.cod_interno,
'email_secondary': user.email_secondary,
'phone_secondary': user.phone_secondary,
'cargo': user.cargo,
#'service_role_id':user.service_role_id,
'status':user.status,
'licenses': [
@ -296,7 +368,10 @@ def get_user(user_id):
'state': address.state,
'zip_code': address.zip_code,
'country': address.country,
'type': address.address_type.name
'type': address.address_type.name,
'number': address.number,
'complement': address.complement,
'neighborhood': address.neighborhood
}
for address in addresses
],