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