Models Asafe
This commit is contained in:
parent
9e9d8958c1
commit
67fae641a3
@ -1,4 +1,25 @@
|
||||
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 app.database import db
|
||||
from app.models.user import User
|
||||
|
||||
15
app/models/Documento.py
Normal file
15
app/models/Documento.py
Normal 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
13
app/models/Organizacao.py
Normal 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
24
app/models/usuario.py
Normal 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
44
app/routes/documentos.py
Normal 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
43
app/routes/organizacao.py
Normal 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
44
app/routes/usuario.py
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user