diff --git a/docs/service_instance/get_id_name.yml b/docs/service_instance/get_id_name.yml new file mode 100644 index 0000000..f2b6ea6 --- /dev/null +++ b/docs/service_instance/get_id_name.yml @@ -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 diff --git a/models/address.py b/models/address.py index 0ff053e..a879a2e 100644 --- a/models/address.py +++ b/models/address.py @@ -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 diff --git a/models/ambiente.py b/models/ambiente.py index fafc217..00d0f5e 100644 --- a/models/ambiente.py +++ b/models/ambiente.py @@ -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()) diff --git a/models/user.py b/models/user.py index 30e4c2c..e358a34 100644 --- a/models/user.py +++ b/models/user.py @@ -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) diff --git a/routes/address.py b/routes/address.py index 293d035..d3b8120 100644 --- a/routes/address.py +++ b/routes/address.py @@ -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 diff --git a/routes/ambiente.py b/routes/ambiente.py index 9f0c19b..37853f3 100644 --- a/routes/ambiente.py +++ b/routes/ambiente.py @@ -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('/', 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() diff --git a/routes/company.py b/routes/company.py index d931755..34a240b 100644 --- a/routes/company.py +++ b/routes/company.py @@ -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') diff --git a/routes/service_instance.py b/routes/service_instance.py index abaffae..db32b4f 100644 --- a/routes/service_instance.py +++ b/routes/service_instance.py @@ -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/', 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('/', 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 \ No newline at end of file diff --git a/routes/user.py b/routes/user.py index b33ccd1..1dc4489 100644 --- a/routes/user.py +++ b/routes/user.py @@ -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 ],