This commit is contained in:
looccasgtr 2025-05-22 20:31:37 -04:00
commit a999187e78
7 changed files with 204 additions and 0 deletions

View File

@ -1,4 +1,25 @@
from flask import Flask from flask import Flask
from app.database import db
# Importação dos blueprints
from app.routes.usuario import usuarios_bp
from app.routes.organizacao import organizacoes_bp
from app.routes.documentos import documentos_bp
def create_app():
app = Flask(__name__)
app.config.from_object("config")
# Inicializa a extensão SQLAlchemy
db.init_app(app)
# Registra os blueprints
app.register_blueprint(usuarios_bp)
app.register_blueprint(organizacoes_bp)
app.register_blueprint(documentos_bp)
return app
from flask import Flask
from flasgger import Swagger from flasgger import Swagger
from app.database import db from app.database import db
from app.models.user import User from app.models.user import User

15
app/models/Documento.py Normal file
View File

@ -0,0 +1,15 @@
# documento.py
from app.database import db
import uuid
class Documento(db.Model): #
__tablename__ = 'documentos'
id = db.Column(db.UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
nome_arquivo = db.Column(db.String, nullable=False)
caminho_arquivo = db.Column(db.String, nullable=False)
usuario_id = db.Column(db.Integer, db.ForeignKey('usuario.id'), nullable=False)
criado_em = db.Column(db.DateTime(timezone=True), server_default=db.func.now(), nullable=False)
usuario = db.relationship('Usuario', back_populates='documentos')

13
app/models/Organizacao.py Normal file
View File

@ -0,0 +1,13 @@
from app.database import db
class Organizacao(db.Model):
__tablename__ = 'organizacao'
id = db.Column(db.Integer, primary_key=True,
autoincrement=True, unique=True)
nome = db.Column(db.String, nullable=False, unique=True)
criado_em = db.Column(db.DateTime(timezone=True),
server_default=db.func.now(), nullable=False)
usuarios = db.relationship('Usuario', back_populates='organizacao')

24
app/models/usuario.py Normal file
View File

@ -0,0 +1,24 @@
# usuario.py
from app.database import db
class Usuario(db.Model):
__tablename__ = 'usuario'
id = db.Column(db.Integer, primary_key=True,
autoincrement=True, unique=True)
nome = db.Column(db.String, nullable=False)
email = db.Column(db.String, nullable=False, unique=True)
senha_hash = db.Column(db.String, nullable=False)
organizacao_id = db.Column(db.Integer, db.ForeignKey(
'organizacao.id'), nullable=False)
criado_em = db.Column(db.DateTime(timezone=True),
server_default=db.func.now(), nullable=False)
atualizado_em = db.Column(db.DateTime(
timezone=True), onupdate=db.func.now())
organizacao = db.relationship('Organizacao', back_populates='usuarios')
documentos = db.relationship('Documento', back_populates='usuario')
def __repr__(self):
return f'<Usuario {self.nome}>'

44
app/routes/documentos.py Normal file
View File

@ -0,0 +1,44 @@
from flask import Blueprint, request, jsonify
from app.database import db
from app.models import Documento
documentos_bp = Blueprint('documentos', __name__, url_prefix='/documentos')
@documentos_bp.route('/', methods=['GET'])
def get_documentos():
documentos = Documento.query.all()
documentos_data = [
{
'id': str(doc.id),
'nome_arquivo': doc.nome_arquivo,
'caminho_arquivo': doc.caminho_arquivo,
'usuario_id': doc.usuario_id,
'criado_em': doc.criado_em
}
for doc in documentos
]
return jsonify(documentos_data), 200
@documentos_bp.route('/', methods=['POST'])
def create_documento():
data = request.get_json()
if not all(k in data for k in ('nome_arquivo', 'caminho_arquivo', 'usuario_id')):
return jsonify({'error': 'Campos obrigatórios ausentes'}), 400
try:
novo_documento = Documento(
nome_arquivo=data['nome_arquivo'],
caminho_arquivo=data['caminho_arquivo'],
usuario_id=data['usuario_id']
)
db.session.add(novo_documento)
db.session.commit()
return jsonify({
'message': 'documento criado com sucesso',
'id': str(novo_documento.id)
}), 201
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500

43
app/routes/organizacao.py Normal file
View File

@ -0,0 +1,43 @@
from flask import Blueprint, request, jsonify
from app.database import db
from app.models import Organizacao # ajuste conforme sua estrutura
organizacoes_bp = Blueprint(
'organizacoes', __name__, url_prefix='/organizacoes')
@organizacoes_bp.route('/', methods=['GET'])
def get_organizacoes():
organizacoes = Organizacao.query.all()
data = [
{
'id': org.id,
'nome': org.nome,
'criado_em': org.criado_em
}
for org in organizacoes
]
return jsonify(data), 200
@organizacoes_bp.route('/', methods=['POST'])
def create_organizacao():
data = request.get_json()
if not data or 'nome' not in data:
return jsonify({'error': 'O campo "nome" é obrigatório'}), 400
if Organizacao.query.filter_by(nome=data['nome']).first():
return jsonify({'error': 'Já existe uma organização com este nome'}), 409
try:
nova_org = Organizacao(nome=data['nome'])
db.session.add(nova_org)
db.session.commit()
return jsonify({
'message': 'Organização criada com sucesso',
'id': nova_org.id
}), 201
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500

44
app/routes/usuario.py Normal file
View File

@ -0,0 +1,44 @@
from flask import Blueprint, request, jsonify
from app.database import db
from app.models.usuario import Usuario # nome correto do modelo
usuarios_bp = Blueprint('usuarios', __name__, url_prefix='/usuarios')
@usuarios_bp.route('/', methods=['GET'])
def get_usuarios():
usuarios = Usuario.query.all()
usuarios_data = [
{
'id': usuario.id,
'nome': usuario.nome,
'email': usuario.email,
'organizacao_id': usuario.organizacao_id,
'criado_em': usuario.criado_em,
'atualizado_em': usuario.atualizado_em
}
for usuario in usuarios
]
return jsonify(usuarios_data), 200
@usuarios_bp.route('/', methods=['POST'])
def create_usuario():
data = request.get_json()
if not all(k in data for k in ('nome', 'email', 'senha_hash', 'organizacao_id')):
return jsonify({'error': 'Campos obrigatórios ausentes'}), 400
if Usuario.query.filter_by(email=data['email']).first():
return jsonify({'error': 'E-mail já está em uso'}), 409
novo_usuario = Usuario(
nome=data['nome'],
email=data['email'],
senha_hash=data['senha_hash'],
organizacao_id=data['organizacao_id']
)
db.session.add(novo_usuario)
db.session.commit()
return jsonify({'message': 'Usuário criado com sucesso', 'id': novo_usuario.id}), 201