From 93a6c1e27e5f8c3a805b6e4b0b43445c42f6b0d8 Mon Sep 17 00:00:00 2001 From: KennnedyRamos Date: Mon, 18 Nov 2024 19:55:55 -0300 Subject: [PATCH 1/2] Primeiro commit na minha-branch --- .gitignore | 28 ++++++++++++++++++++++++++ Dockerfile | 20 +++++++++++++++++++ dev_test | 1 + docker-compose.yml | 35 ++++++++++++++++++++++++++++++++ init.sql | 13 ++++++++++++ requirements.txt | 5 +++++ src/Entity/post.py | 17 ++++++++++++++++ src/Entity/user.py | 13 ++++++++++++ src/__init__.py | 0 src/config/db.py | 18 +++++++++++++++++ src/index.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 200 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 160000 dev_test create mode 100644 docker-compose.yml create mode 100644 init.sql create mode 100644 requirements.txt create mode 100644 src/Entity/post.py create mode 100644 src/Entity/user.py create mode 100644 src/__init__.py create mode 100644 src/config/db.py create mode 100644 src/index.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1857e77b --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ + +# Arquivos de ambiente +.env +*.db + +# Diretórios de dependências +venv/ +node_modules/ + +# Arquivos compilados Python +*.pyc +__pycache__/ + +# Arquivos de log +*.log + +# Arquivos temporários +*.tmp +*.bak +*.swp + +# Arquivos de sistema +.DS_Store +Thumbs.db + +# Arquivos do Docker +docker-compose.override.yml +Dockerfile.prod diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c916fc8e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Usando a imagem base do Python +FROM python:3.12-slim + +# Definindo o diretório de trabalho dentro do contêiner +WORKDIR /app + +# Copiando o arquivo de dependências +COPY requirements.txt . + +# Instalando as dependências +RUN pip install -r requirements.txt + +# Copiando o código da aplicação para o contêiner +COPY . /app + +# Adicionando o diretório /app/src ao PYTHONPATH +ENV PYTHONPATH="/app/src:${PYTHONPATH}" + +# Comando para rodar a aplicação +CMD ["python", "src/index.py"] diff --git a/dev_test b/dev_test new file mode 160000 index 00000000..59883890 --- /dev/null +++ b/dev_test @@ -0,0 +1 @@ +Subproject commit 59883890d1b40d1590781c4840d2ab10a2cef463 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..3c02f4d2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +services: + app: + build: . + container_name: flask_app + ports: + - "5000:5000" + env_file: + - .env + depends_on: + - db + volumes: + - .:/app + networks: + - app_network + + db: + image: postgres:13 + container_name: postgres_db + environment: + POSTGRES_USER: ${DB_USER} + POSTGRES_PASSWORD: ${DB_PASS} + POSTGRES_DB: ${DB_NAME} + ports: + - "5432:5432" + volumes: + - db_data:/var/lib/postgresql/data + networks: + - app_network + +networks: + app_network: + driver: bridge + +volumes: + db_data: diff --git a/init.sql b/init.sql new file mode 100644 index 00000000..dd5dbbd9 --- /dev/null +++ b/init.sql @@ -0,0 +1,13 @@ +CREATE TABLE user ( + id SERIAL PRIMARY KEY, + firstName VARCHAR(100) NOT NULL, + lastName VARCHAR(100) NOT NULL, + email VARCHAR(100) NOT NULL +); + +CREATE TABLE post ( + id SERIAL PRIMARY KEY, + title VARCHAR(100) NOT NULL, + description VARCHAR(100) NOT NULL, + userId INTEGER REFERENCES user(id) NOT NULL +); diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..fca6d44d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +flask +flask_sqlalchemy +python-dotenv +psycopg2-binary +flask_migrate \ No newline at end of file diff --git a/src/Entity/post.py b/src/Entity/post.py new file mode 100644 index 00000000..4b0f5343 --- /dev/null +++ b/src/Entity/post.py @@ -0,0 +1,17 @@ +from src.config.db import db +from src.Entity.user import User + +class Post(db.Model): + __tablename__ = 'posts' + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + title = db.Column(db.String(100), nullable=False) + description = db.Column(db.String(100), nullable=False) + + + userId = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) + + + user = db.relationship('User', back_populates='posts') + + def __repr__(self): + return f"" diff --git a/src/Entity/user.py b/src/Entity/user.py new file mode 100644 index 00000000..39e4810a --- /dev/null +++ b/src/Entity/user.py @@ -0,0 +1,13 @@ +from src.config.db import db + +class User(db.Model): + __tablename__ = 'users' + id = db.Column(db.Integer, primary_key=True, autoincrement=True) + firstName = db.Column(db.String(100), nullable=False) + lastName = db.Column(db.String(100), nullable=False) + email = db.Column(db.String(100), nullable=False) + + posts = db.relationship('Post', back_populates='user', lazy=True) + + def __repr__(self): + return f"" diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/config/db.py b/src/config/db.py new file mode 100644 index 00000000..0814661d --- /dev/null +++ b/src/config/db.py @@ -0,0 +1,18 @@ +from flask_sqlalchemy import SQLAlchemy +from dotenv import load_dotenv +import os + +load_dotenv() + +# Instanciando o banco de dados +db = SQLAlchemy() + +def init_db(app): + # Configurando a URI do banco de dados a partir da variável de ambiente + app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("DATABASE_URL") + + # Desabilitando o rastreamento de modificações no SQLAlchemy + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + + # Inicializando o banco de dados com o app Flask + db.init_app(app) diff --git a/src/index.py b/src/index.py new file mode 100644 index 00000000..9127f932 --- /dev/null +++ b/src/index.py @@ -0,0 +1,50 @@ +from flask import Flask, jsonify, request +from src.config.db import init_db, db +from src.Entity.user import User +from src.Entity.post import Post +from dotenv import load_dotenv +from flask_migrate import Migrate +import os + +# Carregar variáveis de ambiente do arquivo .env +load_dotenv() + +# Inicializando o aplicativo Flask +app = Flask(__name__) + +# Configurando a URI do banco de dados a partir da variável DATABASE_URL +app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL') +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + +# Inicializando o banco de dados +init_db(app) +migrate = Migrate(app, db) + +@app.route('/') +def home(): + return "Hello, World!" + +# Endpoint para criar um usuário +@app.route('/users', methods=['POST']) +def create_user(): + data = request.get_json() + new_user = User(firstName=data['firstName'], lastName=data['lastName'], email=data['email']) + db.session.add(new_user) + db.session.commit() + return jsonify({'message': 'User created successfully'}), 201 + +# Endpoint para criar um post +@app.route('/posts', methods=['POST']) +def create_post(): + data = request.get_json() + user = User.query.get(data['userId']) + if not user: + return jsonify({'message': 'User not found'}), 404 + new_post = Post(title=data['title'], description=data['description'], userId=data['userId']) + db.session.add(new_post) + db.session.commit() + return jsonify({'message': 'Post created successfully'}), 201 + +if __name__ == '__main__': + app.run(debug=True, host='0.0.0.0', port=5000) + From 0f74a27b01ce387015169f4198b9fdcdee20d21b Mon Sep 17 00:00:00 2001 From: KennnedyRamos Date: Mon, 18 Nov 2024 20:20:24 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Aletra=C3=A7=C3=A3o=20da=20src=20original?= =?UTF-8?q?=20pela=20src=20desenvolvida=20por=20mim.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 28 -------------------------- Dockerfile | 20 ------------------- docker-compose.yml | 35 -------------------------------- init.sql | 13 ------------ requirements.txt | 5 ----- src/Entity/post.py | 17 ---------------- src/Entity/user.py | 13 ------------ src/__init__.py | 0 src/config/db.py | 18 ----------------- src/index.py | 50 ---------------------------------------------- 10 files changed, 199 deletions(-) delete mode 100644 .gitignore delete mode 100644 Dockerfile delete mode 100644 docker-compose.yml delete mode 100644 init.sql delete mode 100644 requirements.txt delete mode 100644 src/Entity/post.py delete mode 100644 src/Entity/user.py delete mode 100644 src/__init__.py delete mode 100644 src/config/db.py delete mode 100644 src/index.py diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1857e77b..00000000 --- a/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ - -# Arquivos de ambiente -.env -*.db - -# Diretórios de dependências -venv/ -node_modules/ - -# Arquivos compilados Python -*.pyc -__pycache__/ - -# Arquivos de log -*.log - -# Arquivos temporários -*.tmp -*.bak -*.swp - -# Arquivos de sistema -.DS_Store -Thumbs.db - -# Arquivos do Docker -docker-compose.override.yml -Dockerfile.prod diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index c916fc8e..00000000 --- a/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# Usando a imagem base do Python -FROM python:3.12-slim - -# Definindo o diretório de trabalho dentro do contêiner -WORKDIR /app - -# Copiando o arquivo de dependências -COPY requirements.txt . - -# Instalando as dependências -RUN pip install -r requirements.txt - -# Copiando o código da aplicação para o contêiner -COPY . /app - -# Adicionando o diretório /app/src ao PYTHONPATH -ENV PYTHONPATH="/app/src:${PYTHONPATH}" - -# Comando para rodar a aplicação -CMD ["python", "src/index.py"] diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 3c02f4d2..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,35 +0,0 @@ -services: - app: - build: . - container_name: flask_app - ports: - - "5000:5000" - env_file: - - .env - depends_on: - - db - volumes: - - .:/app - networks: - - app_network - - db: - image: postgres:13 - container_name: postgres_db - environment: - POSTGRES_USER: ${DB_USER} - POSTGRES_PASSWORD: ${DB_PASS} - POSTGRES_DB: ${DB_NAME} - ports: - - "5432:5432" - volumes: - - db_data:/var/lib/postgresql/data - networks: - - app_network - -networks: - app_network: - driver: bridge - -volumes: - db_data: diff --git a/init.sql b/init.sql deleted file mode 100644 index dd5dbbd9..00000000 --- a/init.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE user ( - id SERIAL PRIMARY KEY, - firstName VARCHAR(100) NOT NULL, - lastName VARCHAR(100) NOT NULL, - email VARCHAR(100) NOT NULL -); - -CREATE TABLE post ( - id SERIAL PRIMARY KEY, - title VARCHAR(100) NOT NULL, - description VARCHAR(100) NOT NULL, - userId INTEGER REFERENCES user(id) NOT NULL -); diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index fca6d44d..00000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -flask -flask_sqlalchemy -python-dotenv -psycopg2-binary -flask_migrate \ No newline at end of file diff --git a/src/Entity/post.py b/src/Entity/post.py deleted file mode 100644 index 4b0f5343..00000000 --- a/src/Entity/post.py +++ /dev/null @@ -1,17 +0,0 @@ -from src.config.db import db -from src.Entity.user import User - -class Post(db.Model): - __tablename__ = 'posts' - id = db.Column(db.Integer, primary_key=True, autoincrement=True) - title = db.Column(db.String(100), nullable=False) - description = db.Column(db.String(100), nullable=False) - - - userId = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) - - - user = db.relationship('User', back_populates='posts') - - def __repr__(self): - return f"" diff --git a/src/Entity/user.py b/src/Entity/user.py deleted file mode 100644 index 39e4810a..00000000 --- a/src/Entity/user.py +++ /dev/null @@ -1,13 +0,0 @@ -from src.config.db import db - -class User(db.Model): - __tablename__ = 'users' - id = db.Column(db.Integer, primary_key=True, autoincrement=True) - firstName = db.Column(db.String(100), nullable=False) - lastName = db.Column(db.String(100), nullable=False) - email = db.Column(db.String(100), nullable=False) - - posts = db.relationship('Post', back_populates='user', lazy=True) - - def __repr__(self): - return f"" diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/config/db.py b/src/config/db.py deleted file mode 100644 index 0814661d..00000000 --- a/src/config/db.py +++ /dev/null @@ -1,18 +0,0 @@ -from flask_sqlalchemy import SQLAlchemy -from dotenv import load_dotenv -import os - -load_dotenv() - -# Instanciando o banco de dados -db = SQLAlchemy() - -def init_db(app): - # Configurando a URI do banco de dados a partir da variável de ambiente - app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("DATABASE_URL") - - # Desabilitando o rastreamento de modificações no SQLAlchemy - app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False - - # Inicializando o banco de dados com o app Flask - db.init_app(app) diff --git a/src/index.py b/src/index.py deleted file mode 100644 index 9127f932..00000000 --- a/src/index.py +++ /dev/null @@ -1,50 +0,0 @@ -from flask import Flask, jsonify, request -from src.config.db import init_db, db -from src.Entity.user import User -from src.Entity.post import Post -from dotenv import load_dotenv -from flask_migrate import Migrate -import os - -# Carregar variáveis de ambiente do arquivo .env -load_dotenv() - -# Inicializando o aplicativo Flask -app = Flask(__name__) - -# Configurando a URI do banco de dados a partir da variável DATABASE_URL -app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL') -app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False - -# Inicializando o banco de dados -init_db(app) -migrate = Migrate(app, db) - -@app.route('/') -def home(): - return "Hello, World!" - -# Endpoint para criar um usuário -@app.route('/users', methods=['POST']) -def create_user(): - data = request.get_json() - new_user = User(firstName=data['firstName'], lastName=data['lastName'], email=data['email']) - db.session.add(new_user) - db.session.commit() - return jsonify({'message': 'User created successfully'}), 201 - -# Endpoint para criar um post -@app.route('/posts', methods=['POST']) -def create_post(): - data = request.get_json() - user = User.query.get(data['userId']) - if not user: - return jsonify({'message': 'User not found'}), 404 - new_post = Post(title=data['title'], description=data['description'], userId=data['userId']) - db.session.add(new_post) - db.session.commit() - return jsonify({'message': 'Post created successfully'}), 201 - -if __name__ == '__main__': - app.run(debug=True, host='0.0.0.0', port=5000) -