From d0960bb6caaf4403cf9777e7921b029c23a70047 Mon Sep 17 00:00:00 2001 From: looccasgtr Date: Thu, 8 May 2025 21:27:48 -0400 Subject: [PATCH] Rotas de Tag validadas --- app/__init__.py | 3 ++- app/models/model_tag.py | 12 +++++------ app/routes/tag_routes.py | 45 +++++++++++++++++++++++++++++----------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 90d7fb3..0f30485 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -6,6 +6,7 @@ from app.routes.user_routes import user_bp from app.routes.login_form import login_bp from app.routes.dashboard import dashboard_bp from app.routes.invoice_routes import invoice_bp +from app.routes.tag_routes import tag_bp from werkzeug.security import generate_password_hash def create_default_user(): @@ -58,5 +59,5 @@ def create_app(): app.register_blueprint(invoice_bp, url_prefix="/invoices") app.register_blueprint(login_bp, url_prefix="/login_bp") app.register_blueprint(dashboard_bp, url_prefix="/dashboard") - + app.register_blueprint(tag_bp, url_prefix="/tags") return app diff --git a/app/models/model_tag.py b/app/models/model_tag.py index bb1b41d..70e5d00 100644 --- a/app/models/model_tag.py +++ b/app/models/model_tag.py @@ -1,12 +1,10 @@ -from sqlalchemy import Column, String -from sqlalchemy.dialects.postgresql import UUID -from sqlalchemy.ext.declarative import declarative_base +from app.database import db + import uuid -Base = declarative_base() -class Tag(Base): +class Tag(db.Model): __tablename__ = "tag" - id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) - nome = Column(String, unique=True, nullable=False) + id = db.Column(db.UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) + nome = db.Column(db.String, unique=True, nullable=False) diff --git a/app/routes/tag_routes.py b/app/routes/tag_routes.py index 36c124d..d7023e1 100644 --- a/app/routes/tag_routes.py +++ b/app/routes/tag_routes.py @@ -1,18 +1,39 @@ from flask import Blueprint, request, jsonify -from models.tag import Tag -from models.base import db +from app.models.model_tag import Tag +from app.database import db +from sqlalchemy.exc import SQLAlchemyError -tag_routes = Blueprint("tag_routes", __name__, url_prefix="/tags") +tag_bp = Blueprint("tag_routes", __name__, url_prefix="/tags") -@tag_routes.route("/", methods=["POST"]) +@tag_bp.route("/", methods=["POST"]) def create_tag(): - nome = request.json.get("nome") - new_tag = Tag(nome=nome) - db.session.add(new_tag) - db.session.commit() - return jsonify({"id": new_tag.id, "nome": new_tag.nome}), 201 + try: + nome = request.json.get("nome") + if not nome: + return jsonify({"error": "Nome é obrigatório"}), 400 -@tag_routes.route("/", methods=["GET"]) + # Verifica se já existe uma tag com o mesmo nome + existing_tag = Tag.query.filter_by(nome=nome).first() + if existing_tag: + return jsonify({"error": "Nome já está em uso"}), 409 + + new_tag = Tag(nome=nome) + db.session.add(new_tag) + db.session.commit() + return jsonify({"id": new_tag.id, "nome": new_tag.nome}), 201 + + except SQLAlchemyError as e: + db.session.rollback() + return jsonify({"error": "Erro ao criar tag", "details": str(e)}), 500 + +@tag_bp.route("/", methods=["GET"]) def list_tags(): - tags = Tag.query.all() - return jsonify([{"id": tag.id, "nome": tag.nome} for tag in tags]), 200 \ No newline at end of file + try: + tags = Tag.query.all() + if not tags: + return jsonify({"message": "Nenhuma tag encontrada"}), 404 + + return jsonify([{"id": tag.id, "nome": tag.nome} for tag in tags]), 200 + + except SQLAlchemyError as e: + return jsonify({"error": "Erro ao listar tags", "details": str(e)}), 500