1
resposta

[Dúvida] Duvida

Ja tentei fazer de tudo mas sempre q peco GET para o PostMan ele me volta uma lista vazia, irei mandar os codigos abaixo!

#__init__.py
from flask import Flask
from pymongo import MongoClient

db = None

def create_app():
    app = Flask(__name__)
    app.config.from_object('config.Config')
    global db

    try:
       client = MongoClient(app.config['MONGO_URI'])
       db = client.get_default_database()
    except Exception as e:
        print(f"Erro ao realizar a conexao com o banco de dados: {e}")  

    from .routes.main import main_bp
    app.register_blueprint(main_bp)

    return app
#run.py
from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)
#.env
MONGO_URI=mongodb://localhost:27017/stylessync
#main.py
from flask import Blueprint,jsonify,request
# Blueprint -> Responsavel por organizar o grupo de rotas
# jsonify -> Converte os dicionarios do python em formato json
# request -> permite as informacoes via requisicao

from app.models.users import LoginPayload
# Importa o modelo que construimos

from pydantic import ValidationError
# Permite o erro em caso de algum dado invalido

from app import db
# DataBase

from bson import ObjectId
# Converte a string

main_bp = Blueprint('main_bp', __name__)



# RF: O nosso sistema deve permitir que um usuario se autentique para obter um token
@main_bp.route('/login', methods = ['POST',])
def login():
    try:
        raw_data = request.get_json()
        user_data =LoginPayload(**raw_data)
    except ValidationError as e:
        return jsonify({"error":e.errors()}), 400 # Status code no fim
    except Exception as e:
        return jsonify({"error":"Erro durante a requisicao de dados"}), 500 # Status code no fim
    
    if user_data.username == 'admin' and user_data.password == '123':
        return jsonify({"message":"Login bem sucedido"})
    else:
        return jsonify({"error":"Credenciais invalidas"})



# RF: O Sistema deve permitir listagem de todos os produtos
@main_bp.route('/products',methods=['GET',])
def get_products():
    products_cursor = db.products.find({})
    products_list = []
    for products in products_cursor:
        products['_id'] = str(products['_id'])
        products_list.append(products)

    return jsonify(products_list)


# RF: O Sistema deve permitir a criacao de um novo produto
@main_bp.route('/products',methods=['POST',])
def cretate_products():
    return jsonify({"message":"Esta eh a rota de criacao dos produto"})


# RF: O Sistema deve permitir a visualizacao dos detalhes de um unico produto
@main_bp.route('/product/<int:product_id>',methods=['GET',])
def get_products_by_id(product_id):
    return jsonify({"message":f"Esta eh a rota de vizualizacao de detalhes do produto com o id {product_id}"})


# RF: O Sistema deve permitir a atualizacao de um unico produto e produto existente
@main_bp.route('/product/<int:product_id>',methods=['PUT',])
def update_product(product_id):
    return jsonify({"message":f"Esta eh a rota de atualizacao de detalhes do produto com o id {product_id}"})


# RF: O Sistema deve permitir a delecao de um unico produto e produto existente
@main_bp.route('/product/<int:product_id>',methods=['DELETE',])
def delete_product(product_id):
    return jsonify({"message":f"Esta eh a rota de delecao do produto com o id {product_id}"})



# RF: O Sistema deve permitir a importacao de vendas atraves de um arquivo
@main_bp.route('/sales/upload',methods=['POST',])
def upload_sales():
    return jsonify({"message":"Esta eh a rota de vizualizacao de uploado do arquivo de vendas"})




@main_bp.route('/')
def index():
    return jsonify({"message":"Oiiii, aprendendo Flask(eu acho)"})
#config.py
import os
from dotenv import load_dotenv

load_dotenv()

class Config:
    MONGO_URI = os.getenv("MONGO_URI"!)
1 resposta

Oi João! Como vai?

Quando você faz uma requisição GET para o endpoint de produtos, está recebendo uma lista vazia. Isso pode ocorrer por alguns motivos, então vou listar algumas coisas que você pode verificar:

  1. Verifique a Coleção e os Documentos: No MongoDB Compass, ou outro cliente, navegue até o banco de dados stylesync e veja se a coleção products contém documentos. Se não houver documentos, a lista retornada será vazia.

  2. Verifique a Configuração do .env: Certifique-se de que o arquivo .env está configurado corretamente e que o URI do MongoDB está correto. No seu caso, parece que está tudo certo, mas vale a pena conferir se o banco de dados stylesync está realmente sendo usado.

  3. Teste a Consulta Diretamente: Tente rodar um script Python simples fora do Flask para testar a conexão e a consulta ao MongoDB. Algo como:

    from pymongo import MongoClient
    
    client = MongoClient("mongodb://localhost:27017/")
    db = client.stylesync
    products = db.products.find({})
    for product in products:
        print(product)
    

    Isso ajudará a verificar se o problema está na conexão ou na configuração do Flask.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.