0
respostas

minha solução

Como ficaram os arquivos que editei ou criei para solucionar o desafio:

app/models/user.py

from pydantic import BaseModel, Field

class LoginPayload(BaseModel):
    username: str
    password: str

class UserCreate(BaseModel):
    username: str
    password: str

class UserResponse(BaseModel):
    id: str = Field(..., alias='_id')
    username: str

app/routes/user_routes.py

from flask import Blueprint, jsonify, request
from app.models.user import *
from app import db
from app.decorators import token_required
from pydantic import ValidationError
from bson import ObjectId

user_bp = Blueprint('main_bp', __name__)

@user_bp.route('/users', methods=['GET']) 
@token_required
def get_users(token):
    users_cursor = db.users.find({}, {"password": 0})
    users_list = []
    for user in users_cursor:
        user['_id'] = str(user['_id'])
        users_list.append(UserResponse(**user).model_dump(by_alias=True))
    return jsonify(users_list)

@user_bp.route('/users', methods=['POST']) 
@token_required
def create_user(token):
    try:
        user = UserCreate(**request.get_json())
    except ValidationError as e:
        return jsonify({"error": e.errors()})

    result = db.users.insert_one(user.model_dump())

    return jsonify({"message": "Esta é a rota de criação de usuário", "id": str(result.inserted_id)}), 201

@user_bp.route('/users/<string:user_id>', methods=['DELETE'])
@token_required
def delete_user(token, user_id):
    try:
        oid = ObjectId(user_id)
    except Exception:
        return jsonify({"error": "id do produto inválido"}), 400
    
    delete_user = db.users.delete_one({"_id": oid})

    if delete_user.deleted_count == 0:
        return jsonify({"error": "Usuário não foi encontrado"}), 404

    return "", 204

app/__init __.py

from flask import Flask
from pymongo import MongoClient

db = None

def create_app():
    """
    Função responsável por instanciar o flask e criar a aplicação
    """
    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)
    
    from .routes.category_routes import category_bp
    app.register_blueprint(category_bp)
    
    from .routes.user_routes import user_bp
    app.register_blueprint(user_bp)

    return app